Saya mencoba memahami peran Flattenfungsi 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 ymemiliki bentuk (1, 4). Namun, jika saya menghapus Flattengaris, maka akan muncul cetakan yang yberbentuk (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!