iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
AI & Data

菜鳥工程師第一個電腦視覺(CV)專案-農作物影像辨識競賽系列 第 26

D26-競賽資料集運算Pretrained_AlexNet_6th

  • 分享至 

  • xImage
  •  

Part0:前言

今天起個早8:00開車前往台中參加同齡堂姊的訂婚家宴,出門前發現昨晚訓練結果居然還沒跑完,想一想好像也暫時不能做啥,決定就放著繼續跑。晚上回到家已經19:00真的累~但看到準新娘和準新郎幸福的樣子,覺得心生羨慕呀~~ 祝福堂姊新婚愉快幸福 ???


Part1:今日目標

1.確認昨天AlexNet訓練結果
2.新學習: 模型儲存&模型測試(Test)


Part2:內容

1.確認昨天AlexNet訓練結果

(1)經過一個晚上約8小時的訓練,以為會跑完10個Epoch,殊不知竟然只完成一個(暈~~
原來Train_dat共有7162個batch,所以跑一輪訓練(1個Epoch)就要約8個小時。因為若要訓練完10個Epoch,要約3.5天實在不能接受,這樣鐵人賽就直接完結了。最終跑到第3個Epoch就終止訓練,並將模型存起來,進行第二部分的測試。

  • 由上圖可知,在第1個Epoch和第2個Epoch的驗證集準確率分別為32.4%和33.8%。以上結果是凍結AlexNet預訓練模型所有層數(除了最後一層的分類器外),最後一層分類器改成輸出大小為33,以對應競賽資料共有33類的影像分類任務(下圖)。

2.新學習: 模型儲存&模型測試(Test)

(1)模型儲存
方法1:只保存模型參數

# model_alexnet為經過遷移式學習的AlexNet模型
AlexNet_path_state_dict = str(output_path + "./ALL_AlexNet_model_dict.pkl")
torch.save(model_alexnet.state_dict(), AlexNet_path_state_dict)

方法2:保存整個模型(耗費內存)

AlexNet_path_model = str(output_path + "./ALL_AlexNet_model.pkl")
torch.save(model_alexnet, AlexNet_path_model)

(2)模型測試(Test)

  • 定義測試函數(使用測試集進行模型表現測試): 只使用共10個batch的test_loader(共有896個batch)
def test(model, test_loader, optimizer):
    print(model)
    model.eval()
    test_loss = 0
    correct = 0
    with torch.no_grad():
        print(len(test_loader))
        for i, data in islice(enumerate(test_loader),0,10):  # 只用89個batch來測試
        #for i, data in enumerate(test_loader, 0):  # 所有batch都用來測試
            #print(i)
            x, y = data
            x = x.cuda()
            y = y.cuda()
            optimizer.zero_grad()
            y_hat = model(x)
            test_loss += criterion(y_hat, y).item()
            pred = y_hat.max(1, keepdim=True)[1]
            correct += pred.eq(y.view_as(pred)).sum().item()
        test_loss /= (i+1)
        len_test_data = batch_size*(i+1)
        print("Test_data用來測試的batxh數量: {}".format(i+1))
        print("Lens of test_data: {}".format(len_test_data))
        print('Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
            test_loss, correct, len_test_data, 100. * correct / len_test_data))
  • 載入前述儲存的模型(已進行遷移式學習的AlexNet模型)
if test_flag:
    model = torch.load(save_model_path, map_location='cuda:0')  # 載入儲存的模型
    test(model, test_loader, optimizer)
    model.eval()
  • 結果如下圖: 在測試集準確率為27% (只使用100張圖片)

Part3:專案進度

完成AlexNet設定。

Part4:下一步

研究進階設定: early stopping, checkpoint訓練中暫存機制、選用之前提及更輕量型&準確率更高的模型進行訓練。


心得小語:
今天時間蠻短暫的,但還是盡力的做學習和統整,明天又是新的一周,不論是工作還是鐵人賽都要繼續加油&精進!
今日工時50min*2

愛人和被人愛著都是人生最大的幸福
To love and to be loved is the greatest happiness of existence.


上一篇
D25-競賽資料集運算Pretrained_AlexNet_5th
下一篇
D27-競賽資料集運算Pretrained_EfficientNet_1st
系列文
菜鳥工程師第一個電腦視覺(CV)專案-農作物影像辨識競賽32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言