上一篇博客中使用的是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:在电脑上跑,出现内存无法访问的错误。

个人认为是内存泄露,不过没有找出问题所在。

 

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信