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 .