Tflearn输入形状错误

时间:2017-08-26 13:22:44

标签: neural-network tflearn

错误

  

"无法为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

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重新整形,然后才能进入模型。