- PyTorch中有modelzoo还有一些训练好的权重参数可以直接使用,在迁移学习中就很方便
torchvision.models - PyTorch中文文档 (pytorch-cn.readthedocs.io)
看看上面中文文档就知道怎么调用模型了,要使用 torchvision.models 这个包
查看文档,看看里面存放了什么相应的模型。还有调用相应模型训练好的参数pretrained=True
下图是调用了models里面的resnet18()模型
设定模型参数是否需要更改:
上面这个函数就是设定导入的模型参数固定不再更新,那个requires_grad设置为True就是要更新。自己可以从模型层中选出相应的进行更新或者不更新,要注意好自己设定的层。
上面的示例是直接使用提供的模型参数,并且不再进行参数的更新,但是从上面的网络结构来看fc是你的输出层,我们是迁移学习调用别人的模型,但是我们的类别不同,假设我们是要完成一个102类别分类任务,从上面的fc看out_features=1000他的特征输出有1000个类别我们要将最后一层输出修改了。
我们需要模型的最后一层输入记录,不能改变输出层外的网络结构,就是取出fc层的in_features,最后将fc层替换层我们的连接层,输入还是为in_features,只是out_features被替换为了我们自己的102个分类。这样就完成模型网络结构的替换。
这里是否对于迁移的模型参数权重进行更新好像有两种调用方法,但是其实是一种:
一个是model.parameters()像上上张图中的示例一样去遍历调用param.requires_grad去设定是否需要修改。使用.parameters()是在不管模型结构的名字的情况下。如果需要查看网络层的名字就使用.named_parameters()下图这种方式:
在这里好像是查看自己设定改变的层的名字的。
同理,去更新所有层的权重参数:
前面几篇写了书写模块的格式,再将训练模块写好,把调用修改的模型放入就行了。
或者修改训练模块直接改写成测试模块直接测试也行,下方是取数据中一个批次的数据,取完后丢入模型进行测试效果。