(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 ;
请有人帮忙。
答案 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])))
这将打印十个班级中每个班级的分数。