2017-09-29 11 views
0

시간축 회귀 문제에 대해 양방향 LSTMS를 사용하는 CNN-RNN 모델 아키텍처가 있습니다. 내 손실은 50 개 이상의 신기원으로 수렴하지 않습니다. 각 신기원에는 20k 샘플이 있습니다. 손실은 0.001 - 0.01 사이에서 계속 수신 거부됩니다. 다 변수 LSTM 예측 손실 및 평가

batch_size=1 
epochs = 50 
model.compile(loss='mean_squared_error', optimizer='adam') 
trainingHistory=model.fit(trainX,trainY,epochs=epochs,batch_size=batch_size,shuffle=False) 
  1. 내가 손실이 0.5 주위를 유지하는 잘못 짝 X 및 Y 데이터와 모델을 훈련했는데, 내 X와 Y 할 수있는 비선형 관계를 가지고 합리적인 결론이다 내 모델에 의해 이상의 신기원에서 배울 수 있습니까?
  2. 내 모델의 예측은 패턴을 캡처하지만 오프셋을 사용하여 수동으로 예측의 정확성을 확인하기 위해 동적 시간 왜곡 거리를 사용합니다. 더 좋은 방법이 있습니까?

모델 :

model = Sequential() 
model.add(LSTM(units=128, dropout=0.05, recurrent_dropout=0.35, return_sequences=True, batch_input_shape=(batch_size,featureSteps,input_dim))) 
model.add(LSTM(units=32, dropout=0.05, recurrent_dropout=0.35, return_sequences=False)) 
model.add(Dense(units=2, activation='softmax')) 
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy']) 

답변

3

당신은 테스트 경우

  • 잘못된 데이터 : 손실 ~ 0.5
  • 올바른 데이터 : 손실 ~ 그리고 0.01

모델 실제로 뭔가 배울 수 있습니다.

몇 가지 가능성이 있습니다 :

  • 모델이 현재의 학습 속도에 대한 한계에 도달

    1. 귀하의 출력 데이터가 마지막 레이어의 활성화의 범위에 맞지 않는 (그라데이션 업데이트 단계는 너무 큰 더 이상 모델을 개선 할 수 없습니다).
    2. 모델이 작업을 수행하기에 충분하지 않습니다.

      확인하여 Y이 마지막 활성화 함수의 범위 :

    3. 귀하의 데이터는 1 임의의 요소

    케이스 어느 정도있다. tanh합니다 (LSTM의 디폴트) 옵션

    • 모든 Y 데이터는, -1 및 sigmoid 들어
    • + 1 사이 여야 0 사이 및 softmax 들어
    • 1 0 1하지만 사이 마지막 측정 기준이 1이 아닌지 확인하십시오. 그렇지 않으면 모든 결과가 항상 1이됩니다. linear를 들어 0과 무한대
    • 사이 relu를 들어
    • , 값

    대신 무한대 하나의 제한된 활성이있는 경우 수렴이 더 간다.첫 번째 경우에
    , 당신은 일반적으로 우리가 기본이 0.0001 10,하여 분할, 낮은 학습 속도 (교육 후) 모델을 다시 컴파일 할 수 있습니다

    사례 2 :

    데이터의 경우 괜찮 으면 모델이 정체 된 후 학습 속도를 줄이십시오. 아담의 기본 학습 속도가 0.0001입니다

    , 우리는 종종 10으로 나누면 :

    from keras.optimizers import Adam 
    
    #after training enough with the default value: 
    model.compile(loss='mse', optimizer=Adam(lr=0.00001) 
    trainingHistory2 = model.fit(.........) 
    
    #you can even do this again if you notice that the loss decreased and stopped again: 
    model.compile(loss='mse',optimizer=Adam(lr=0.000001) 
    

    을 문제가 학습 속도라면,이 모델은 이미보다 자세한 내용을 만들 것입니다 (이있을 수 있습니다 먼저 옵티마이 저가 조정될 때까지는 어려움).

    사례 3 :

    더 성공을 가지고하지 않는 경우, 어쩌면 모델의 능력을 향상하는 시간이다. 레이어에 단위를 더 추가하거나, 레이어를 추가하거나, 모델을 변경할 수도 있습니다.

    사례 4 :

    이 당신이 이것에 대해 할 수있는 일은 ...

    아마 없다 그러나 당신이 경우 3에서 같은 모델을 증가하는 경우, (overfitting 조심 비교 테스트 데이터를 유지 시험 손실 대 훈련 손실).

    너무 좋은 모델은 데이터에 대해 중요한 통찰력을 학습하지 않고 단순히 기억할 수 있습니다.

  • +0

    은이 교육의 역사에 대해 언급 할 수 : { 'ACC': [0.54, 0.62, 0.70, 0.77, 0.81, 0.84, 0.85, 0.86, 0.88, 0.89], '손실 ': [0.69, 0.64 , 0.56, 0.47 , 0.40 0.35 0.32, 0.29 , 0.27, 0.24 ] 'val_acc ': 0.52, 0.52 ,,691 363,210 0.51 0.50 0.51 0.50 0.52 0.53, 0.51 0.49] 'val_loss': 0.69 0.75 0.81 0.99 1.03 1.09 1.04 , 1.16, 1.13, 1.35] – jakeN

    +0

    오버 피팅과 비슷합니다. 테스트 데이터가 악화되는 동안 교육 데이터가 개선되는 경우. 이는 모델이 교육 데이터를 기억하는 것을 배우고 있음을 의미합니다. (매개 변수가 너무 많거나 레이어가 너무 많거나 단위가 너무 많습니다.) 사람들은 과도한 작업을 줄이기 위해 종종 "드롭 아웃"레이어를 사용합니다. 더 작은 모델을 사용해 볼 수도 있습니다. (이것은 귀하의 유효성 확인 데이터와 귀하의 훈련 데이터가 정확하고 편견없이 선택되었다고 가정합니다.) –

    +0

    질문에 내 모델을 추가했습니다. 한번 봐주세요.나는 X와 Y에 학습 가능한 관계의 존재를 증명하려고 노력하고 있으며 정확하게 일치하는 데이터로는 더 나은 정확도 (2 % 더 @ 53 %)를 얻고 있기 때문에 존재를 결론 지을 수 있습니까? 내 손실 곡선이 인기있는 L 자 모양이 아니기 때문에 확실하지 않은 이유가 있습니다. – jakeN