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)になります。そして、第2層はこれを入力として、形状(1、4)のデータを出力する。
では、最初のレイヤーの出力がすでに「フラット」で形状(1、16)である場合、なぜさらにフラットにする必要があるのでしょうか。
Dense(16, input_shape=(5,3)
、各16のセットからニューロンを出力し(これらのニューロンの5つのセットすべて)、すべての(3 x 5 = 15)入力ニューロンに接続しますか?または、最初の16個のセットの各ニューロンは5個の入力ニューロンの最初のセットの3個のニューロンにのみ接続され、次に2番目の16個のセットの各ニューロンは5個の入力の2番目のセットの3個のニューロンにのみ接続されますニューロンなど...私はそれがどれなのか混乱しています!