Saya bermain sedikit dengan convnets. Secara khusus, saya menggunakan dataset kaggle cats-vs-dogs yang terdiri atas 25000 gambar yang dilabeli sebagai kucing atau anjing (masing-masing 1.200).
Saya telah berhasil mencapai akurasi klasifikasi sekitar 85% pada set pengujian saya, namun saya menetapkan tujuan untuk mencapai akurasi 90%.
Masalah utama saya adalah overfitting. Entah bagaimana itu selalu berakhir terjadi (biasanya setelah zaman 8-10). Arsitektur jaringan saya secara longgar terinspirasi oleh VGG-16, lebih khusus gambar saya diubah ukurannya menjadi , dan kemudian saya jalankan:
Convolution 1 128x128x32 (kernel size is 3, strides is 1)
Convolution 2 128x128x32 (kernel size is 3, strides is 1)
Max pool 1 64x64x32 (kernel size is 2, strides is 2)
Convolution 3 64x64x64 (kernel size is 3, strides is 1)
Convolution 4 64x64x64 (kernel size is 3, strides is 1)
Max pool 2 32x32x64 (kernel size is 2, strides is 2)
Convolution 5 16x16x128 (kernel size is 3, strides is 1)
Convolution 6 16x16x128 (kernel size is 3, strides is 1)
Max pool 3 8x8x128 (kernel size is 2, strides is 2)
Convolution 7 8x8x256 (kernel size is 3, strides is 1)
Max pool 4 4x4x256 (kernel size is 2, strides is 2)
Convolution 8 4x4x512 (kernel size is 3, strides is 1)
Fully connected layer 1024 (dropout 0.5)
Fully connected layer 1024 (dropout 0.5)
Semua lapisan kecuali yang terakhir memiliki relus sebagai fungsi aktivasi.
Perhatikan bahwa saya telah mencoba berbagai kombinasi konvolusi (saya mulai dengan konvolusi yang lebih sederhana).
Juga, saya telah menambah dataset dengan mirroring gambar, sehingga total saya memiliki 50.000 gambar.
Juga, saya menormalkan gambar menggunakan normalisasi minimum, di mana X adalah gambar
Kode ditulis dalam tensorflow dan ukuran batch 128.
Mini-batch data pelatihan berakhir dengan overfitting dan memiliki akurasi 100% sementara data validasi tampaknya berhenti belajar di sekitar 84-85%.
Saya juga mencoba meningkatkan / mengurangi angka putus sekolah.
Pengoptimal yang digunakan adalah AdamOptimizer dengan tingkat pembelajaran 0,0001
Saat ini saya telah bermain dengan masalah ini selama 3 minggu terakhir dan 85% tampaknya telah menjadi penghalang di depan saya.
Sebagai catatan, saya tahu saya bisa menggunakan transfer belajar untuk mencapai hasil yang jauh lebih tinggi, tetapi saya tertarik untuk membangun jaringan ini sebagai pengalaman belajar mandiri.
Memperbarui:
Saya menjalankan jaringan SAMA dengan ukuran batch yang berbeda, dalam hal ini saya menggunakan ukuran batch yang jauh lebih kecil (16 bukannya 128) sejauh ini saya mencapai akurasi 87,5% (bukan 85%). Yang mengatakan, jaringan akhirnya tetap overfitting. Masih saya tidak mengerti bagaimana dropout 50% dari unit tidak membantu ... jelas saya melakukan sesuatu yang salah di sini. Ada ide?
Pembaruan 2:
Sepertinya masalah ada hubungannya dengan ukuran bets, karena dengan ukuran yang lebih kecil (16 bukannya 128) sekarang saya mencapai akurasi 92,8% pada set pengujian saya, dengan ukuran bets yang lebih kecil jaringan masih overfits (bets mini berakhir namun dengan akurasi 100%), kerugian (kesalahan) terus menurun dan secara umum lebih stabil. Kontra adalah waktu berjalan yang jauh lebih lambat, tapi itu benar-benar layak untuk ditunggu.