2016-09-22 8 views
0

以下のコードは、「入力はリストでなければなりません」と表示しています。これで「入力はリストでなければならない」とはどういう意味ですか?

outputs, states = rnn.rnn(lstm_cell, x, dtype=tf.float32) 

入力xのプレースホルダを定義するとします。私はすでに形状を[None,None]と設定しています。私はこの形状が2次元配列だと思う。ただし、コードには継続的にリストタイプのxが必要です。

以下、トレーニング前にすべてのコードを添付しました。そして、このコードはクラスの関数に挿入されます。

x = tf.placeholder("float",[None,None]) 
y = tf.placeholder("float",[None]) 

lstm_cell = rnn_cell.BasicLSTMCell(self.n_hidden, forget_bias=1.0) 

outputs, states = rnn.rnn(lstm_cell, x, dtype=tf.float32) 

pred = tf.matmul(outpus[-1], self.weights['out']) + self.biases['out'] 
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred,y)) 
optimizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate).minimize(cost) 

correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) 

init = tf.initialize_all_variables() 

self.sess = tf.Session() 

self.sess.run(init) 

また、実用的な入力がx=[["aaa","aaa","aaa"],["bbb","bbb"]]y=["c1","c2"]として形成されたラベルの単語列とフロートのフロートであろう。

ここで、xの最初の要素配列は "c1"とラベル付けされ、2番目の要素配列は "c2"です。特に、各要素配列のサイズはxであり、確定的ではありません。

答えて

0

documentationにより述べたように、関数の引数tf.nn.rnn()inputsがある:

入力:入力の長さTのリスト、各形状のテンソル[BATCH_SIZE、input_size]、またはネストされたタプルそのような要素。あなたのコードで

は、引数inputsx、形状[None, None]テンソルプレースホルダです。あなたのコードが動作するためには、xのTテンソルのリスト[None, input_lenght]のリストでなければなりません。

次のコードは、テンソルのリストをinputsと生成し、したがって関数tf.nn.rnnが機能します。プレースホルダx[None, input_shape]の規定された形状を有している方法

import tensorflow as tf 

x = tf.placeholder("float",[None,16]) 
y = tf.placeholder("float",[None]) 

lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(256, forget_bias=1.0) 

inputs = [] 
for t in range(10): 
     inputs.append(x) 

print(len(inputs)) 

outputs, states = tf.nn.rnn(lstm_cell, inputs, dtype=tf.float32) 

pred = tf.matmul(outputs[-1], self.weights['out']) + self.biases['out'] 
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred,y)) 
optimizer = tf.train.AdamOptimizer(learning_rate=self.learning_rate).minimize(cost) 

correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32)) 

init = tf.initialize_all_variables() 

self.sess = tf.Session() 

self.sess.run(init) 

注意。最初のディメンションはNoneのバッチサイズですが、2番目のディメンションは入力シーケンス内の各アイテムのサイズであり、その値はNoneにできないため、形状[None, None]では機能しません。

+0

ありがとうございます。また、学習データの最小長と最大長の距離が遠い場合、アルゴリズムの面で固定入力サイズを生成する方法は? – hackartist

関連する問題