나는 Keras에 컨볼 루션 + LSTM 모델을 가지고 있는데, 이것과 비슷한 (참조 1), 나는 Kaggle 콘테스트에 사용하고 있습니다. 아키텍처는 아래와 같습니다. 20 % 검증 분할로 50 에포크에 대해 레이블이 지정된 11000 샘플 세트 (두 클래스, 초기 유병률은 ~ 9 : 1이므로 1에서 약 1/1 비율로 업 샘플링했습니다)에 대해 학습했습니다. 한동안 소음과 드롭 아웃 레이어로 제어 할 수 있다고 생각했습니다.
모델은 훈련 세트 전체에서 91 %를 기록했지만 테스트 데이터 세트를 테스트 할 때 절대 쓰레기로 훌륭하게 훈련 된 것처럼 보였다.
주의 : 검증 정확도는 훈련 정확도보다 높습니다. 이것은 "일반적인"과적 합의 반대입니다.
내 직감은 작고 작은 유효성 검사 분할을 감안할 때 모델이 여전히 입력 세트에 너무 강력하게 맞추고 일반화를 잃어 가고 있다는 것입니다. 다른 단서는 val_acc가 acc보다 크다는 것입니다. 가장 가능성이 높은 시나리오입니까?
이것이 과적 합이라면, 검증 분할을 늘리면 이것을 완화시킬 수 있습니까? 아니면 평균적으로 각 샘플이 총 에포크의 절반을 볼 수 있기 때문에 동일한 문제가 발생합니까?
모델:
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 개 이하의 링크를 게시 할 수 있다는 어리석은 규칙을 가지고 있으므로 관심이있는 경우를 예로 들어 보겠습니다. 파이썬 케라