Resnet 迁移学习记录

本文介绍了如何使用预训练的Resnet模型来提高CNN网络的训练效率。通过加载Resnet18的预训练权重,构建了一个新的网络结构,并在图片分类任务上进行训练。在仅仅跑了1500个样本的少量迭代后,模型就显示出快速的收敛性和良好的性能,验证集准确率达到了78.19%。这种方法显著减少了训练时间和资源消耗。
摘要由CSDN通过智能技术生成

在实际应用中,cnn网络的训练是很繁琐且浪费时间的,这时候我们一般会去选择加载网上已经训练得很完善的网络作为自己的cnn网络层,下面例子为使用Resnet预训练模型来做自己的图片分类:

# 网络定义 
class Resnet(nn.Module):

    def __init__(self):
        super(Resnet, self).__init__()
        pretrained_net = torchvision.models.resnet18(pretrained=True)
        model =nn.Sequential(*list(pretrained_net.children())[:-1])
        self.model = model
        self.Linear = nn. Linear(in_features=512, out_features=10, bias=True)
    def forward(self, x):
        x=self.model(x)
        # 这里有个bug,在下载的预训练网络最后一层中,只显示了线性层,但是如果你直接添加一个线性层,会报错,原因为维度的不一致,需要view到适配维度。
        x = x.view(-1, 512)
        x=self.Linear(x)
        return x
X = torch.rand(size=(1, 3, 224, 224))
model=Resnet()
print(model)
print(model(X).shape)

然后进行训练,对比于之前的自己构建的网络重新训练来看,会发现收敛特别快,且很容易得到自己想要的ACC。

[1,   500] loss: 1.301
train_correct=
0.582
train time: 26.080318927764893
Accuracy on test set: 74.03  %
[1,  1000] loss: 0.772
train_correct=
0.7533333333333333
train time: 93.63580584526062
Accuracy on test set: 75.72  %
[1,  1500] loss: 0.697
train_correct=
0.7773333333333333
train time: 159.9850172996521
Accuracy on test set: 78.19  %

这里只跑了1500x3张图,连1/10个epoch都没跑到,但效果已经很强大了,且收敛得非常快速。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值