TensorFlow/TFLearn: ValueError: Cannot feed value of shape (64,) for Tensor u'target/Y:0', which has shape '(?, 10)'
TensorFlow/TFLearn: ValueError: Cannot feed value of shape (64,) for Tensor u'target/Y:0', which has shape '(?, 10)'
我一直在尝试使用 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: Cannot feed value of shape (64,) for Tensor u'target/Y:0',
which has shape '(?, 10)'
我尝试了各种组合,并且在 Whosebug 中看到了 ,但没有成功。此页面中的示例对我不起作用并引发类似错误,我不理解提供的答案或类似问题提供的答案。
如何使用我自己的数据?
简答
在 MNIST example 的第 41 行中,您还必须将 network = fully_connected(network, 10, activation='softmax')
中的输出大小 10 更改为 1 到 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 的输出
- 我们将其更改为没有 softmax 的大小为 1 的输出:
fully_connected(network, 1, activation='linear')
最终不是bug,而是错误的模型架构。
我一直在尝试使用 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: Cannot feed value of shape (64,) for Tensor u'target/Y:0', which has shape '(?, 10)'
我尝试了各种组合,并且在 Whosebug 中看到了
如何使用我自己的数据?
简答
在 MNIST example 的第 41 行中,您还必须将 network = fully_connected(network, 10, activation='softmax')
中的输出大小 10 更改为 1 到 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 的输出
- 我们将其更改为没有 softmax 的大小为 1 的输出:
fully_connected(network, 1, activation='linear')
- 在代码中,我们看到最后一层
最终不是bug,而是错误的模型架构。