TensorFlow/TFLearn:ValueError:无法为 Tensor u'target/Y:0' 提供形状 (64,) 的值,其形状为 '(?, 10)' [英] TensorFlow/TFLearn: ValueError: Cannot feed value of shape (64,) for Tensor u'target/Y:0', which has shape '(?, 10)'

查看:19
本文介绍了TensorFlow/TFLearn:ValueError:无法为 Tensor u'target/Y:0' 提供形状 (64,) 的值,其形状为 '(?, 10)'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用 tflearn 和我自己的数据集进行回归.

I have been trying to perform regression using tflearn and my own dataset.

使用 tflearn 我一直在尝试实现基于 示例 使用 MNIST 数据集.我没有使用 MNIST 数据集,而是尝试用我自己的数据替换训练和测试数据.我的数据是从 csv 文件中读入的,与 MNIST 数据的形状不同.我有 255 个特征,它们代表一个 15*15 的网格和一个目标值.在示例中,我将第 24-30 行替换为(并包含 import numpy as np):

Using tflearn I have been trying to implement a convolutional network based off an example using the MNIST dataset. Instead of using the MNIST dataset I have tried replacing the training and test data with my own. My data is read in from a csv file and is a different shape to the MNIST data. I have 255 features which represent a 15*15 grid and a target value. In the example I replaced the lines 24-30 with (and included import numpy as np):

#read in train and test csv's where there are 255 features (15*15) and a target
csvTrain = np.genfromtxt('train.csv', delimiter=",")
X = np.array(csvTrain[:, :225]) #225, 15
Y = csvTrain[:,225]

csvTest = np.genfromtxt('test.csv', delimiter=",")
testX = np.array(csvTest[:, :225])
testY = csvTest[:,225]

#reshape features for each instance in to 15*15, targets are just a single number
X = X.reshape([-1,15,15,1])
testX = testX.reshape([-1,15,15,1])

## Building convolutional network
network = input_data(shape=[None, 15, 15, 1], name='input')

我收到以下错误:

ValueError:无法为张量 u'target/Y:0' 提供形状 (64,) 的值,其形状为 '(?, 10)'

ValueError: Cannot feed value of shape (64,) for Tensor u'target/Y:0', which has shape '(?, 10)'

我尝试了各种组合,并看到了 类似问题在stackoverflow中但没有成功.此页面中的示例对我不起作用并引发类似错误,我不明白所提供的答案或类似问题提供的答案.

I have tried various combinations and have seen a similar question in stackoverflow but have not had success. The example in this page does not work for me and throws a similar error and I do not understand the answer provided or those provided by similar questions.

我如何使用自己的数据?

How do I use my own data?

推荐答案

简短回答

MNIST 示例的第 41 行中,您还必须将 network = fully_connected(network, 10, activation='softmax') 中的输出大小从 10 更改为 1 到 network =fully_connected(network, 1, activation='linear').请注意,您可以删除最终的 softmax.

Short answer

In the line 41 of the MNIST example, you also have to change the output size 10 to 1 in network = fully_connected(network, 10, activation='softmax') to network = fully_connected(network, 1, activation='linear'). Note that you can remove the final softmax.

查看您的代码,您似乎有一个目标值 Y,这意味着使用 L2 损失mean_square(您将在此处找到所有可用的损失):

Looking at your code, it seems you have a target value Y, which means using the L2 loss with mean_square (you will find here all the losses available):

regression(network, optimizer='adam', learning_rate=0.01,
                 loss='mean_square', name='target')

此外,将 Y 和 Y_test 整形为形状 (batch_size, 1).

Also, reshape Y and Y_test to have shape (batch_size, 1).

这里是如何分析错误:

  • 错误是 Cannot feed value ... for Tensor 'target/Y',这意味着它来自 feed_dict 参数 Y.
  • 同样,根据错误,您尝试提供形状为 (64,) 的 Y 值,而网络期望形状为 (?, 10).
    • 它需要一个形状 (batch_size, 10),因为它最初是一个用于 MNIST(10 个类)的网络
    • The error is Cannot feed value ... for Tensor 'target/Y', which means it comes from the feed_dict argument Y.
    • Again, according to the error, you try to feed an Y value of shape (64,) whereas the network expect a shape (?, 10).
      • It expects a shape (batch_size, 10), because originally it's a network for MNIST (10 classes)
      • 在代码中,我们看到最后一层 fully_connected(network, 10, activation='softmax') 返回大小为 10 的输出
      • 我们将其更改为没有 softmax 的大小为 1 的输出:fully_connected(network, 1, activation='linear')
      • in the code, we see that the last layer fully_connected(network, 10, activation='softmax') is returning an output of size 10
      • We change that to an output of size 1 without softmax: fully_connected(network, 1, activation='linear')

      最后,这不是错误,而是错误的模型架构.

      In the end, it was not a bug, but a wrong model architecture.

      这篇关于TensorFlow/TFLearn:ValueError:无法为 Tensor u'target/Y:0' 提供形状 (64,) 的值,其形状为 '(?, 10)'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆