1
(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]))
'''

当我尝试预测时,它显示错误:“无法为具有形状 '(?, 32, 32, 3) 的张量 u'input/X:0' 提供形状 (32, 32, 3) 的值”。

请有人帮忙。

4

2 回答 2

1

您需要tf.expand_dims在要进行预测的输入上使用:

# 't2' is a tensor of shape [32, 32, 3]
shape(expand_dims(t2, axis=0)) ==> [1, 32, 32, 3]
于 2017-02-26T19:26:24.880 回答
0

这是弗兰克所说的长篇版本,

当输入接受四维张量时,您正在输入一个 3 维张量。

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

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

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

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

于 2017-02-27T08:04:09.080 回答