上一篇博客中使用的是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:在电脑上跑,出现内存无法访问的错误。
个人认为是内存泄露,不过没有找出问题所在。
热门工具 换一换