pytorch学习笔记(3) 动态调整学习率和如何提取CNN中间层的输出

pytorch学习笔记(3) 动态调整学习率和hook函数的使用.

动态调整学习率
def adjust_learning_rate(optimizer, epoch, params):
    lr = params["LEARNING_RATE"] * (0.1 **(epoch // 20))
    for param_group in optimizer.param_groups:
        # print("params", param_group)
        param_group['lr'] = lr

这个函数能够根据epoch动态的调整学习率,使用逻辑为:

optimizer = optim.SGD(model.parameters(), lr = params["learning_rate"], ...)
for i in range(epochs):
    adjust_learning_rate(optimizer, i, params)
    train(...)
如何提取CNN中间层的输出

使用场景为迁移学习. 针对不同的领域有不同的场景. 通常来说如果需要解决的问题数据集非常少,不足以训练一个大型神经网络,如果想要继续使用神经网络的特征提取能力,那么可以考虑微调一个已经训练好的模型.

  • 比如说先将网络在大型的数据集ImageNet上训练, 然后再用只包含猫和狗的小型数据集进行微调. 用来识别猫狗
  • 或者使用多任务的数据集来训练神经网络, 然后将这个迁移到其他与源任务相关的数据集用来做特征提取器,提取出来的特征用SVM这种高级分类器来进行分类, 这就是迁移学习.

今天笔者将在这里总结上面的第二个场景,如果使用已经训练好的网络模型进行任意卷积层的特征提取!

一共有三种方法.

  • 手动实现forward函数,也就是PyTorch论坛上提到的.
  • 使用hook函数勾取某一层的输出.
  • 在需要提取特征的地方定义一个变量.
手动实现forward函数

代码逻辑如下:

class Extract():
    def __init__(self, **params)
        self.model_path = params["model_path"] # 模型保存地址
        self.model = self.load_model(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值