2017-12-21 16 views
0

私はrnnを構築しています。出力と状態を得るためにtf.nn.dynamic_rnnを使用します。 コードは以下の通りである(TFバージョン1.3):RNNを使用して一連のテンソルを生成

import tensorflow as tf  
def lstm_cell(): 
     return tf.contrib.rnn.DropoutWrapper(tf.contrib.rnn.BasicLSTMCell(128), output_keep_prob=0.7) 

cell= tf.contrib.rnn.MultiRNNCell([lstm_cell() for _ in range(3)]) 

initial_state= cell.zero_state(1, tf.float32) 

layer = tf.placeholder(tf.float32, [1,1,36]) 

outputs, state=tf.nn.dynamic_rnn(cell=cell, inputs=layer, initial_state=initial_state) 

入力テンソルは、常にバッチサイズ= 1であるので、INITIAL_STATE及び状態もバッチサイズ1 層BATCH_SIZEの入力されました= 1も同様であり、各セルには36個のノード(埋め込まれたシーケンスのサイズ)がある。各レイヤのlstm_sizeは128です。

問題は、rnnセルをループするときに発生します。

rnn_outputs_sequence=outputs 
for i in range(1, num_pics, 1): 
    outputs, state=tf.nn.dynamic_rnn(cell=cell, inputs=outputs, initial_state=state) 
    rnn_outputs_sequence=tf.concat((rnn_outputs_sequence, outputs),axis=1) 

rnn_outputs_sequenceが.However形状[1、num_pics、36]を有することが期待され、これはエラーをトリガ:

Trying to share variable rnn/multi_rnn_cell/cell_0/basic_lstm_cell/kernel, but specified shape (256, 512) and found shape (164, 512). 

私はこのような形状を把握することはできません[164、512]。 誰も私を助けてくれますか?おかげさまで

答えて

0
import tensorflow as tf 
def lstm_cell(): 
    return tf.contrib.rnn.DropoutWrapper(tf.contrib.rnn.BasicLSTMCell(128), output_keep_prob=0.7) 

cell= tf.contrib.rnn.MultiRNNCell([lstm_cell() for _ in range(2)]) 

initial_state= cell.zero_state(1, tf.float32) 

layer = tf.placeholder(tf.float32, [1,1,36]) 

outputs, state=tf.nn.dynamic_rnn(cell=cell, inputs=layer, initial_state=initial_state) 

outputs = tf.reshape(outputs, shape=[1, -1]) 
outputs = tf.layers.dense(outputs, 36,\ 
           kernel_initializer=tf.contrib.layers.xavier_initializer(uniform=False)) 
outputs = tf.reshape(outputs, shape=[1, 1, -1]) 
rnn_outputs_sequence=outputs 
print(outputs) 
for i in range(1, 16, 1): 
    outputs, state=tf.nn.dynamic_rnn(cell=cell, inputs=outputs, initial_state=state) 
    outputs = tf.reshape(outputs, shape=[1, -1]) 
    outputs = tf.layers.dense(outputs, 36,\ 
           kernel_initializer=tf.contrib.layers.xavier_initializer(uniform=False)) 
    outputs = tf.reshape(outputs, shape=[1, 1, -1]) 
    print(outputs) 
    rnn_outputs_sequence=tf.concat((rnn_outputs_sequence, outputs),axis=1) 
print(rnn_outputs_sequence) 
関連する問題