上一篇博客中使用的是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:在電腦上跑,出現內存無法訪問的錯誤。
還未找出問題所在。