2017-03-02 8 views
1

일괄 처리 100,000 개가 입력되는 간단한 순차 Keras 모델을 만듭니다. 각 입력에는 3 개의 열이 있고 해당 출력은 합계입니다 그 행의.저장된 Keras 순차 모델을로드 할 때 테스트 데이터의 시작 부분에 정확도가 떨어짐

순차 모델에는 LSTM (Stateful = true), Dense의 2 개의 레이어가 있습니다.

이제 모델을 컴파일하고 피팅 한 후 'model.h5'파일에 저장하고 있습니다.

그런 다음 저장된 모델을 읽고 테스트 데이터 (size = 10k, batch_size = 100)로 model.predict를 호출합니다.

문제 : 예측은 처음 400-500 입력에 대해서는 제대로 작동하지 않으며 나머지는 매우 낮은 val_loss로 완벽하게 작동합니다.

사례 1 : 난 Keras 모든 테스트 데이터에 대한 매우 정확한 출력을 제공하고,이 경우에, 무 상태 LSTM 층 (. 즉 스테이트 = 거짓)을 .

사례 2 : 저장하고 다시 읽는 대신 생성 된 모델에 model.predict를 직접 적용하면 모든 출력이 정확하게 전달됩니다.

하지만 Stateful = True가 필요합니다. 또한 모델을 저장 한 다음 나중에 해당 모델에서 작업을 다시 시작하고 싶습니다.

이 문제를 해결할 수있는 방법이 있습니까?

2. 또한 테스트 데이터를 제공 할 때 모델의 정확도는 어떻게 증가합니까? (첫 번째 400-500 테스트는 부정확 한 결과를 제공하고 나머지는 매우 정확하기 때문에)

+0

문제가되지 않는다면 upvote를 부탁드립니다. –

답변

1

세포의 숨겨진 상태를 잃어 버리는 문제가있는 것 같습니다. 모델을 빌드하는 동안 재설정 될 수 있으며 이로 인해 문제가 발생할 수 있습니다.

그래서 (그것은 성가신 약간입니다)하지만 당신은 당신의 네트워크의 states을 저장하고 또한로드 수 :

  1. 어떻게 저장? (i-th 층은 recurrent 하나라고 가정) :

    hidden_state = model.layers[i].states[0].eval() 
    cell_state = model.layers[i].states[0].eval() 
    
    numpy.save("some name", hidden_state) 
    numpy.save("some other name", cell_state) 
    
  2. 을 이제 당신이 계층에 숨겨진 상태를 설정하는 방법에 읽을 수있는 숨겨진 상태, here를 다시로드 할 수 있습니다 때.

물론이 모든 방법을 어떤 종류의 개체에 넣는 것이 가장 좋습니다. 클래스 생성자 메서드.

관련 문제