2017-03-28 9 views
3

異なるタイムステップ(異なるフレーム数)を持つ入力でLSTMを使用しようとしています。 rnn.static_rnnへの入力は、tf(tf!ではなく)のシーケンスでなければなりません。だから、私は自分の入力をシーケンスに変換する必要があります。 tf.unstackとtf.splitを使用しようとしましたが、入力の正確なサイズを知る必要がありますが、入力の1つの次元(タイムステップ)は異なる入力によって変化しています。以下は、私のコードの一部です:テンソルフローのNoneディメンションの入力(プレースホルダ)をアンパック(アンスタック)します

n_input = 256*256 # data input (img shape: 256*256) 
n_steps = None # timesteps 
batch_size = 1 
# tf Graph input 
x = tf.placeholder("float", [ batch_size , n_input,n_steps]) 
y = tf.placeholder("float", [batch_size, n_classes]) 
# Permuting batch_size and n_steps 
x1 = tf.transpose(x, [2, 1, 0]) 
x1 = tf.transpose(x1, [0, 2, 1]) 
x3=tf.unstack(x1,axis=0) 
#or x3 = tf.split(x2, ?, 0) 
# Define a lstm cell with tensorflow 
lstm_cell = rnn.BasicLSTMCell(num_units=n_hidden, forget_bias=1.0) 

# Get lstm cell output 
outputs, states = rnn.static_rnn(lstm_cell, x3, dtype=tf.float32,sequence_length=None) 

私はtf.unstackを使用していたとき、私はエラーを次しまっ:

ValueError: Cannot infer num from shape (?, 1, 65536)

はまた、いくつかの議論herehereがありますが、それらのどれものために有用ではなかったです私。どんな助けもありがとうございます。

答えて

0

hereで説明したように、引数が指定されておらず、推測できない場合、tf.unstackは機能しません。

コードでは、転記後にx1の形状は[ n_steps, batch_size, n_input]で、axis=0の値はNoneに設定されています。

関連する問題