Saya mencoba memahami peran Flatten
fungsi di Keras. Di bawah ini adalah kode saya, yang merupakan jaringan dua lapis sederhana. Ini mengambil data bentuk 2 dimensi (3, 2), dan mengeluarkan data bentuk 1 dimensi (1, 4):
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
Ini cetakan yang y
memiliki bentuk (1, 4). Namun, jika saya menghapus Flatten
garis, maka akan muncul cetakan yang y
berbentuk (1, 3, 4).
Saya tidak mengerti ini. Dari pemahaman saya tentang jaringan saraf, model.add(Dense(16, input_shape=(3, 2)))
fungsinya membuat lapisan yang sepenuhnya terhubung sepenuhnya tersembunyi, dengan 16 node. Masing-masing node ini terhubung ke masing-masing elemen masukan 3x2. Oleh karena itu, 16 node pada keluaran lapisan pertama ini sudah "datar". Jadi, bentuk keluaran dari lapisan pertama harus (1, 16). Kemudian, lapisan kedua mengambil ini sebagai masukan, dan keluaran data bentuk (1, 4).
Jadi jika output dari lapisan pertama sudah "datar" dan berbentuk (1, 16), mengapa saya perlu meratakannya lebih lanjut?
Dense(16, input_shape=(5,3)
, akankah setiap output neuron dari set 16 (dan, untuk semua 5 set neuron ini), dihubungkan ke semua (3 x 5 = 15) neuron input? Atau akankah setiap neuron pada set pertama 16 hanya terhubung ke 3 neuron pada set pertama yang terdiri dari 5 neuron input, dan kemudian setiap neuron pada set kedua 16 hanya terhubung ke 3 neuron pada set kedua dari 5 input neuron, dll .... Saya bingung yang mana!