当我使用tflearn预测一个测试用例时,它表示"不能为Tensor u'输入/ X:0'提供形状值(32,32,3),它具有形状' (?,32,32,3)"

时间:2017-02-26 19:20:07

标签: python tensorflow tflearn

(X,Y),(test_x,test_y)=cifar.load_data(one_hot=True)

X=X.reshape([-1,32,32,3])
test_x=test_x.reshape([-1,32,32,3])

convnet=input_data(shape=[None,32,32,3],name='input')

convnet=conv_2d(convnet,32,3,activation='relu')
convnet=max_pool_2d(convnet,2)

convnet=conv_2d(convnet,64,3,activation='relu')
convnet=max_pool_2d(convnet,2)

convnet=conv_2d(convnet,128,3,activation='relu')
convnet=conv_2d(convnet,128,3,activation='relu')
convnet=max_pool_2d(convnet,2)

convnet=fully_connected(convnet,512,activation='relu')
convnet=fully_connected(convnet,512,activation='relu')
convnet=dropout(convnet,0.8)


convnet=fully_connected(convnet,10,activation='softmax')
convnet=regression(convnet,optimizer='adam',learning_rate=0.001,loss='categorical_crossentropy')

model=tflearn.DNN(convnet)

model.fit(X,Y,n_epoch=1,validation_set=(test_x,test_y),batch_size=100,snapshot_step=1000,show_metric=True)

model.save('tflearn.model')
'''
model.load('tflearn.model')

print(model.predict(test_x[1]))
'''

当我尝试预测时,显示错误: "不能为Tensor u'输入/ X:0'提供形状值(32,32,3),它具有形状'(?,32,32,3)&#34 ;

请有人帮忙。

2 个答案:

答案 0 :(得分:1)

您需要对要进行预测的输入使用tf.expand_dims

# 't2' is a tensor of shape [32, 32, 3]
shape(expand_dims(t2, axis=0)) ==> [1, 32, 32, 3]

答案 1 :(得分:0)

这是弗兰克所说的长篇大论,

当输入接受四维张量时,您正在输入三维张量。

'?'形状对应于您在model.fit()函数中定义的批量大小。在训练期间,这相当于100。

当你预测网络时仍然需要一个类似于训练的4维张量,但你只需要一个三维图像(形状= [32,32,3])。因为你试图预测一个图像的类,它对应一个形状[1,32,32,3]。因此,如果您将代码更改为:

print(model.predict(test_x[1].reshape([1,32,32,3])))

这将打印十个班级中每个班级的分数。