python - 为什么 TensorFlow 会提示我将错误的形状和类型输入到占位符中?

标签 python tensorflow machine-learning mnist tensor

我无法弄清楚这一点。我一直在反复思考,我知道我可以复制并粘贴工作教程,但我想了解为什么这不起作用。

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data


mnist = input_data.read_data_sets('MNIST_data', one_hot=True)   

#simple constants
learning_rate = .01
batch_size = 100
training_epoch = 10
t = 0
l = t

#gather the data
x_train = mnist.train.images
y_train = mnist.train.labels
batch_count = int(len(x_train)/batch_size)

#Set the variables
Y_ = tf.placeholder(tf.float32, [None,10], name = 'Labels')
X = tf.placeholder(tf.float32,[None,784], name = 'Inputs')
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))

#Build the graph (Y = WX + b)
Y = tf.nn.softmax(tf.matmul(X,W) + b, name = 'softmax')

cross_entropy = -tf.reduce_mean(Y_ * tf.log(Y)) * 1000.0

correct_prediction = tf.equal(tf.argmax(Y,1), tf.argmax(Y_,1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy) 

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())


    for epoch in range(training_epoch):
        for i in range(batch_count):
            t += batch_size
            print(y_train[l:t].shape)
            print(x_train[l:t].shape)
            print(y_train[l:t].dtype)
            sess.run(train_step,feed_dict={X: x_train[l:t], Y: y_train[l:t]})
            l = t
        print('Epoch = ', epoch)
    print("Accuracy: ", accuracy.eval(feed_dict={X: x_test, Y_: y_test})) 
    print('Done') 

错误信息:

InvalidArgumentError: You must feed a value for placeholder tensor 'Labels_2' with dtype float and shape [?,10]
     [[Node: Labels_2 = Placeholder[dtype=DT_FLOAT, shape=[?,10], _device="/job:localhost/replica:0/task:0/device:GPU:0"]

我也明白,为了让它发挥作用,我需要添加的东西比我需要的多,但我现在想自己努力解决这个问题。我在 jupyter 笔记本上运行它。我确信 y_train 具有形状 (100, 10) 和类型 float64。

我已经被困了几天了,非常感谢您的帮助。

最佳答案

将这一行中的 Y 更改为 Y_:

sess.run(train_step,feed_dict={X: x_train[l:t], Y_: y_train[l:t]})

关于python - 为什么 TensorFlow 会提示我将错误的形状和类型输入到占位符中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074258/

相关文章:

python - 使用 SQLAlchemy 和 MySQL 进行浮点值舍入

python - 为什么 python 的 matlab.engine 这么慢?

python - 使用 pandas/python 进行基于优先级的分类

python - Keras:如何减去两个不同模型的输出并输入到另一个模型?

python - 来自 Tensorflow 中的 sparse_softmax_cross_entropy_with_logits 的 NaN

python - 通过 tf-idf 特征选择重用 sklearn 文本分类模型

python - 如何在 django channel 中设置连接超时?

python - 如何应用 ConvLSTM 层

python - 如何在 Scikit-Learn 中对训练和测试数据进行分层?

machine-learning - TimeDistributed(Dense) 与 Keras 中的 Dense - 相同数量的参数