2017-10-07 10 views
0

テンソルフローでrnnを使用してテキストを生成しようとしています。私はdynamic_rnnにstatic_rnnから切り替えしかし、一度、私はこのエラーを得た:Tensorflow dynamic_rnn入力ランクエラー

File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/tensor_shape.py", line 654, in with_rank_at_least 
    raise ValueError("Shape %s must have rank at least %d" % (self, rank)) 
ValueError: Shape (100, 5) must have rank at least 3 

これは、エラーを生成するコードの一部です:

inputs_series = self.input_layer() 
with tf.variable_scope(constants.HIDDEN): 
    self.hidden_state_placeholder = tf.placeholder(
     dtype=tf.float32, 
     shape=[self.settings.train.batch_size, self.settings.rnn.hidden_size], 
     name="hidden_state_placeholder") 
    cell = tf.contrib.rnn.GRUCell(self.settings.rnn.hidden_size) 
    states_series, self.current_state = tf.nn.dynamic_rnn(
     cell=cell, 
     inputs=inputs_series, 
     initial_state=self.hidden_state_placeholder) 

inputs_seriesの形状は、次のとおりです。(

hidden_state_placeholderの形状は(バッチサイズ、隠し状態サイズ)は(5,100)ですが、エラーは持続します私は初期状態を提供していません。

テンソルフローバージョンは、役立つ場合は1.3です。

洞察力があれば幸いです!

答えて

0

time_major == Trueです最終的なステートメントを

に変更してください
states_series, self.current_state = tf.nn.dynamic_rnn(
    cell=cell, 
    inputs=inputs_series, 
    initial_state=self.hidden_state_placeholder, 
    time_major=True) 
+0

私はちょうどこれを試してみてください - これは問題を解決しなかった - 私は同じエラーメッセージを持っています。 ** **私のコードで正当なバグだった**、それをキャッチするために感謝! – frankie

+0

'inputs_series = self.input_layer()'私はこのステートメントをテストできませんでした。そのため、固定サイズの変数(その他の未知のパラメータ)で置き換えました。 'inputs_series'のサイズを出力してください(例えば' print(inputs_series.get_shape()) ')。私はいくつかの問題があるかもしれないと思う。 –

+0

私はプリントをして、それを理解しました。テンソルを10テンソルのリストに変換した 'self.input_layer()'に 'tf.unstack()'操作を続けました。どうやら、それは動的なrnn APIでうまくいきません。一度アンスタック操作を削除すると、すべてが期待どおりに機能しました。すべての提案をありがとう! – frankie

関連する問題