2017-05-10 4 views
4

저는 언어 모델에 TensorFlow LSTM을 사용하고 있습니다. (나는 일련의 단어를 가지고 있고 다음 단어를 예측하고 싶습니다.) 그리고 언어 모델을 실행하면서 잊어 버린 값을 출력하고 싶습니다. 입력, 변환 및 각 단계에서 출력 게이트. 어떻게해야합니까? https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/rnn/python/ops/rnn_cell.py의 코드를 검사에서 TensorFlow에서 LSTM 게이트의 값을 출력하는 방법은 무엇입니까?

, 나는 LayerNormBasicLSTMCell 클래스가 나는 인쇄 할 i, j, f, o 변수를 포함하는 call 방법을 가지고 참조하십시오.

def call(self, inputs, state): 
    """LSTM cell with layer normalization and recurrent dropout.""" 
    c, h = state 
    args = array_ops.concat([inputs, h], 1) 
    concat = self._linear(args) 

    i, j, f, o = array_ops.split(value=concat, num_or_size_splits=4, axis=1) 
    if self._layer_norm: 
     i = self._norm(i, "input") 
     j = self._norm(j, "transform") 
     f = self._norm(f, "forget") 
     o = self._norm(o, "output") 

    g = self._activation(j) 
    if (not isinstance(self._keep_prob, float)) or self._keep_prob < 1: 
     g = nn_ops.dropout(g, self._keep_prob, seed=self._seed) 

    new_c = (c * math_ops.sigmoid(f + self._forget_bias) 
      + math_ops.sigmoid(i) * g) 
    if self._layer_norm: 
     new_c = self._norm(new_c, "state") 
    new_h = self._activation(new_c) * math_ops.sigmoid(o) 

    new_state = core_rnn_cell.LSTMStateTuple(new_c, new_h) 
    return new_h, new_state 

그러나 이러한 변수를 쉽게 인쇄 할 수 있습니까? 아니면 기본적으로 LTSM을 실행중인 스크립트에서이 방법으로 관련 코드 줄을 다시 만들어야합니까?

답변

1

전 git 문제에서 비슷한 질문을했습니다. 그리고 응답은 원래의 세포가 ch만을 반환한다는 것입니다 (또한 모든 단계의 출력은 y 임). 내부 변수를 얻으려면 직접해야합니다. https://github.com/tensorflow/tensorflow/issues/5731

+0

당신은이 작업을 수행 할 수 있었습니까? 나는 또한 모든 LSTM 셀 게이트를 기록 할 필요가있다. 그러나 나는 너무 많은 것들을 부수는 호출의 결과를 바꾼다. 당신이 한 일의 모범이 있습니까? – dsalaj

0

은 기본적으로이 방법을 수행 할 수 있습니다 :

는 첫째, 예를 들어, return new_h, new_state, i, j, f, o을 당신이 필요로하는 상태를 반환 여기

는 링크입니다. 이러한 변경 작업을 수행하려면 TensorFlow의 소스 코드 파일을 복사하여 코드에 자신의 코드처럼 가져와야합니다. session.run(to_return, feed_dict)의 코드에서
그런 ,이 같은 to_return합니다

output, state, i, j, f, o = lstm_cell(input, state) 
to_return = { 
    "new_h": output, 
    "new_state": state, 
    "i": i, 
    "j": j, 
    "f": f, 
    "o": o, 
} 

results = session.run(to_return, feed_dict) # get what you want from the 
# graph(which are tensors), resulting in results of a dictionary with values 
# being numpy arrays. 

print results["i"] # you'll get a numpy array representing the i gate  
관련 문제