重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務
為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務
pytorch中如何使用遷移學習resnet18訓練mnist數(shù)據(jù)集,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
站在用戶的角度思考問題,與客戶深入溝通,找到敘州網(wǎng)站設計與敘州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、成都網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋敘州地區(qū)。
自己搭建cnn
模型訓練mnist
(不使用遷移學習)
https://blog.csdn.net/qq_42951560/article/details/109565625
pytorch
官方的遷移學習教程(螞蟻、蜜蜂分類)
https://blog.csdn.net/qq_42951560/article/details/109950786
今天我們嘗試在pytorch
中使用遷移學習來訓練mnist
數(shù)據(jù)集。
遷移學習需要選擇一個預訓練模型,我們這個任務也不是特別大,選擇resnet18
就行了。
resnet18
輸入的CHW
是(3, 224, 224)
mnist
數(shù)據(jù)集中單張圖片CHW
是(1, 28, 28)
所以我們需要對mnist
數(shù)據(jù)集做一下預處理:
# 預處理my_transform = transforms.Compose([transforms.Resize((224, 224)),transforms.Grayscale(3),transforms.ToTensor(),transforms.Normalize((0.1307,0.1307,0.1307), (0.3081,0.3081,0.3081)),])# 訓練集train_file = datasets.MNIST(root='./dataset/',train=True,transform=my_transform)# 測試集test_file = datasets.MNIST(root='./dataset/',train=False,transform=my_transform)
pytorch中數(shù)據(jù)增強和圖像處理的教程(torchvision.transforms)可以看我的這篇文章
resnet18
是在imagenet
上訓練的,輸出特征數(shù)是1000
;而對于mnist
來說,需要分10
類,因此要改一下全連接層的輸出。
model = models.resnet18(pretrained=True)in_features = model.fc.in_features model.fc = nn.Linear(in_features, 10)
之前設置的Adam
的學習率是1e-3
,現(xiàn)在使用了遷移學習,所以學習率調(diào)小一點,改為1e-4
。
resnet18
相較于普通的一兩層卷積網(wǎng)絡來說已經(jīng)比較深了,并且mnsit
數(shù)據(jù)集還是挺大的,總共有7萬張圖片。為了節(jié)省時間,我們使用7張GeForce GTX 1080 Ti
來訓練:
數(shù)據(jù)并行(DataParallel)
EPOCH: 01/10 STEP: 67/67 LOSS: 0.0266 ACC: 0.9940 VAL-LOSS: 0.0246 VAL-ACC: 0.9938 TOTAL-TIME: 102EPOCH: 02/10 STEP: 67/67 LOSS: 0.0141 ACC: 0.9973 VAL-LOSS: 0.0177 VAL-ACC: 0.9948 TOTAL-TIME: 80EPOCH: 03/10 STEP: 67/67 LOSS: 0.0067 ACC: 0.9990 VAL-LOSS: 0.0147 VAL-ACC: 0.9958 TOTAL-TIME: 80EPOCH: 04/10 STEP: 67/67 LOSS: 0.0042 ACC: 0.9995 VAL-LOSS: 0.0151 VAL-ACC: 0.9948 TOTAL-TIME: 80EPOCH: 05/10 STEP: 67/67 LOSS: 0.0029 ACC: 0.9997 VAL-LOSS: 0.0143 VAL-ACC: 0.9955 TOTAL-TIME: 80EPOCH: 06/10 STEP: 67/67 LOSS: 0.0019 ACC: 0.9999 VAL-LOSS: 0.0133 VAL-ACC: 0.9962 TOTAL-TIME: 80EPOCH: 07/10 STEP: 67/67 LOSS: 0.0013 ACC: 1.0000 VAL-LOSS: 0.0132 VAL-ACC: 0.9963 TOTAL-TIME: 80EPOCH: 08/10 STEP: 67/67 LOSS: 0.0008 ACC: 1.0000 VAL-LOSS: 0.0132 VAL-ACC: 0.9963 TOTAL-TIME: 79EPOCH: 09/10 STEP: 67/67 LOSS: 0.0006 ACC: 1.0000 VAL-LOSS: 0.0122 VAL-ACC: 0.9962 TOTAL-TIME: 79EPOCH: 10/10 STEP: 67/67 LOSS: 0.0005 ACC: 1.0000 VAL-LOSS: 0.0131 VAL-ACC: 0.9959 TOTAL-TIME: 79| BEST-MODEL | EPOCH: 07/10 STEP: 67/67 LOSS: 0.0013 ACC: 1.0000 VAL-LOSS: 0.0132 VAL-ACC: 0.9963
訓練10輪,最佳的模型出現(xiàn)在第7輪,最大準確率是0.9963
。在這篇文章中,我們自己搭了兩層的卷積,也訓練了10輪,最大準確率是0.9923
。準確率提高了0.0040
,我們要知道測試集共有1萬張圖片,也就是多預測對了40張圖片,已經(jīng)提升很高。當然,因為網(wǎng)絡變深了,所以訓練花費的時間也就增加了。
看完上述內(nèi)容,你們掌握pytorch中如何使用遷移學習resnet18訓練mnist數(shù)據(jù)集的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!