Machine learning 为什么tensorflow中的代码不';不行?

Machine learning 为什么tensorflow中的代码不';不行?,machine-learning,tensorflow,deep-learning,Machine Learning,Tensorflow,Deep Learning,我的代码是这样写的 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(se

我的代码是这样写的

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:必须为占位符张量输入一个值 带有dtype float[[节点:占位符]的“占位符”= 占位符dtype=DT_FLOAT,形状=[], _device=“/job:localhost/replica:0/task:0/cpu:0”]]


我百分之百确信我输入的
X
类型为float32,形状为[1000784]。

正如Olivier正确指出的,缺少输入值的占位符张量的名称与您直接创建的占位符张量的名称不同(“输入”)

如果您正在使用,在不了解TensorLayer层内部结构的情况下,您可能无法调用session.run或某些_tensor.eval。例如,它们的每个
DropoutLayer
实例都在内部创建一个

也就是说,该库似乎期望您仅通过模型的API(例如
fit
test
)与模型交互,如以下示例所示:

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

From:

正如Olivier正确指出的,缺少提要值的占位符张量的名称与您直接创建的占位符张量的名称(“输入”)不同

如果您正在使用,在不了解TensorLayer层内部结构的情况下,您可能无法调用session.run或某些_tensor.eval。例如,它们的每个
DropoutLayer
实例都在内部创建一个

也就是说,该库似乎期望您仅通过模型的API(例如
fit
test
)与模型交互,如以下示例所示:

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

From:

您有两种方法可以在TensorLayer中使用DropoutLayer:

1) 使用TensorLayer创建的内部keep prob占位符,请参见

2) 我们没有使用占位符来控制keep prob,而是构建了两个用于培训和测试的图,请参见


因此,在您的情况下,如果您不想使用由TensorLayer创建的内部占位符,可以使用第二种方法。

在TensorLayer中有两种方法可以使用DropoutLayer

1) 使用TensorLayer创建的内部keep prob占位符,请参见

2) 我们没有使用占位符来控制keep prob,而是构建了两个用于培训和测试的图,请参见


因此,在您的情况下,如果您不想使用TensorLayer创建的内部占位符,可以使用第二种方法。

似乎在
self.input\x
之外的某个地方有占位符,您必须找到它。似乎在
self.input\x
之外的某个地方有占位符,您必须找到它。