【问题标题】:TensorFlow/TFLearn: ValueError: Cannot feed value of shape (64,) for Tensor u'target/Y:0', which has shape '(?, 10)'TensorFlow / TFLearn:ValueError:无法为Tensor u'target / Y:0'提供形状(64,)的值,其形状为'(?,10)'
【发布时间】:2016-05-25 09:42:21
【问题描述】:

我一直在尝试使用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: 无法为张量 u'target/Y:0' 提供形状 (64,) 的值, 形状为 '(?, 10)'

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

我如何使用自己的数据?

【问题讨论】:

    标签: python tensorflow deep-learning


    【解决方案1】:

    简答

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

    查看您的代码,您似乎有一个目标值Y,这意味着将L2 lossmean_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 的输出
      • 我们将其更改为不带 softmax 的大小为 1 的输出:fully_connected(network, 1, activation='linear')

    归根结底,这不是一个错误,而是一个错误的模型架构

    【讨论】:

    • 太好了,非常感谢您提供如此详细的答案。
    • 希望它有效,希望下次你能理解 Tensorflow 的错误信息(我必须承认相当复杂)
    • 2 年后,@OlivierMoindrot 你不知道我有多感激!
    猜你喜欢
    • 2017-12-11
    • 2016-12-04
    • 2016-09-11
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    相关资源
    最近更新 更多