我是TensorFlow中轉移學習的新手,我選擇了tfhub來簡化尋找資料集,但現在我很困惑,因為當我試圖使用互聯網上的圖片時,我的模型給我一個錯誤的預測。我使用 efficientnet_v2_imagenet1k_b0 特征向量,沒有進行微調,從https://www.kaggle.com/drgfreeman/rockpaperscissors訓練一個石頭剪刀布資料集。我使用了影像資料生成器和目錄中的流程進行資料處理。
這就是我的模型。
這是我的模型這里
這是我的訓練結果 這里
這是我的測驗結果 這里
這是我第二次在使用tfhub的轉移學習時遇到這樣的情況。我想知道為什么會發生這種情況,以及如何修復它,這樣這個問題就不會再發生了。非常感謝你的幫助,對我糟糕的英語感到抱歉。
uj5u.com熱心網友回復:
要想得到幫助,真的需要看到你如何向model.predict提供資料的代碼。然而,作為一種猜測,請記住 efficientnet 需要的像素范圍是 0 到 255,所以不要縮放你的影像。確保你的測驗影像是rgb的,并且與訓練時使用的影像大小相同。還需要看到你如何處理預測的代碼
uj5u.com熱心網友回復:我把你的代碼下載到我的本地機器和資料集上。 不得不做一些調整以使其在本地運行。 我相信Efficiencyentnet_v2_imagenet1k_b0模型不同于 與較新的高效網模型不同的是,這個版本需要 要求像素級別在0和1之間進行縮放。 我運行了有和沒有重新縮放的模型,只有在像素點被重新縮放的情況下,它才能很好地作業。 的情況下,它才能很好地作業。下面是我用來測驗該模型是否正確預測的代碼 從互聯網上下載的影像。它和預期的一樣。
import cv2
class_dict=train_generator.class_indices
print (class_dict)
rev_dict={}
for key, value in class_dict.items()。
rev_dict[value]=key
print (rev_dict)
fpath=r'C:Temp
ps1.jpg' #從網上下載的圖片,應該是紙質的。
img=plt.imread(fpath)
print (img.shape)
img=cv2.resize(img, (224,224) # 調整大小為224 X 224,與模型訓練時的大小相同。
print (img.shape)
plt.imshow(img)
img=img/255.0 # rescale as was done with training images[/span
img=np.expand_dims(img,axis=0)
print(img.shape)
p=model.predict(img)
print(p)
index=np.argmax(p)
print (index)
klass=rev_dict[index] 。
prob=p[0][index]*100。
print (f'image is of class {klass}, with probability of {prob:6.2f})
結果是
{'paper'/span>: 0, 'rock': 1, 'scissors': 2}。
{0: 'paper', 1: 'rock', 2: 'scissors'}。
(300, 300, 3)
(224, 224, 3)
(1, 224, 224, 3)
[[9.9902594e-01 5.5121275e-04 4.2284720e-04]]
0 0
影像是class paper, with probability of 99.90。
你的代碼里有這樣的內容
uploaded = files.upload()
len_file = len(upload.keys())
這并沒有運行,因為沒有定義files 所以無法找到導致你的錯誤分類問題的原因。 記住在flow_from_directory中,如果你不指定顏色模式,它默認為rgb。因此,即使訓練影像是4通道的PNG,實際模型也是在3通道上訓練的。 實際模型是在3個通道上訓練的。所以請確保你要預測的影像是3通道的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/328140.html
標籤:
上一篇:12-2107課上問題分析及總結
下一篇:六層PCB板是怎么拼出來的?
