首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >pytorch学习笔记(十一):fine-tune 预训练的模型

pytorch学习笔记(十一):fine-tune 预训练的模型

作者头像
ke1th
发布于 2018-01-02 03:17:27
发布于 2018-01-02 03:17:27
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

torchvision 中包含了很多预训练好的模型,这样就使得 fine-tune 非常容易。本文主要介绍如何 fine-tune torchvision 中预训练好的模型。

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install torchvision

如何 fine-tune

以 resnet18 为例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torchvision import models
from torch import nn
from torch import optim

resnet_model = models.resnet18(pretrained=True) 
# pretrained 设置为 True,会自动下载模型 所对应权重,并加载到模型中
# 也可以自己下载 权重,然后 load 到 模型中,源码中有 权重的地址。

# 假设 我们的 分类任务只需要 分 100 类,那么我们应该做的是
# 1. 查看 resnet 的源码
# 2. 看最后一层的 名字是啥 (在 resnet 里是 self.fc = nn.Linear(512 * block.expansion, num_classes))
# 3. 在外面替换掉这个层
resnet_model.fc= nn.Linear(in_features=..., out_features=100)

# 这样就 哦了,修改后的模型除了输出层的参数是 随机初始化的,其他层都是用预训练的参数初始化的。

# 如果只想训练 最后一层的话,应该做的是:
# 1. 将其它层的参数 requires_grad 设置为 False
# 2. 构建一个 optimizer, optimizer 管理的参数只有最后一层的参数
# 3. 然后 backward, step 就可以了

# 这一步可以节省大量的时间,因为多数的参数不需要计算梯度
for para in list(resnet_model.parameters())[:-2]:
    para.requires_grad=False 

optimizer = optim.SGD(params=[resnet_model.fc.weight, resnet_model.fc.bias], lr=1e-3)

...

为什么

这里介绍下 运行resnet_model.fc= nn.Linear(in_features=..., out_features=100)时 框架内发生了什么

这时应该看 nn.Module 源码的 __setattr__ 部分,因为 setattr 时都会调用这个方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def __setattr__(self, name, value):
    def remove_from(*dicts):
        for d in dicts:
            if name in d:
                del d[name]

首先映入眼帘就是 remove_from 这个函数,这个函数的目的就是,如果出现了 同名的属性,就将旧的属性移除。 用刚才举的例子就是:

  • 预训练的模型中 有个 名字叫fc 的 Module。
  • 在类定义外,我们 将另一个 Module 重新 赋值给了 fc
  • 类定义内的 fc 对应的 Module 就会从 模型中 删除。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pytorch 神经网络训练过程
文章目录 1. 定义模型 1.1 绘制模型 1.2 模型参数 2. 前向传播 3. 反向传播 4. 计算损失 5. 更新参数 6. 完整简洁代码 参考 http://pytorch123.com/ 1. 定义模型 import torch import torch.nn as nn import torch.nn.functional as F class Net_model(nn.Module): def __init__(self): super(Net_model, se
Michael阿明
2021/02/19
4620
Pytorch 神经网络训练过程
深度学习基础:4.Pytorch搭建基础网络模型
使用Pytorch之前,首先要理清楚Pytorch基本架构。 Pytorch的核心库是torch,根据不同领域细分可以分成计算机视觉、自然语言处理和语音处理,这三个领域分别有自己对应的库,即torchvision、torchtext、torchaudio。
zstar
2022/07/14
1K0
深度学习基础:4.Pytorch搭建基础网络模型
从零开始学Pytorch(十六)之模型微调
在前面的一些章节中,我们介绍了如何在只有6万张图像的Fashion-MNIST训练数据集上训练模型。我们还描述了学术界当下使用最广泛的大规模图像数据集ImageNet,它有超过1,000万的图像和1,000类的物体。然而,我们平常接触到数据集的规模通常在这两者之间。
墨明棋妙27
2022/09/23
7690
【AI大模型】训练Al大模型
应用领域 首先来谈一谈大模型的·成就 大模型已经在许多应用领域取得了显著的成果,包括:
洁洁
2023/10/10
1.1K0
【AI大模型】训练Al大模型
Pytorch预训练模型以及修改
pytorch中自带几种常用的深度学习网络预训练模型,torchvision.models包中包含alexnet、densenet、inception、resnet、squeezenet、vgg等常用网络结构,并且提供了预训练模型,可通过调用来读取网络结构和预训练模型(模型参数)。往往为了加快学习进度,训练的初期直接加载pretrain模型中预先训练好的参数。加载model如下所示:
狼啸风云
2020/05/06
20.7K0
PyTorch 60分钟入门系列之神经网络
前面的学习大致了解了autograd,nn依赖于autograd来定义模型并进行求导。一个nn.Module包含多个神经网络层,以及一个forward(input)方法来返回output。
AI异构
2020/07/29
5030
PyTorch 60分钟入门系列之神经网络
基于卷积神经网络的垃圾分类
自今年7月1日起,上海市将正式实施 《上海市生活垃圾管理条例》。垃圾分类,看似是微不足道的“小事”,实则关系到13亿多人生活环境的改善,理应大力提倡。
云微
2023/02/11
1K0
基于卷积神经网络的垃圾分类
PyTorch入门:(五)模型的搭建
上面演示了神经网络的创建和使用,可以发现直接使用 "对象名()" 的方式就能调用这个网络,具体原理应该是通过继承的Module中的 __call__ 实现的。
Here_SDUT
2022/08/08
1.4K0
PyTorch入门:(五)模型的搭建
PyTorch ImageNet 基于预训练六大常用图片分类模型的实战
在本教程中,我们将深入探讨如何对 torchvision 模型进行微调和特征提取,所有这些模型都已经预先在1000类的Imagenet数据集上训练完成。 本教程将深入介绍如何使用几个现代的CNN架构,并将直观展示如何微调任意的PyTorch模型。由于每个模型架构是有差异的,因此没有 可以在所有场景中使用的微调代码样板。然而,研究人员必须查看现有架构并对每个模型进行自定义调整。
磐创AI
2019/09/19
5.3K0
PyTorch ImageNet 基于预训练六大常用图片分类模型的实战
机器学习中训练和验证指标曲线图能告诉我们什么?
我们在训练和验证模型时都会将训练指标保存成起来制作成图表,这样可以在结束后进行查看和分析,但是你真的了解这些指标的图表的含义吗?
deephub
2022/11/11
9880
机器学习中训练和验证指标曲线图能告诉我们什么?
教程 | 从头开始了解PyTorch的简单实现
选自GitHub 机器之心编译 参与:路 本教程展示了如何从了解张量开始到使用 PyTorch 训练简单的神经网络,是非常基础的 PyTorch 入门资源。PyTorch 建立在 Python 和 Torch 库之上,并提供了一种类似 Numpy 的抽象方法来表征张量(或多维数组),它还能利用 GPU 来提升性能。本教程的代码并不完整,详情请查看原 Jupyter Notebook 文档。 PyTorch 使入门深度学习变得简单,即使你这方面的背景知识不太充足。至少,知道多层神经网络模型可视为由权重连接的节
机器之心
2018/05/08
3K0
教程 | 从头开始了解PyTorch的简单实现
pytorch和tensorflow的爱恨情仇之定义可训练的参数
之前我们就已经了解了pytorch和tensorflow中的变量,本节我们深入了解可训练的参数-变量
西西嘛呦
2020/10/10
8870
pytorch和tensorflow的爱恨情仇之定义可训练的参数
【PyTorch入门】使用PyTorch构建一个简单的图像分类模型
机器学习司猫白
2025/01/21
3320
【PyTorch入门】使用PyTorch构建一个简单的图像分类模型
通过LoRA训练指定风格图片
在当今的图像生成领域,能够生成具有特定风格的图片变得越来越重要。Low-Rank Adaptation (LoRA) 是一种轻量化的适配技术,能够在保持原有模型性能的同时,快速适应特定风格的需求。本文将详细介绍如何通过LoRA来训练具有特定风格的图片,并为您提供一个全面的指南。
IT蜗壳-Tango
2024/08/11
5750
【机器学习实战】从零开始深度学习(通过GPU服务器进行深度学习)
0.1. 利用GPU加速深度学习   疫情期间没有办法用实验室的电脑来跑模型,用领取的腾讯云实例来弄刚刚好。发现如果没有GPU来跑的话真的是太慢了,非常推荐利用GPU加速深度学习的训练速度。     如果采用GPU的话,训练函数train_model(*)中数据的输入要改变一下,也就是需要将数据放在GPU上
汉堡888
2022/05/03
8.8K0
【机器学习实战】从零开始深度学习(通过GPU服务器进行深度学习)
从源到目标:深度学习中的迁移学习与领域自适应实践
深度学习已经在多个领域取得了显著的突破,尤其是在计算机视觉、自然语言处理和语音识别等任务中,表现出了非常强大的能力。然而,训练深度学习模型需要大量的标注数据,这在许多应用中可能难以实现,尤其是在数据采集困难或者高标注成本的场景中。迁移学习和领域自适应正是为了解决这一问题而出现的技术,它们通过从源任务中迁移知识,帮助模型在目标任务中快速适应并提高性能。
云边有个稻草人
2025/03/03
5170
PyTorch的简单实现
PyTorch 的关键数据结构是张量,即多维数组。其功能与 NumPy 的 ndarray 对象类似,如下我们可以使用 torch.Tensor() 创建张量。如果你需要一个兼容 NumPy 的表征,或者你想从现有的 NumPy 对象中创建一个 PyTorch 张量,那么就很简单了。
代码的路
2022/06/18
2K0
PyTorch的简单实现
【深度学习】翻译:60分钟入门PyTorch(三)——神经网络
原文翻译自:Deep Learning with PyTorch: A 60 Minute Blitz
黄博的机器学习圈子
2021/02/12
7640
【猫狗数据集】使用预训练的resnet18模型
链接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw 提取码:2xq4
西西嘛呦
2020/08/26
3.1K0
【猫狗数据集】使用预训练的resnet18模型
PyTorch与深度学习
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用。
正在走向自律
2024/12/18
1550
PyTorch与深度学习
相关推荐
Pytorch 神经网络训练过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档