2016-12-02 12 views
1

次の例では、次のようにRNN状態を供給することが可能であるかどうかわかりませんでした。テンソルフロー初期RNN状態への供給

self.cell = cell = rnn_cell.MultiRNNCell([cell] * args.num_layers, state_is_tuple=True) 
self.input_data = tf.placeholder(tf.int32, [args.batch_size, args.seq_length]) 
self.targets = tf.placeholder(tf.int32, [args.batch_size, args.seq_length]) 
self.initial_state = cell.zero_state(args.batch_size, tf.float32) 

このコードセグメントでは、初期状態はゼロ状態として宣言されています。私の知る限り、これはプレースホルダーではありません。それはゼロテンソルの単なるタプルです。

次に、RNNモデルが初期状態を生成するために使用される関数では、session.runに入力されます。

def sample(self, sess, chars, vocab, num=200, prime='The ', sampling_type=1): 
    state = sess.run(self.cell.zero_state(1, tf.float32)) 
    for char in prime[:-1]: 
     x = np.zeros((1, 1)) 
     x[0, 0] = vocab[char] 
     feed = {self.input_data: x, self.initial_state:state} 
     [state] = sess.run([self.final_state], feed) 

self.initial_stateはプレースホルダではないので、win session.runをどのように送ることができますか?

ここに私が見ていたコードへのリンクがあります。 https://github.com/sherjilozair/char-rnn-tensorflow/blob/master/model.py

答えて

2

プレースホルダだけでなく、任意の変数でフィードできます。この場合、タプルの各コンポーネントを手動でフィードできます。

feed = { 
    self.input_data: x, 
    self.initial_state[0]: state[0], 
    self.initial_state[1]: state[1] 
} 
関連する問題