Python Tensorflow卷积网络错误:无效参数:logits和标签的大小必须相同:logits\u size=[512,4]labels\u size=[128,4]

Python Tensorflow卷积网络错误:无效参数:logits和标签的大小必须相同:logits\u size=[512,4]labels\u size=[128,4],python,machine-learning,classification,tensorflow,conv-neural-network,Python,Machine Learning,Classification,Tensorflow,Conv Neural Network,我根据这里找到的5_convolutional_net.py示例制作了一个convnet:。我试着把棋子分类。我加载了我的图片:每幅图片有1136张60x60的灰度图像。我将它们分割成训练图像和测试图像,为每一个片段制作热向量,然后将它们合并。所以我的testimages.shape=(40,60,60),testlabels.shape=(40,4),trainimages.shape=(4504,60,60),trainlabels.shape=(4504,4)。4504=4*(1136-1

我根据这里找到的5_convolutional_net.py示例制作了一个convnet:。我试着把棋子分类。我加载了我的图片:每幅图片有1136张60x60的灰度图像。我将它们分割成训练图像和测试图像,为每一个片段制作热向量,然后将它们合并。所以我的testimages.shape=(40,60,60),testlabels.shape=(40,4),trainimages.shape=(4504,60,60),trainlabels.shape=(4504,4)。4504=4*(1136-10)

运行脚本时,第100行出现以下错误:

tensorflow.python.framework.errors.InvalidArgumentError: logits and labels must be same size: logits_size=[512,4] labels_size=[128,4]
     [[Node: SoftmaxCrossEntropyWithLogits = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](MatMul_1, _recv_Placeholder_1_0)]]
Caused by op 'SoftmaxCrossEntropyWithLogits', defined at:
  File "/home/matyi/OneDrive/PYTHON/PYTHON3/chess_vision/5_convolutional_net_chess.py", line 100, in <module>
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, Y))
tensorflow.python.framework.errors.InvalidArgumentError:logits和labels的大小必须相同:logits\u size=[512,4]labels\u size=[128,4]
[[Node:SoftmaxCrossEntropyWithLogits=SoftmaxCrossEntropyWithLogits[T=DT\u FLOAT,\u device=“/job:localhost/replica:0/task:0/cpu:0”](MatMul\u 1,\u recv\u占位符\u 1\u 0)]]
由op“SoftmaxCrossEntropyWithLogits”引起,定义于:
文件“/home/matyi/OneDrive/PYTHON/PYTHON3/chess\u vision/5\u voluminal\u net\u chess.py”,第100行,在
成本=tf.reduce\u均值(tf.nn.softmax\u交叉\u熵\u与逻辑(py\u x,Y))
我也不明白128在108行的作用。你能帮我吗

图像示例:

因为您提供了60x60x1图像,所以您的张量形状将如下所示:

Tensor("Relu:0", shape=(?, 60, 60, 32), dtype=float32)
Tensor("MaxPool:0", shape=(?, 30, 30, 32), dtype=float32)
Tensor("Relu_1:0", shape=(?, 30, 30, 64), dtype=float32)
Tensor("MaxPool_1:0", shape=(?, 15, 15, 64), dtype=float32)
Tensor("Relu_2:0", shape=(?, 15, 15, 128), dtype=float32)
Tensor("MaxPool_2:0", shape=(?, 8, 8, 128), dtype=float32)
所以你最后的体重w4应该是:

w4 = init_weights([128 * 8 * 8, 625])

让我们首先尝试此更改。

zip(范围(0,len(trainimages),128),范围(128,len(trainimages),128))中的128是训练批大小。你能把整个堆栈跟踪放进去吗?谢谢它成功了!它现在正在训练。准确度虽然没有增加,但精确到0.25。我的图像是有序的,这会是个问题吗?(1126辆车,然后1126位主教…)所以对于一批128张图片,大多数时候所有图片都是相同的(例如车)。或者我的网络对于这个任务来说太简单了?我也会洗牌训练集。顺便说一句,你只有4个标签?是的,现在只有车、主教、兵和骑士。我来洗牌,谢谢!我添加了图片的示例。让我知道它是如何进行的。很有趣。我想你会得到99%以上的准确率。你是说我有4个等级,4个标签吗?我有4544个标签,每个图像一个
w4 = init_weights([128 * 8 * 8, 625])