2016-11-07 9 views
0

私のコードはこれで書かれています。テンソルフロー内のこのコードがなぜ機能しないのですか?

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}) 

あなたが見ることができるように、開始一つだけのプレースホルダがあるが、しかし、私は[私はで供給Xはのfloat32、および形状を入力したことを百パーセント確信している

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"]]

に会いました1000,784]。

+1

らしいです'self.input_x'以外の場所であれば、それを見つけなければなりません。 –

答えて

1

Olivierが正確に指摘したように、フィード値がないプレースホルダテンソルの名前は、直接作成したプレースホルダテンソル(「入力」)の名前とは異なります。

TensorLayerを使用している場合は、おそらくTensorLayerレイヤの内容を理解することなく、session.runまたはsome_tensor.evalを呼び出すことはできません。たとえば、DropoutLayerインスタンスのそれぞれは、内部でtf.placeholder for the keep probabilityを作成します。

# 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) 

から:このライブラリはあなただけ、次の例のように(例えばfittest)そのAPIを介して、あなたのモデルとの対話を期待しているようだと述べ

プレースホルダがあるようhttps://github.com/zsdonghao/tensorlayer#your-first-program

+0

ありがとう!問題は解決しました! – xxx222

関連する問題