在訓練 Kmeans 遇到問題,valueerror cannot take a larger sample than population when 'replace=false',是甚麼原因?

內容說明

碰到 valueerror: cannot take a larger sample than population when ‘replace=false’

Valueerror: cannot take a larger sample than population when ‘replace=false’ 遇到這種錯誤時該怎麼辦呢?

通常是一種情況,你丟入 kmenas 的 np.array 特徵數並沒有大於等於 k,而是小於 k 時會發生此錯誤。

舉例:

1
2
3
4
5
6
7
8
9
descriptors = sift[0] #圖片
for it in sift[1:]:
descriptors = np.vstack((descriptors, it))

print(len(descriptors))
if(len(descriptors) < k): #如果圖片特徵數小於你要求的 k 就會出現此問題。因此在下方用 raise 處理掉即可。

raise Exception("無法辨識,因為此圖片特徵數小於 k")
voc, train_variance = kmeans(descriptors,k,1) ##出錯的程式碼

問題解決:

也許這不是問題解決,但這可以在你每次遇到問題時,你可以馬上知道是哪裡出問題,而不是還要思考很久卻還想不出方法QQ。

1
2
3
4
5
6
7
8
9
10
11
descriptors = sift[0] #圖片
for it in sift[1:]:
descriptors = np.vstack((descriptors, it))

print(len(descriptors))
if(len(descriptors) < k): #如果圖片特徵數小於你要求的 k 就會出現此問題。因此在下方用 raise 處理掉即可。

raise Exception("無法辨識,因為此圖片特徵數小於 k") #並加入此行,在遇到錯誤前
#我們先描述此錯誤並拋出 error,方便 debug

voc, train_variance = kmeans(descriptors,k,1) #出錯的程式碼

心得

…,我想了超級久,我才知道有這個問題….。之前是因為並不是每次都會發生這個問題,只有我在選取特徵數過少的圖片對 svc sift model 進行預測時才會遇到,我就以為說可能是我那份程式碼的 random.choisenp.random.choise 混淆了,才會遇到此問題QQ。

現在這樣,我就知道沒有甚麼問題了!百分之 100% 搞懂了。

題外話:有時候太底層的錯誤,真的不好找,建議可以把底層錯誤寫得更明顯點,讓使用套件的人更好排錯QQ,不過寫套件又願意分享的人真的很偉大,辛苦了!

  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: