Bagaimana cara parameter validation_split fungsi Keras 'berfungsi?

17

Pemecahan validasi dalam fungsi model Keras Sequential didokumentasikan sebagai berikut di https://keras.io/models/ berikutnyaential / :

validation_split: Mengambang antara 0 dan 1. Fraksi data pelatihan yang akan digunakan sebagai data validasi. Model akan memisahkan sebagian kecil dari data pelatihan ini, tidak akan melatihnya, dan akan mengevaluasi kerugian dan metrik model apa pun pada data ini di akhir setiap zaman. Data validasi dipilih dari sampel terakhir dalam data x dan y yang disediakan, sebelum pengocokan.

Harap perhatikan baris terakhir:

Data validasi dipilih dari sampel terakhir dalam data x dan y yang disediakan, sebelum pengocokan.

Apakah ini berarti bahwa data validasi selalu diperbaiki dan diambil dari bagian bawah dataset utama?

Apakah ada cara yang dapat dilakukan untuk secara acak memilih fraksi data yang diberikan dari dataset utama?

juga
sumber

Jawaban:

17

Anda sebenarnya tidak ingin menguji ulang set validasi Anda setelah setiap zaman. Jika Anda melakukan ini, model Anda akan dilatih pada setiap sampel tunggal dalam dataset Anda dan dengan demikian ini akan menyebabkan overfitting. Anda ingin selalu membagi data Anda sebelum proses pelatihan dan kemudian algoritma hanya harus dilatih menggunakan subset data untuk pelatihan.

Fungsi seperti itu dirancang memastikan bahwa data dipisahkan sedemikian rupa sehingga selalu melatih pada bagian data yang sama untuk setiap zaman. Semua pengocokan dilakukan dalam sampel pelatihan di antara zaman jika opsi itu dipilih.

Namun, untuk beberapa dataset mendapatkan beberapa instance terakhir tidak berguna, khususnya jika dataset disusun kembali berdasarkan kelas. Maka distribusi kelas Anda akan miring. Dengan demikian, Anda akan memerlukan semacam cara acak untuk mengekstrak subset data untuk mendapatkan distribusi kelas yang seimbang dalam set pelatihan dan validasi. Untuk ini saya selalu suka menggunakan fungsi sklearn sebagai berikut

from sklearn.model_selection import train_test_split

# Split the data
x_train, x_valid, y_train, y_valid = train_test_split(data, labels, test_size=0.33, shuffle= True)

Ini adalah fungsi yang mudah digunakan dan bagus yang melakukan apa yang Anda inginkan. Variabel datadan labelsmerupakan matriks numpy standar dengan dimensi pertama menjadi instance.

JahKnows
sumber
1
Saya tidak bermaksud mendapatkan set tes yang berbeda setelah setiap zaman. Saya bertanya tentang hal itu mendapatkan data dari akhir dataset karena banyak dataset dapat diatur sesuai kelas (seperti yang Anda sebutkan). Saya tahu tentang train_test_splitdan sekarang Anda mengkonfirmasi bahwa ini adalah metode yang lebih baik karena secara acak akan mendapatkan data uji / validasi dari dataset.
rnso
@ rnso, sayangnya Keras tidak menyediakan opsi itu. Saya kira itu tidak benar-benar dalam lingkup apa yang ingin mereka tawarkan. Akan membuat implementasi agak membingungkan memiliki 2 input metode yang berbeda dengan nama acak.
JahKnows
Tidakkah Anda mencampur definisi validasi dan data uji dengan menggunakan train_test_spli itu?
bagustris
Jika Anda menggunakan shuffleparameter, akan Anda juga menggunakan shuffledalam .fituntuk model keras?
Shamoon