错误
"无法为Tensor' TargetsData / Y:0'提供形状值(128,1), 有形状'(?,)'"。
代码
我有4个班级,词汇包含17355个单词。
tf.reset_default_graph()
net = tflearn.input_data(shape=(None,trainX.shape[1]),name='input')
net = tflearn.fully_connected(net, 200, activation='ReLU')
net = tflearn.fully_connected(net, 25, activation='ReLU')
net = tflearn.fully_connected(net, 4, activation='softmax')
net = tflearn.regression(net, optimizer='sgd',
learning_rate=0.1,
to_one_hot = True,n_classes =4,
loss='categorical_crossentropy')
model = tflearn.DNN(net)
model.fit(trainX, trainY, validation_set=0.1, show_metric=True, batch_size=128, n_epoch=100)
trainX.shape = 12384,17355,trainY.shape = 12384,1,testX.shape = 1376,17355,testY.shape = 1376,1
答案 0 :(得分:1)
导致此错误的原因是什么?
错误“无法提供形状的值...对于Tensor'TargetsData / Y:0',其形状...”主要是由于trainY的形状与占位符形状不同而造成的估算器(回归)层。
<强>为什么吗
在你的情况下,主要的问题是trainY的形状是(?,1),它是2D张量,但占位符的形状是(?,)是1D张量。所以我们得到了这个错误。
如何解决?
将trainY重塑为1D张量。因为您在回归层中设置了to_one_hot = True
,所以占位符形状是包含类索引的1D张量。有关详细信息,您可以查看有关回归的source code:tflearn/tflearn/layers/estimator.py:
with tf.name_scope(pscope):
p_shape = [None] if to_one_hot else input_shape
placeholder = tf.placeholder(shape=p_shape, dtype=dtype, name="Y")
因此,我们需要将(12384,1)到(12384)的trainY重新整形,然后才能进入模型。