2016-08-16 4 views
0

tf.nn의 '초기 상태'인수를 사용하는 데 어려움을 겪고 있습니다. .rnn 기능.TensorFlow tf.nn.rnn function ... 훈련 결과를 사용하여 RNN을 통한 단일 순방향 통과 수행 방법

val, _ = tf.nn.rnn(cell1, newBatch, initial_state=stateP, dtype=tf.float32) 

newBatch.shape => (1, 1, 11)
stateP.shape => (2, 2, 1, 11) 일반적으로

, 나는에 대한 교육을 통해 갔어요 내 LSTM 신경망 그리고 지금 그것의 가치를 사용하고 싶습니다. 어떻게해야합니까? tf.nn.rnn() 함수가 상태를 반환한다는 것을 알고 있습니다. 그러나 플러그 인하는 방법을 모르겠습니다.

fyi stateP.shape => (2, 2, 1, 11). .... 아마도 누적 된 LSTM 세포를 사용했기 때문에?

val, _ = tf.nn.dynamic_rnn(stacked_lstm, newBatch, initial_state=stateP, dtype=tf.float32) 

하지만 난 오류 "AttributeError를 'NoneType'개체가 어떤 속성 '영업 이익'이 없다"얻을 :

는 I도 시도했습니다.
'NoneType'객체에 대해 이야기하고있는 stateP 튜플은 확실하지만 여기서는 무엇을해야할지 모르겠습니다.

편집 : 나는 마침내 사용하여이 실행 가지고 :

init_state = cell.zero_state(batch_size, tf.float32) 

내가 'initial_state'인수로 전달해야 정확한 형태를 결정하십시오. 제 경우에는 4 도의 텐서 (TUPLE)로, 각각 (1, 11)의 모양을 가졌습니다. 나는 이렇게 만들었다 :

stateP0 = tf.convert_to_tensor(stateP[0][0]) 
    stateP1 = tf.convert_to_tensor(stateP[0][1]) 
    stateP2 = tf.convert_to_tensor(stateP[1][0]) 
    stateP3 = tf.convert_to_tensor(stateP[1][1]) 
    newStateP = stateP0, stateP1, stateP2, stateP3 

좋아! 이제 tf.dynamic_rnn() 함수가 작동하지만, 실행할 때마다 다른 결과를 얻습니다 .... 그래서 초기 상태로 넘어가는 시점은 무엇입니까? 나는 훈련을받은 상태를 사용하고 싶습니다 ... 나는 변화를 원하지 않습니다. 실제로 훈련 결과를 사용하고 싶습니다!

답변

0

아마도 비추천 동작을 사용하고 있습니다. 귀하의 경우에 statePc (셀 상태)과 h (펼치기의 최종 단계에서 lstm 출력)의 연결을 나타냅니다. 따라서 실제 상태를 얻으려면 1 차원을 따라 상태를 슬라이스해야합니다.

state_is_tuple=True으로 LSTM 셀을 초기화 할 수 있습니다. 따라서 stateP[0] 상태로 색인을 생성하여 최종 상태 (쉽게 조작하려는 경우)를 쉽게 얻을 수 있습니다. 또는 상태 튜플을 rnn (또는 dynamic_rnn)에 직접 전달할 수도 있습니다.

초기화 코드를 제공하지 않았기 때문에 그 이상은 말할 수 없습니다. 그래서 나는 추측 할 것입니다.

문제가 계속되는 경우 질문을 편집하여 답을 수정할 수 있습니다.

+0

덕분에 모양 문제가되었습니다. 나는 항상 state_is_tuple = True를 사용했지만 initial_state 인수에 필요한 모양을 다시 포맷하는 데 문제가있었습니다. 그러나 이제는 더 근본적인 질문이 있습니다. 어떻게이 '기계 학습 마술'상태를 일관되게 사용합니까? 난 그냥 LSTM NN 아키텍처를 통해 데이터를 실행하려면, 그 결과는 동일한 때마다 동일해야합니다 ...하지만 그건 내가 tf.nn.rnn() 함수와 함께 무엇을보고 아니에요 . 나는 다른 결과를 얻고있다! – rikkitikkitumbo

관련 문제