TensorFlow / TFLearn:ValueError:无法为Tensor u'target / Y:0'提供形状值(64,),其形状为'(?,10)'

时间:2016-05-25 09:42:22

标签: python tensorflow deep-learning

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

使用tflearn我一直在尝试使用MNIST数据集实现基于example的卷积网络。我没有使用MNIST数据集,而是尝试用我自己的数据替换训练和测试数据。我的数据是从csv文件中读取的,与MNIST数据的形状不同。我有255个功能,代表15 * 15网格和目标值。在示例中,我将第24-30行替换为(并包含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:无法为Tensor u'target / Y:0'提供形状值(64,),   形状'(?,10)'

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

如何使用自己的数据?

1 个答案:

答案 0 :(得分:29)

简短回答

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

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

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

此外,重塑Y和Y_test以具有形状(batch_size,1)。

答案很长:如何分析错误并找到错误

以下是分析错误的方法:

  • 错误为Cannot feed value ... for Tensor 'target/Y',表示它来自 feed_dict 参数Y.
  • 同样,根据错误,您尝试提供Y值of shape (64,),而网络期望形状(?, 10)
    • 它需要一个形状(batch_size,10),因为它原来是MNIST的网络(10个类)
  • 我们现在想要为Y更改网络的预期值。
    • 在代码中,我们看到最后一层fully_connected(network, 10, activation='softmax')正在返回大小为10的输出
    • 我们将其更改为大小为1的输出而不使用softmax:fully_connected(network, 1, activation='linear')

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