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 :)