2016-09-22 52 views
0

下面的代码告诉我“输入必须是一个列表”。在这。这是什么意思“输入必须是一个列表”?

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

当我为输入定义占位符x。我已经将形状设置为[None,None]。我认为这个形状是二维数组。但是,代码不断需要列表类型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”,第二个元素数组为“c2”。特别是,x的每个元素数组的大小不能确定。

回答

0

如上所述由documentation,所述参数的函数tf.nn.rnn()inputs是:

输入:的输入端A长度T列表,每个张量形状[batch_size时,input_size],或嵌套元组的这些元素。

在你的代码中,参数inputsx,一个张量占位符形状[None, None]的。为了让您的代码正常工作,x必须是形状为[None, input_lenght]的T张量的列表。

以下代码生成张量列表inputs,因此函数tf.nn.rnn有效。

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) 

注意占位符x如何具有限定的[None, input_shape]形状。它不适用于形状[None, None],因为第一个维度是batch_size,它可以是None,但第二个维度是输入序列中每个项目的大小,并且该值不能是None

+0

谢谢。如果训练数据的最小长度和最大长度之间的距离较大,如何在算法的一个方面产生固定的输入大小? – hackartist