Apa konsepnya dan bagaimana cara menghitung nilai Bottleneck? Bagaimana nilai-nilai ini membantu klasifikasi gambar? Tolong jelaskan dengan kata-kata sederhana.
sumber
Apa konsepnya dan bagaimana cara menghitung nilai Bottleneck? Bagaimana nilai-nilai ini membantu klasifikasi gambar? Tolong jelaskan dengan kata-kata sederhana.
Hambatan dalam jaringan saraf hanyalah lapisan dengan neuron lebih sedikit daripada lapisan di bawah atau di atasnya. Memiliki lapisan seperti itu mendorong jaringan untuk mengompresi representasi fitur agar paling pas di ruang yang tersedia, untuk mendapatkan kerugian terbaik selama pelatihan.
Dalam CNN (seperti jaringan Google Inception), lapisan bottleneck ditambahkan untuk mengurangi jumlah peta fitur (alias "saluran") di jaringan, yang sebaliknya cenderung meningkat di setiap lapisan. Ini dicapai dengan menggunakan konvolusi 1x1 dengan saluran output lebih sedikit daripada saluran input.
Anda biasanya tidak menghitung bobot untuk lapisan bottleneck secara langsung, proses pelatihan menanganinya, seperti untuk semua bobot lainnya. Memilih ukuran yang baik untuk lapisan bottleneck adalah sesuatu yang harus Anda tebak, dan kemudian bereksperimen, untuk menemukan arsitektur jaringan yang berfungsi dengan baik. Tujuannya di sini biasanya menemukan jaringan yang dapat digeneralisasikan dengan baik ke gambar baru, dan lapisan bottleneck membantu dengan mengurangi jumlah parameter dalam jaringan sementara masih memungkinkannya menjadi lebih dalam dan mewakili banyak fitur peta.
Bayangkan, Anda ingin menghitung ulang lapisan terakhir dari model pra-terlatih:
Input->[Freezed-Layers]->[Last-Layer-To-Re-Compute]->Output
Untuk melatih [Last-Layer-To-Re-Compute] , Anda perlu mengevaluasi output dari [Freezed-Layers] beberapa kali untuk data input yang diberikan. Untuk menghemat waktu, Anda dapat menghitung ouputs ini hanya sekali .
Input#1->[Freezed-Layers]->Bottleneck-Features-Of-Input#1
Kemudian, Anda menyimpan semua Bottleneck-Features-Of-Input # i dan langsung menggunakannya untuk melatih [Last-Layer-To-Re-Compute].
Penjelasan dari fungsi "cache_bottlenecks" dari contoh "image_retraining":
Karena kita cenderung membaca gambar yang sama beberapa kali (jika tidak ada distorsi yang diterapkan selama pelatihan) itu dapat mempercepat banyak hal jika kita menghitung nilai-nilai lapisan bottleneck sekali untuk setiap gambar selama preprocessing, dan kemudian hanya membaca nilai-nilai yang di-cache berulang kali selama pelatihan.
Bottleneck Tensorflow adalah fase pra-prosessing terakhir sebelum pelatihan yang sebenarnya dengan pengenalan data dimulai. Ini adalah fase di mana struktur data dibentuk dari setiap gambar pelatihan sehingga fase akhir pelatihan dapat terjadi dan membedakan gambar dari setiap gambar lain yang digunakan dalam materi pelatihan. Agak seperti sidik jari dari gambar.
Ini terlibat dengan perintah pelatihan ulang dan seperti namanya, ini adalah konsumen waktu utama dari eksekusi perintah. Jumlah materi pelatihan mungkin harus dikompromikan jika hambatan ini tampaknya terlalu memakan waktu.
Karena ini adalah perintah baris perintah, saya tidak tahu algoritma yang tepat. Algoritma bersifat publik dalam kode di Github tetapi seharusnya sangat rumit (waktu eksekusi sangat panjang menurut definisi) sehingga saya yakin saya tidak bisa menuliskannya dalam jenis jawaban seperti ini.