首页 文章

Tensorflow:无法将feed_dict键解释为Tensor

提问于
浏览
6

我正在尝试构建一个具有一个隐藏层(1024个节点)的神经网络模型 . 隐藏层只是一个relu单元 . 我也在批量处理128个输入数据 .

输入是大小为28 * 28的图像 . 在下面的代码中,我得到了错误

_, c = sess.run([optimizer, loss], feed_dict={x: batch_x, y: batch_y})
Error: TypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("Placeholder_64:0", shape=(128, 784), dtype=float32) is not an element of this graph.

这是我写的代码

#Initialize

batch_size = 128

layer1_input = 28 * 28
hidden_layer1 = 1024
num_labels = 10
num_steps = 3001

#Create neural network model
def create_model(inp, w, b):
    layer1 = tf.add(tf.matmul(inp, w['w1']), b['b1'])
    layer1 = tf.nn.relu(layer1)
    layer2 = tf.matmul(layer1, w['w2']) + b['b2']
    return layer2

#Initialize variables
x = tf.placeholder(tf.float32, shape=(batch_size, layer1_input))
y = tf.placeholder(tf.float32, shape=(batch_size, num_labels))

w = {
'w1': tf.Variable(tf.random_normal([layer1_input, hidden_layer1])),
'w2': tf.Variable(tf.random_normal([hidden_layer1, num_labels]))
}
b = {
'b1': tf.Variable(tf.zeros([hidden_layer1])),
'b2': tf.Variable(tf.zeros([num_labels]))
}

init = tf.initialize_all_variables()
train_prediction = tf.nn.softmax(model)

tf_valid_dataset = tf.constant(valid_dataset)
tf_test_dataset = tf.constant(test_dataset)

model = create_model(x, w, b)

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(model, y))    
optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)

#Process
with tf.Session(graph=graph1) as sess:
    tf.initialize_all_variables().run()
    total_batch = int(train_dataset.shape[0] / batch_size)

    for epoch in range(num_steps):    
        loss = 0
        for i in range(total_batch):
            batch_x, batch_y = train_dataset[epoch * batch_size:(epoch+1) * batch_size, :], train_labels[epoch * batch_size:(epoch+1) * batch_size,:]

            _, c = sess.run([optimizer, loss], feed_dict={x: batch_x, y: batch_y})
            loss = loss + c
        loss = loss / total_batch
        if epoch % 500 == 0:
            print ("Epoch :", epoch, ". cost = {:.9f}".format(avg_cost))
            print("Minibatch accuracy: %.1f%%" % accuracy(predictions, batch_labels))
            valid_prediction = tf.run(tf_valid_dataset, {x: tf_valid_dataset})
            print("Validation accuracy: %.1f%%" % accuracy(valid_prediction.eval(), valid_labels))
    test_prediction = tf.run(tf_test_dataset,  {x: tf_test_dataset})
    print("TEST accuracy: %.1f%%" % accuracy(test_prediction.eval(), test_labels))

5 回答

  • 5

    变量 xmodel 不在同一图表中,尝试在同一图表范围内定义所有这些 . 例如,

    # define a graph
    graph1 = tf.Graph()
    with graph1.as_default():
        # placeholder
        x = tf.placeholder(...)
        y = tf.placeholder(...)
        # create model
        model = create(x, w, b)
    
    with tf.Session(graph=graph1) as sess:
    # initialize all the variables
    sess.run(init)
    # then feed_dict
    # ......
    
  • 1

    这对我有用

    from keras import backend as K
    

    在预测了我的数据后,我插入了这部分代码,然后我再次加载了模型 .

    K.clear_session()
    

    我在 生产环境 服务器上遇到了这个问题,但在我的电脑上运行正常

  • 6

    如果您使用django服务器,只需使用带有 --nothreading 的runserver:

    python manage.py runserver --nothreading
    
  • 16

    在我的情况下,我在CNN多次调用时使用循环,我通过执行以下操作修复了我的问题:

    • 将此声明为全球:

    全局图

    graph = tf.get_default_graph()

    • 然后在你打电话给你的模型之前,使用它

    与graph.as_default():

    • 在这里打电话给你

    注意:在我的情况下,应用程序第一次运行良好,然后给出上面的错误 . 使用上面的修复解决了这个问题 .

    希望有所帮助 .

  • 1

    如果您在 with 语句范围之外运行会话,也会出现错误消息 TypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("...", dtype=dtype) is not an element of this graph . 考虑:

    with tf.Session() as sess:
        sess.run(logits, feed_dict=feed_dict) 
    
    sess.run(logits, feed_dict=feed_dict)
    

    如果正确定义 logitsfeed_dict ,则第一个 sess.run 命令将正常执行,但第二个将引发上述错误 .

相关问题