Pytorch 的迁移学习的理解

个人理解,迁移学习可以分为三类:

第一类:以训练好的模型参数为基础,对所有参数进行继续优化.

            即,先在别的训练数据集上训练模型,达到一定训练标准之后,用当前的数据集继续进行训练.

第二类:将已经训练好的模型当作特征提取器,仅对模型中的部分层的参数进行优化(或继续优化).

            此时,在加载模型后,需要通过对模型的所有参数的"requires_grad"属性进行设置,使其变成不再被优化的参数,即设置模型的所有参数的"requires_grad=False"

            然后,指定需要训练的层的参数为"requires_grad=True",然后进行训练.

             这一类迁移常见的情况是对模型最后部分的全连接层进行重新训练.除了对模型最后部分的全连接层进行重新训练之外,还可以重新定义最后的全连接层(或其它结构).

第三类:是将训练好的模型完全不动,仅用其输出作为新的模型的输入,此时的pretrained_model被完全当作特征提取器.

ps:模型参数的"requires_grad"属性的改变是容易的,相对难的是如何准确地获取需要修改的参数.这需要自己对pretrained_model的网络结构的熟悉与理解,然后才能调用相关参数.

----------------------------------------------------------------------------------------------------------------------

在pytorch中,实现迁移学习可按以下伪代码执行:

其中2) 3) 6)为关键步骤

伪代码:

1) new_model = pretrained_model  # 加载已有模型
2) for param in new_model.parameters():  # 将已有模型的已有参数设置为不可修改
        param.requires_grad = False
3) new_model.fc = nn.Linear(dims_input_feature,dims_output_feature)  
    # 重新构造/修改某一层的网络结构
4) new_model = new_model.to(device)#将新的模型放到device上(如GPU上)
5) criterion = nn.CrossEntropyLoss() # 定义损失函数
6) optimizer_new_model = optim.SGD(new_model.fc.parameters(),lr=0.001,momentum=0.9)
    #定义优化器,在定义优化器的时候指定了需要优化的参数(new_model.fc.parameters())
7) new_model = train_model(new_model,criterion,optimizer_new_model,num_epochs=25)
    #训练模型.train_model是自己定义的训练函数

疑问:如何获取某一层上的所有参数

解答: 用 model.fc.parameters(),其中fc可以是任意一层

疑问: fc是如何定义的?"fc"是在定义网络结构时人为给定的"层的名称"吗?如果是这样,那就可以直接用"层的名称"直接调用该层了,确实很方便,那么,如何给某一层网络"命名"呢?

解答:在pytorch中与在tensorflow中在命名网络层时策略是不一样的.在tensorflow中需要有专门的命令语句来对某一层或某几层进行命名,并通过命名来管理和调用相关的层的相关参数.

    而在pytorch中不是这样的,pytorch是通过定义一个nn.Module的子类来定义网络结构以及前向算法.

    在pytorch中每种网络结构都已经有了其对应的类,如:torch.nn.Conv2d,torch.nn.Linear等,都已经被定义成一个类.

    因此自己定义的网络的每一层都会被定义成对应结构类的一个实例化对象.

    因此,在pytorch中,网络结构的每一层是以类对象的形式存在.可以在自己的网络结构的类的__init__函数中,声明所有的需要用到的层,当作自己的网络结构类的一个属性(元素),

    因此,pytorch调用每一层的技术手段是:用类对象调用类的属性元素的方法.不是通过string命名空间的方法.

参考:https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html

 

猜你喜欢

转载自blog.csdn.net/Strive_For_Future/article/details/83214515