我在訓練ResNet時,驗證集打亂順序和不打亂順序得到的準確率不一樣,為什麼會有這種情況呢?
測試部分的代碼:
if (count-1) % 1400 == 0:
vset,vlabel = getdata(eng, 20) #get full validation_set
vnum_batches = vset.shape[0] // validation_size
order = np.random.choice(vset.shape[0], vnum_batches * validation_size,replace = False)
va_data_subset = vset[order,:]
va_labels_subset = vlabel[order]
loss_list = []
error_list = []
loss_list_s = []
error_list_s = []
for stepv in range(vnum_batches):
offsetv = stepv * validation_size
feed_dict_shuffle = {
x: va_data_subset[offsetv:offsetv+validation_size,:],
y: va_labels_subset[offsetv:offsetv+validation_size],
}
vloss_s, vacc_s = sess.run([loss, accuracy], feed_dict=feed_dict_shuffle)
loss_list_s.append(vloss_s)
error_list_s.append(vacc_s)
feed_dict = {
x: vset[offsetv:offsetv+validation_size,:],
y: vlabel[offsetv:offsetv+validation_size],
}
vloss, vacc = sess.run([loss, accuracy], feed_dict=feed_dict)
loss_list.append(vloss)
error_list.append(vacc)
vloss_s = np.mean(loss_list_s)
vacc_s = np.mean(error_list_s)
vloss = np.mean(loss_list)
vacc = np.mean(error_list)
打亂過的驗證集準確率會隨著訓練次數增加,基本跟訓練集的準確率相等
沒打亂過的,初始化就是20%(7分類),迭代了幾萬次準確率超不過30%,這時訓練集已經90%了,明顯看起來過擬合了
代碼看不出來,我覺得你可以考慮一下數據與標籤是否匹配的問題
原始數據存在一定的分佈規律,所以學習曲線不平滑,如果數據量夠大的話,打亂後會呈現隨機分佈,學習後更能體現樣本的共性。
舉個簡單例子,我們中學時代都參加了無數的考試,為了考試我們會做很多套卷子,每套卷子上都會有選擇題、填空題、判斷題、問答題等等類型的題型,試想一下如果我們花一個月時間天天練習選擇題,然後再花一個月時間天天練習填空題,再花一個月時間天天練習判斷題,最後花一個月時間練習問答題,短期來看每中類型的題目我們都會做得很好,但把時間維度拉長,當我們練習完問答題的時候也許做填空題的能力已經大不如前。
不管是什麼訓練網路都會出現這種問題,並不是殘差網路才會出現這個現象。
兄弟,放STACKOVERFLOW上吧,無論格式還是關注度,都比在這裡好多了...
個人覺得這個挺正常的,首先不知道你訓練的時候有沒有打亂順序,無論是訓練還是驗證都應該打亂順序的,打亂順序是為了使每一個batch的樣本特徵的分佈儘可能的與全部樣本的特徵分佈相同,舉個例子:比如說做人臉識別,有8張圖像的鼻子特徵更明顯一些,有8張圖像的嘴巴特徵更明顯一些,你用鼻子特徵更明顯的模型識別嘴巴特徵更明顯的圖像效果就會差一些,如果不進行隨機,可能就會有一個batch進入的都是鼻子特徵明顯的圖像,同時有可能有一個batch進入的是嘴巴特徵明顯的圖像,這兩個batch的驗證結果就會不一樣。感覺這是一種均勻分佈的思想
兩種可能:
1.數據不一樣
2.數據不等長,zero padding和mask沒處理好
樓上說的對,測試數據不一樣
你訓練集打亂順序了麼,還有,你測試迭代次數*測試batchsize是否大於等於測數數據量,很有可能是一次測試沒有覆蓋全部測試數據,模型本身對某些類型數據有偏移,導致多次測試時結果不一致。
請問你的問題得到解決了嗎,我也遇到了同樣的問題
各位可能沒太理解問題,我這裡再說清楚點
首先,訓練集我是打亂順序了,驗證集固定,只是順序輸入和打亂順序輸入的區別,這樣在驗證集上算出來的準確率相差很大,不太理解為什麼。
測試代碼貼了出來,感覺沒什麼問題。
推薦閱讀: