Saya baru mengenal Keras dan butuh bantuan Anda.
Saya melatih jaringan syaraf dalam Keras dan fungsi kerugian saya adalah Perbedaan Kuadrat antara output dan nilai target.
Saya ingin mengoptimalkan ini dengan menggunakan Gradient Descent. Setelah melalui beberapa tautan di internet, saya mengetahui bahwa ada 3 jenis gradient descents yang digunakan secara umum:
- Satu sampel gradien keturunan : Di sini, gradien dihitung dari hanya satu sampel setiap iterasi -> Gradien dapat berisik.
- Batch gradient descent : Di sini, gradien adalah rata-rata dari gradien yang dihitung dari SEMUA sampel dalam dataset -> Gradient lebih umum, tetapi sulit diterapkan untuk kumpulan data besar.
- Mini-batch gradient descent : Mirip dengan Batch GD. Alih-alih menggunakan seluruh dataset, hanya beberapa sampel (ditentukan oleh batch_size) yang digunakan untuk menghitung gradien di setiap iterasi -> Tidak terlalu berisik dan juga dapat ditelusur secara komputasi -> Terbaik dari kedua dunia.
Pertanyaan:
- Saya ingin melakukan Mini-batch Gradient Descent di Keras. Bagaimana saya bisa melakukan ini? Haruskah saya menggunakan pengoptimal SGD?
Jika SGD akan digunakan, bagaimana cara mengatur batch_size? Tampaknya tidak ada parameter untuk fungsi SGD untuk mengatur batch_size.
optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
Ada parameter batch_size di model.fit () di Keras.
history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)
Apakah ini sama dengan ukuran batch dalam Mini-batch Gradient Descent? Jika tidak, apa artinya tepatnya melatih sejumlah input? Apakah ini berarti 'batch_size' no. dari thread berjalan secara paralel dan memperbarui bobot model secara paralel?
Jika ini membantu, inilah cuplikan kode python yang telah saya tulis sampai sekarang .
sumber
Mengesampingkan pertimbangan teoretis, mengingat dataset kehidupan nyata dan ukuran jaringan saraf modern yang tipikal, biasanya perlu waktu lama untuk berlatih dalam batch ukuran satu, dan Anda tidak akan memiliki cukup RAM dan / atau memori GPU untuk melatih seluruh dataset sekaligus. Jadi biasanya bukan pertanyaan "apakah" mini-batch harus digunakan, tetapi "apa ukuran" batch yang harus Anda gunakan. The
batch_size
argumen adalah jumlah observasi untuk melatih di dalam satu langkah, ukuran biasanya lebih kecil bekerja lebih baik karena memiliki efek regularizing. Selain itu, sering orang menggunakan pengoptimal yang lebih rumit (misalnya Adam, RMSprop) dan trik regularisasi lainnya, yang membuat hubungan antara kinerja model, ukuran batch, kecepatan belajar, dan waktu komputasi lebih rumit.sumber