1

我已经训练了一个分类器,现在我想通过任何单个图像。Tensorflow图像形状错误

我使用Tensorflow作为后端的keras库。

我得到一个错误,我似乎无法让过去

img_path = '/path/to/my/image.jpg' 

import numpy as np 
from keras.preprocessing import image 
x = image.load_img(img_path, target_size=(250, 250)) 

x = image.img_to_array(x) 
x = np.expand_dims(x, axis=0) 

preds = model.predict(x) 

我需要重塑我的数据有None作为第一个维度?我很困惑为什么Tensorflow预计None作为第一个维度?

Error when checking : expected convolution2d_input_1 to have shape (None, 250, 250, 3) but got array with shape (1, 3, 250, 250) 

我想知道我的训练模型的架构是否存在问题?

编辑:如果我叫model.summary()给予convolution2d_input_1为...

enter image description here

编辑:我没有玩弄下面的建议,但使用numpy的转置,而不是TF - 似乎仍然被击中同样的问题!

enter image description here

回答

2

None匹配任何数字。通常,当您将一些数据传递给模型时,预计会传递尺寸的张量:None x data_size,这意味着第一个维度是任何维度并且表示批量大小。在你的情况下,问题是你通过250 x 250 x 3,并且预计3 x 250 x 250。尝试:

x = image.load_img(img_path, target_size=(250, 250)) 
x_trans = tf.transpose(x, perm=[2, 0, 1]) 
x_expanded = np.expand_dims(x_trans, axis=0) 
preds = model.predict(x_expanded) 
+0

谢谢了解维序@sygi , 我给了这个旋转,但即时打出一个新的错误... ValueError:参数必须是一个稠密张量: - 得到形状[250,250,3],但想要[] - ok大小,我假设,因为它是无,你可以给它任何批量大小(有点愚蠢的假设)。我也想知道它是否值得用numpy来重塑数据而不是tf? – YesIndeedy

+0

'ValueError:参数必须是一个稠密张量: - 形状[250,250,3],但想[]' 对不起,使更多的可读性 – YesIndeedy

0

enter image description here

好了,所以使用反馈ROM Sygi我想我已经解决了一半了,

错误实际上是告诉我,我需要在我的尺寸通过为[1,250 ,250,3],这是一个简单的修复;我必须说,我不知道为什么TF预期这个顺序的维度,因为看看它看起来不正确的文档,所以这里需要更多的研究。

展望未来林不知道是转去,如果我使用不同的输入图像的尺寸可能不会以相同的顺序正确意思是转不工作的方式,

相反转的我可能试图至t呼叫x_reshape = img.reshape((1,250,250,3))取决于我在

感谢重塑为TS

的提示Sygi :)