У мене в Керасі згорнута модель LSTM, подібна до цієї (посилання 1), яку я використовую для змагань Kaggle. Архітектура показана нижче. Я підготував це на своєму міченому наборі з 11000 зразків (два класи, початкова поширеність становить ~ 9: 1, тому я збільшив вибірку від 1 до приблизно 1/1) протягом 50 епох з 20% розбиттям валідації. на деякий час, але я подумав, що це перебуває під контролем із шарами шуму та випадання.
Модель виглядала так, що вона прекрасно тренується, врешті-решт набрала 91% усього навчального набору, але після тестування на тестовому наборі даних, абсолютно сміття.
Зауважте: точність перевірки вище, ніж точність тренування. Це протилежність "типовому" набору.
Моя інтуїція полягає в тому, що, враховуючи розбіжність валідації з невеликим результатом, модель все ще вдається надто сильно вписуватися в набір входів і втрачає узагальнення. Інша підказка полягає в тому, що val_acc більше, ніж ac, що здається рибним. Це найімовірніший сценарій тут?
Якщо це є надмірним, чи збільшить розрив валідації це взагалі пом'якшить, чи я зіткнуся з тим самим питанням, оскільки в середньому кожен зразок побачить ще половину загальної епохи?
Модель:
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
Ось заклик підходити до моделі (вага класу зазвичай становить близько 1: 1, оскільки я збільшив вибірку введення):
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 є якесь нерозумне правило, що я можу розміщувати не більше 2 посилань, поки моя оцінка не буде вищою, тому ось приклад у випадку, коли вас цікавить: Посилання 1: machinelearningmastery DOT com SLASH послідовна класифікація-lstm-recurrent-neural-network- пітон-кери