Apa peran "Meratakan" di Keras?
Saya mencoba untuk memahami peran Meratakan
fungsi di Keras. Di bawah ini adalah kode saya, yang sederhana dua lapisan jaringan. Dibutuhkan dalam 2-dimensi data dari bentuk (3, 2), dan output 1-dimensi data dari bentuk (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 Meratakan
line, kemudian cetak yang y
memiliki bentuk (1, 3, 4).
Saya don't memahami hal ini. Dari pemahaman saya dari jaringan saraf, model.tambahkan(Padat(16, input_shape=(3, 2)))
fungsi adalah menciptakan tersembunyi sepenuhnya terhubung lapisan, dengan 16 node. Masing-masing node terhubung ke masing-masing 3x2 elemen input. Oleh karena itu, 16 node pada output dari layer pertama yang sudah "televisi". Jadi, output bentuk lapisan pertama harus (1, 16). Kemudian, kedua lapisan ini sebagai input, dan output data dari bentuk (1, 4).
Jadi jika output dari layer pertama yang sudah "televisi" dan dari bentuk (1, 16), mengapa saya perlu untuk lebih meratakan itu?
jika anda membaca dokumentasi dari
Padat
di sini anda akan melihat bahwa:akan mengakibatkan
Padat
jaringan dengan 3 input dan 16 output yang akan diterapkan secara terpisah untuk masing-masing dari 5 langkah. Jadi jikaD(x)
berubah 3 dimensi vektor 16-d vektor apa yang anda'll mendapatkan output dari layer anda akan menjadi urutan vektor:[D(x[0,:], D(x[1,:],..., D(x[4,:]]
dengan bentuk(5, 16)
. Dalam rangka untuk memiliki perilaku yang anda tentukan, anda mungkin pertamaMeratakan
masukan anda ke 15-d vektor dan kemudian menerapkanPadat
:EDIT: Karena beberapa orang berjuang untuk memahami - di sini anda memiliki aplikasi yang menjelaskan gambar:
baca pendek:
panjang baca:
Jika kita mengambil model asli (dengan Meratakan lapisan) dibuat dalam pertimbangan kita bisa mendapatkan model berikut ringkasan:
Untuk ringkasan ini gambar berikutnya mudah-mudahan akan memberikan sedikit lebih banyak rasa pada input dan ukuran output untuk masing-masing lapisan.
Output bentuk untuk Meratakan lapisan seperti yang dapat anda baca adalah
(Tiada, 48)
. Berikut adalah tip. Anda harus membacanya(1, 48)
atau(2, 48)
... atau(16, 48)
... atau(32, 48)
, ...Pada kenyataannya,
None
pada posisi itu berarti setiap batch size. Untuk input ke ingat, pertama dimensi berarti ukuran batch dan yang kedua berarti jumlah input fitur.Peran Meratakan lapisan di Keras adalah super sederhana:
Sebuah meratakan operasi pada membentuk tensor tensor memiliki bentuk yang sama dengan jumlah elemen yang terkandung dalam tensor tidak termasuk batch dimensi.
Catatan: saya menggunakan
model.ringkasan()
metode untuk memberikan output bentuk dan rincian parameter.Ini adalah cara Meratakan bekerja mengkonversi Matriks untuk array tunggal.