2017-11-24 3 views
-3

나는 훈련 chatbot을위한 LSTM을 사용하여 Keras에 신경망을 가지고 있습니다.Keras - 손실 및 val_loss 증가

contextTrain, contextTest, utteranceTrain, utteranceTest = train_test_split(context, utterance, test_size=0.1, random_state=1) 
model = Sequential() 
model.add(LSTM(input_shape=contextTrain.shape[1:], return_sequences=True, units=300, activation="sigmoid", kernel_initializer="glorot_normal", recurrent_initializer="glorot_normal")) 
model.add(LSTM(return_sequences=True, units=300, activation="sigmoid", kernel_initializer="glorot_normal", recurrent_initializer="glorot_normal")) 
model.compile(loss="cosine_proximity", optimizer="adam", metrics=["accuracy"]) 
model.fit(contextTrain, utteranceTrain, epochs=5000, validation_data=(contextTest, utteranceTest), callbacks=[ModelCheckpoint("model{epoch:02d}.h5", monitor='val_acc', save_best_only=true, mode='max')]) 

문맥 및 발화는 형태가 예를 들어 numpy 배열이다. (1000, 10, 300) 또는 (10000, 10, 300) 일 수있다. 첫 번째 LSTM의 입력 _ 모양은 (10, 300)이어야합니다. 크기가 300 인 벡터는 Word2vec 모델에 의해 생성 된 단어 포함으로 표현 된 단어입니다. 이 예제에서 입력 데이터는이 벡터 중 10 개입니다.

가장 큰 문제는 손실과 val_loss가 모두 훈련 중 거의 꾸준히 증가하고 있다는 것입니다.

Epoch 1/5000 
900/900 [==============================] - 18s 20ms/step - loss: -0.5855 - acc: 0.0220 - val_loss: -0.6527 - val_acc: 0.0260 
Epoch 2/5000 
900/900 [==============================] - 13s 14ms/step - loss: -0.6299 - acc: 0.0239 - val_loss: -0.6673 - val_acc: 0.0240 
Epoch 3/5000 
900/900 [==============================] - 12s 14ms/step - loss: -0.6387 - acc: 0.0213 - val_loss: -0.6764 - val_acc: 0.0160 
Epoch 4/5000 
900/900 [==============================] - 12s 13ms/step - loss: -0.6457 - acc: 0.0229 - val_loss: -0.6821 - val_acc: 0.0240 
Epoch 5/5000 
900/900 [==============================] - 12s 14ms/step - loss: -0.6497 - acc: 0.0274 - val_loss: -0.6873 - val_acc: 0.0230 
Epoch 6/5000 
900/900 [==============================] - 14s 15ms/step - loss: -0.6507 - acc: 0.0276 - val_loss: -0.6874 - val_acc: 0.0240 
Epoch 7/5000 
900/900 [==============================] - 15s 16ms/step - loss: -0.6517 - acc: 0.0279 - val_loss: -0.6877 - val_acc: 0.0260 
Epoch 8/5000 
900/900 [==============================] - 14s 16ms/step - loss: -0.6526 - acc: 0.0272 - val_loss: -0.6875 - val_acc: 0.0230 
Epoch 9/5000 
900/900 [==============================] - 14s 16ms/step - loss: -0.6530 - acc: 0.0274 - val_loss: -0.6879 - val_acc: 0.0240 
Epoch 10/5000 
900/900 [==============================] - 14s 15ms/step - loss: -0.6530 - acc: 0.0278 - val_loss: -0.6871 - val_acc: 0.0230 

이 방법을 변경하고 감소하지 않을 수있는 손실 및 val_loss의 가능한 이유는 무엇입니까? 신경망, 훈련 자료 또는 다른 무엇인가 잘못 되었습니까?

추가 정보가 필요하면 알려주십시오.

는 응답

+0

은 (는) 음수가 아닙니다. 좋아 보인다. – gidim

+1

숫자가 음수이고 증가하지 않습니다. –

답변

2

당신은 kerascosine_proximity 손실 함수를 사용하여 주셔서 감사합니다. 이 손실은 출력의 1이 대상과 전혀 일치하지 않지만 대상이 출력을 완벽하게 일치시키는 경우 -1입니다 (thisthis 참조). 따라서 -1으로 수렴되는 값은 목표와 실제 출력 간 실제 차이가 줄어들 기 때문에 좋은 징조입니다.

관련 문제