Saya memiliki model + LSTM konvolusional di Keras, mirip dengan ini (ref 1), yang saya gunakan untuk kontes Kaggle. Arsitektur ditunjukkan di bawah ini. Saya telah melatihnya pada set berlabel 11000 sampel saya (dua kelas, prevalensi awal adalah ~ 9: 1, jadi saya menaikkan nilai 1 hingga rasio 1/1) untuk 50 zaman dengan pembagian validasi 20%. Saya mendapatkan overfitting terang-terangan. untuk sementara waktu tapi saya pikir itu bisa dikendalikan dengan lapisan noise dan dropout.
Model tampak seperti pelatihan luar biasa, pada akhirnya mencetak 91% pada keseluruhan set pelatihan, tetapi setelah pengujian pada set data uji, benar-benar sampah.
Perhatikan: akurasi validasi lebih tinggi daripada akurasi pelatihan. Ini kebalikan dari overfitting "tipikal".
Intuisi saya adalah, mengingat pemisahan validasi ish kecil, model masih berhasil menyesuaikan terlalu kuat ke set input dan kehilangan generalisasi. Petunjuk lainnya adalah bahwa val_acc lebih besar dari acc, yang tampaknya mencurigakan. Apakah itu skenario yang paling mungkin di sini?
Jika ini berlebihan, akankah meningkatkan pemisahan validasi mengurangi ini sama sekali, atau apakah saya akan mengalami masalah yang sama, karena rata-rata, masing-masing sampel akan melihat setengah dari total zaman masih?
Model:
Layer (type) Output Shape Param # Connected to
====================================================================================================
convolution1d_19 (Convolution1D) (None, None, 64) 8256 convolution1d_input_16[0][0]
____________________________________________________________________________________________________
maxpooling1d_18 (MaxPooling1D) (None, None, 64) 0 convolution1d_19[0][0]
____________________________________________________________________________________________________
batchnormalization_8 (BatchNormal(None, None, 64) 128 maxpooling1d_18[0][0]
____________________________________________________________________________________________________
gaussiannoise_5 (GaussianNoise) (None, None, 64) 0 batchnormalization_8[0][0]
____________________________________________________________________________________________________
lstm_16 (LSTM) (None, 64) 33024 gaussiannoise_5[0][0]
____________________________________________________________________________________________________
dropout_9 (Dropout) (None, 64) 0 lstm_16[0][0]
____________________________________________________________________________________________________
batchnormalization_9 (BatchNormal(None, 64) 128 dropout_9[0][0]
____________________________________________________________________________________________________
dense_23 (Dense) (None, 64) 4160 batchnormalization_9[0][0]
____________________________________________________________________________________________________
dropout_10 (Dropout) (None, 64) 0 dense_23[0][0]
____________________________________________________________________________________________________
dense_24 (Dense) (None, 2) 130 dropout_10[0][0]
====================================================================================================
Total params: 45826
Inilah panggilan untuk menyesuaikan model (berat kelas biasanya sekitar 1: 1 karena saya meningkatkan input):
class_weight= {0:1./(1-ones_rate), 1:1./ones_rate} # automatically balance based on class occurence
m2.fit(X_train, y_train, nb_epoch=50, batch_size=64, shuffle=True, class_weight=class_weight, validation_split=0.2 )
SE memiliki beberapa aturan konyol bahwa saya dapat memposting tidak lebih dari 2 tautan sampai skor saya lebih tinggi, jadi inilah contohnya jika Anda tertarik: Ref 1: machinelearningmastery DOT com SLASH urutan-klasifikasi-lstm-recurrent-neural-networks- python-keras