Flatten
Keras 에서 기능 의 역할을 이해하려고합니다 . 아래는 간단한 2 계층 네트워크 인 내 코드입니다. 모양 (3, 2)의 2 차원 데이터를 가져 와서 모양 (1, 4)의 1 차원 데이터를 출력합니다.
model = Sequential()
model.add(Dense(16, input_shape=(3, 2)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(4))
model.compile(loss='mean_squared_error', optimizer='SGD')
x = np.array([[[1, 2], [3, 4], [5, 6]]])
y = model.predict(x)
print y.shape
이것은 y
(1, 4) 모양을 출력합니다 . 그러나 Flatten
선을 제거하면 y
(1, 3, 4) 모양이 인쇄됩니다 .
나는 이것을 이해하지 못한다. 신경망에 대한 나의 이해에서이 model.add(Dense(16, input_shape=(3, 2)))
기능은 16 개의 노드로 숨겨진 완전 연결 계층을 생성하는 것입니다. 이러한 각 노드는 3x2 입력 요소 각각에 연결됩니다. 따라서이 첫 번째 계층의 출력에있는 16 개의 노드는 이미 "평평"합니다. 따라서 첫 번째 레이어의 출력 모양은 (1, 16)이어야합니다. 그런 다음 두 번째 레이어는 이것을 입력으로 받아 (1, 4) 모양의 데이터를 출력합니다.
따라서 첫 번째 레이어의 출력이 이미 "평평"하고 모양 (1, 16) 인 경우 더 평면화해야하는 이유는 무엇입니까?
Dense(16, input_shape=(5,3)
하면 16 개 집합 (그리고 이러한 뉴런의 5 개 집합 모두에 대해)의 각 출력 뉴런이 모든 (3 x 5 = 15) 입력 뉴런에 연결됩니까? 또는 첫 번째 16 개 세트의 각 뉴런은 첫 번째 5 개 입력 뉴런 세트의 3 개 뉴런에만 연결되고 두 번째 16 개 세트의 각 뉴런은 5 개 입력 두 번째 세트의 3 개 뉴런에만 연결됩니다. 뉴런, 등등 ... 나는 그것이 무엇인지 혼란 스럽습니다!