2016-11-07 100 views
0

我的代碼是這樣寫的。爲什麼在tensorflow中的這段代碼不起作用?

def __init__(self, X): 
    ops.reset_default_graph() 
    tl.layers.clear_layers_name() 

    self.sess = tf.Session() 

    self.input_x = tf.placeholder(tf.float32, shape=[None, 784],name="input") 

    input_layer = tl.layers.InputLayer(self.input_x) 
    drop1 = tl.layers.DropoutLayer(input_layer, keep=0.8, name="drop1") 
    relu1 = tl.layers.DenseLayer(drop1, n_units=800, act = tf.nn.relu) 
    drop2 = tl.layers.DropoutLayer(relu1, keep=0.5, name="drop2") 

    self.output = drop2.all_layers[-1] 

    self.gradient = tf.gradients(self.output,self.input_x) 

    init_op = tf.initialize_all_variables() 
    self.sess.run(init_op) 
    self.output.eval(session=self.sess, feed_dict={self.input_x:X}) 

正如你所看到的,有隻啓動了一個佔位符,但是,我遇到了

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float [[Node: Placeholder = Placeholderdtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]]

我百分之百肯定,我喂的X具有類型FLOAT32,形狀[ 1000,784。

+1

好像有佔位符除了'self.input_x'之外,你必須找到它。 –

回答

1

正如Olivier正確指出的,缺少Feed值的佔位符張量的名稱與您直接創建的佔位符張量的名稱(「input」)不同。

如果您使用的是TensorLayer,則可能無法在不瞭解TensorLayer層內幕的情況下調用session.run或some_tensor.eval。例如,它們的每個DropoutLayer實例都在內部創建tf.placeholder for the keep probability

也就是說這個庫似乎希望你只在下面的例子中你通過自己的API(如fittest)像模型交互:

# Train the network, we recommend to use tl.iterate.minibatches() 
tl.utils.fit(sess, network, train_op, cost, X_train, y_train, x, y_, 
      acc=acc, batch_size=500, n_epoch=500, print_freq=5, 
      X_val=X_val, y_val=y_val, eval_train=False) 

# Evaluation 
tl.utils.test(sess, network, acc, X_test, y_test, x, y_, batch_size=None, cost=cost) 

來源:https://github.com/zsdonghao/tensorlayer#your-first-program

+0

謝謝!問題修復了! – xxx222

相關問題