2017-03-04 1 views
2

다른 소스로 구성된 대용량 데이터 세트에서 RNN을 교육하고 있습니다. 나는 한 세트의 역사가 다음으로 넘치기를 원하지 않는다. 즉, 다음 세트를 보내기 전에 한 세트의 끝에서 숨겨진 상태를 재설정하려고합니다. Keras로 어떻게 할 수 있습니까? 의사는 낮은 수준의 구성에 들어갈 수 있다고 주장합니다.Keras의 입력 데이터 세트 사이에서 RNN의 숨겨진 상태를 재설정 할 수 있습니까?

내가하려는 것은 새로운 데이터 세트가 입력 될 때마다 lstm 숨김 상태를 재설정하는 것이므로 이전 데이터 세트의 영향은 이월됩니다. Karpathy의 간단한 파이썬 구현에서

prevh = Hout[t-1] if t > 0 else h0 

라인을 참조 https://gist.github.com/karpathy/587454dc0146a6ae21fc 라인 (45) 나는 lstm 층을 발견하고 그것을 다시 호출하면

, 나는 그 무게와 편견의 전체 훈련을 쓸어 것입니다 걱정 뿐만 아니라 Hout의

다음

는 교육 루프 코드

for iteration in range(1, 10): 
    for key in X_dict: 
     X = X_dict[key] 
     y = y_dict[key] 
     history=model.fit(X, y, batch_size=batch_size, callbacks=cbks, nb_epoch=1,verbose=0) 

에게 있습니다 루프의 각 순서는 단일 시장의 데이터를 제공합니다. 그것은 내가 처음에 개자식을 다시 시작하는 곳입니다.

+0

왜 숨겨진 상태를 다시 설정 하시겠습니까? 이것은 잠재 기능을 배우는 곳입니다. –

답변

2

모델 상태를 재설정하려면 특정 레이어 또는 전체 모델에서 .reset_states()으로 전화하십시오. 당신은 데이터 세트의 목록이있는 경우 source

그래서 :

for ds in datasets : 
    model.reset_states() 
    model.fit(ds['inputs'],ds['targets'],...) 

당신이 찾고있는 무엇인가요?

편집 : 당신이 그것을 어떻게 적용되는지

for iteration in range(1, 10): 
    for key in X_dict: 
     model.reset_states() # reset the states of all the LSTM's of your network 
     #model.layers[lstm_layer_index].reset_states() # reset the states of this specific LSTM layer 
     X = X_dict[key] 
     y = y_dict[key] 
     history=model.fit(X, y, batch_size=batch_size, callbacks=cbks, nb_epoch=1,verbose=0) 

이다.

기본적으로 LSTM은 상태 저장이 아닙니다. 즉, 시퀀스를 거쳐 숨겨진 상태를 유지하지 않습니다. 새 시퀀스를 시작할 때의 초기 상태는 0으로 설정됩니다. stateful=True을 선택한 경우 이전 시퀀스의 마지막 숨김 상태 (출력)가 배치의 다음 시퀀스에 대해 초기화되도록 유지합니다. 순서가 계속되고있는 것과 같습니다.

Doing model.reset_states()은 시퀀스가 ​​처음부터 시작하는 것처럼 메모리에 저장된 마지막 숨겨진 상태를 0으로 재설정합니다.

.reset_states()이 예상 한대로 작동하지 않는다면 언제든지 소스 코드로 이동하십시오.

+0

단일 레이어를 재설정하는 방법을 찾는 데 어려움을 겪고 있습니다. 당신이 그것에 더 많은 코드를 넣을 수 있다면. 나는 내가 다시 세우려고하는 것을 정확하게 내 포스트에서 설명했다. – bhomass

+0

나는 model.layers [0] .reset_states()를 시도했다. 그것은 Layer가 stateful이어야한다고 말합니다. layers [0]은 lstm 레이어입니다. – bhomass

+0

코드를 보여주십시오, 현재하고있는 것을보고 싶습니다. 원하는 것을 어떻게 할 수 있는지 보여 드리겠습니다. 네트워크를 일괄 적으로 공급하고 있습니까? 숨겨진 상태를 각 샘플이 끝난 후 또는 대량의 샘플/배치 후에 0으로 재설정 하시겠습니까? –

관련 문제