pytorch 卷積神經網路(alexnet)訓練中問題以及解決辦法(更新中)
阿新 • • 發佈:2019-01-29
上一篇部落格中使用的是pytorch中的預訓練模型效果較好。https://blog.csdn.net/pc1022/article/details/80440913這篇部落格是自己訓練 卷積神經網路,最開始以簡單的alexnet進行訓練。
對alexnet程式碼有三個版本的:
第一個版本是自己完全新建一個alexnet函式。
第二個版本是:
model = models.alexnet(pretrained=False, num_classes=2)
第三個版本是:
alexnet_model = models.alexnet(pretrained=False) alexnet_model.classifier = nn.Sequential( nn.Dropout(), nn.Linear(256 * 6 * 6, 4096), nn.ReLU(inplace=True), nn.Dropout(), nn.Linear(4096, 4096), nn.ReLU(inplace=True), nn.Linear(4096, 2), ) model = alexnet_model
目前還不懂這三個版本的區別。
但是從結果上來看,版本一和三可以訓練出來效果,達到90%分別是130個epoch和160個epoch左右。
自己想想這個結果是可以通過微調學習率(版本一和三的學習率是固定的0.001),是可以減少epoch的。
針對版本二的問題,以程式碼alexnet_init.py會出現以下兩個問題:
alexnet_init.py我加入了模型引數初始化:
def weignts_init(model): if isinstance(model, nn.Conv2d): init.normal(model.weight.data) init.normal(model.bias.data) elif isinstance(model, nn.BatchNorm2d): init.normal(model.weight.data) init.normal(model.bias.data)
還有加入學習率變化:
cheduler = torch.optim.lr_scheduler.StepLR(optimizer,
step_size=step_size, gamma=factor, last_epoch=-1)
問題1:從一開始loss值沒有變化過(變化幅度很小)。
解決嘗試:修改學習率。 嘗試過很多種學習率的修改,基本把pytorch修改學習率的函式都使用了。
函式如下:
(1) 這是固定多少個epoch修改一次學習率。
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=step_size, gamma=factor, last_epoch=-1) step_size = 2,factor = 0.1
問題2:在電腦上跑,出現記憶體無法訪問的錯誤。
還未找出問題所在。