当前位置: 首页 > wzjs >正文

东莞哪家公司做网站比较好协会网站建设计划

东莞哪家公司做网站比较好,协会网站建设计划,医疗协助平台网站建设方案,安全文化企业示范企业评价标准目录 前言冻结参数的原理模型参数全部冻结模型参数部分冻结冻结预训练模型部分层并修改最后一层 优化器优化器的作用直接传入参数生成器或参数列表传入参数组字典列表 前言 在使用预训练模型的时候能因为某些原因无需对模型的参数进行全部更新,这时候我们可能希望将…

目录

  • 前言
  • 冻结参数的原理
    • 模型参数全部冻结
    • 模型参数部分冻结
    • 冻结预训练模型部分层并修改最后一层
  • 优化器
    • 优化器的作用
    • 直接传入参数生成器或参数列表
    • 传入参数组字典列表

前言

在使用预训练模型的时候能因为某些原因无需对模型的参数进行全部更新,这时候我们可能希望将其部分参数或者全部参数进行冻结。这里简单总结一些冻结模型参数的方法。

冻结参数的原理

requires_grad 属性的作用
在 PyTorch 中,每个 torch.Tensor 都有一个 requires_grad 属性,这个属性决定了该张量在反向传播过程中是否需要计算梯度。当 requires_gradTrue 时,PyTorch 会跟踪该张量上的所有操作,并在调用 backward() 方法时计算其梯度;当 requires_gradFalse 时,PyTorch 不会跟踪该张量的操作,也就不会计算其梯度。
在神经网络中,模型的参数本质上就是 torch.Tensor 对象,通过设置参数的 requires_grad 属性,我们可以控制哪些参数参与训练(即计算梯度并更新),哪些参数不参与训练(即冻结)。

模型参数全部冻结

import torch
import torch.nn as nnmodel = nn.Sequential(nn.Linear(10, 20),nn.ReLU(),nn.Linear(20, 1)
)for param in model.parameters():param.requires_grad = False
  • 原理:model.parameters() 是一个生成器,返回的是一个生成器对象,它会迭代返回模型中所有需要计算梯度的参数(即 requires_grad 为 True 的参数)。通过遍历这个生成器,将每个参数的 requires_grad 属性设置为 False,就可以实现整体冻结模型参数的目的。

模型参数部分冻结

import torch
import torch.nn as nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.conv1 = nn.Conv2d(3, 16, kernel_size=3)self.fc1 = nn.Linear(16 * 10 * 10, 10)def forward(self, x):x = self.conv1(x)x = x.view(-1, 16 * 10 * 10)x = self.fc1(x)return xmodel = MyModel()
for name, param in model.named_parameters():if 'conv' in name:param.requires_grad = False
  • 原理:model.named_parameters() 也是一个生成器,返回的也是一个生成器对象,每次迭代返回一个元组 (name, param),其中 name 是参数的名称(字符串类型),param 是对应的参数张量(torch.Tensor 类型)。通过检查参数名称中是否包含特定的字符串(如 ‘conv’),我们可以筛选出需要冻结的参数,并将其 requires_grad 属性设置为 False

冻结预训练模型部分层并修改最后一层

from torchvision.models import resnet18
import torch.nn as nnmodel = resnet18(pretrained=True)for param in model.parameters():param.requires_grad = Falsenum_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 1)
  • 原理:首先,通过遍历 model.parameters() 并将所有参数的 requires_grad 属性设置为 False,冻结了整个预训练模型的参数。然后,我们获取原最后一层全连接层的输入特征数 num_ftrs,并创建一个新的全连接层 nn.Linear(num_ftrs, 1) 替换原最后一层。新创建的层的参数的 requires_grad 属性默认是 True,因此只有这一层的参数会在训练时计算梯度并更新。

优化器

上面介绍了怎么冻结模型参数,冻结参数之后需要对模型的参数进行优化,常见的有两种参数方式,下面也一并介绍下。

优化器的作用

优化器的作用是根据计算得到的梯度来更新模型的参数,以最小化损失函数。在 PyTorch 中,常见的优化器有 SGD、Adam
等,它们都需要传入需要更新的参数。

直接传入参数生成器或参数列表

import torch
import torch.nn as nn
import torch.optim as optimmodel = nn.Sequential(nn.Linear(10, 20),nn.ReLU(),nn.Linear(20, 1)
)optimizer = optim.SGD(model[-1].parameters(), lr=0.001, momentum=0.9)
  • 原理:当我们直接将参数生成器(如 model[-1].parameters())或参数列表传递给优化器时,优化器会将这些参数视为一组,并使用相同的优化超参数(如学习率、动量等)来更新这些参数。在这个例子中,我们只传递了模型最后一层的参数,因此优化器只会更新最后一层的参数。
  • 注意:model[-1].parameters() 返回一个生成器对象,它会迭代返回模型最后一层的所有参数。

传入参数组字典列表

import torch
import torch.nn as nn
import torch.optim as optimmodel = nn.Sequential(nn.Linear(10, 20),nn.ReLU(),nn.Linear(20, 1)
)first_layer_params = list(model[0].parameters())
last_layer_params = list(model[2].parameters())param_list = [{'params': first_layer_params, 'lr': 0.0001},{'params': last_layer_params, 'lr': 0.001}
]optimizer = optim.Adam(param_list)
  • 原理:当我们需要为不同的参数组设置不同的优化超参数时,可以传入一个包含参数组字典的列表。每个字典代表一个参数组,其中 ‘params’ 键对应的值是该参数组的参数列表或参数生成器,还可以包含其他键值对来指定该参数组的特定超参数(如学习率、权重衰减等)。优化器会根据这些参数组的设置,对不同的参数组使用不同的超参数进行优化。
http://www.dtcms.com/wzjs/782054.html

相关文章:

  • 做一年的网站能赚多少钱学校网站建设先进个人荣誉
  • 免费做电子邀请涵的网站电子商务网站建设维护有没有欺骗
  • 做网站用php还是nodees网站建设
  • 做淘宝网站买个模版可以吗晋江网站建设费用
  • 商城网站建设公司招聘全国建筑四库一平台查询个人信息
  • 网站建设方案策划书ppt最好的餐饮设计网站建设
  • 网站制作网站开发免费制作图片
  • 上饶做网站建设成都网站改版优化
  • jsp简述网站开发流程图门户网站有哪些局限性
  • 电影下载网站如何做wordpress主题模版
  • 网站开发的实践报告旅游网站开发项目策划书
  • 购物网站html网站服务器 虚拟主机
  • 我的网站刚换了一个模板收录很多就是没排名自适应网站有哪些
  • 大连网络建站模板免费收录网提交
  • 上海做公司网站多少钱哪里做企业网站
  • 做期货网站违法的吗成都市住房和建设局官网
  • dede网站怎么更换模板个人博客自我介绍
  • 建筑类网站的推荐理由wordpress后台502
  • 网站项目下载wordpress 添加订阅按钮
  • 站内推广策略免费网站建设力荐 186一6159一6345绘政正规
  • 万城建设网站新钥匙建站
  • 上海网站建设电话做电影网站免责声明有用吗
  • 潍坊 餐饮网站建设旅行社ota平台运营做些什么
  • 网站备案更换主体网站广告推广哪家好
  • 品牌网站制作哪家好企业网站源码 html5+xml
  • 创建网站平台要多少钱wordpress文字logo
  • 一级做爰片a视频网站电子商城网站建设流程
  • 淄博公司制作网站有哪些怎样网站制作设计
  • 怎么做网站网站的代理wordpress怎么播放视频
  • 大公司做网站装饰行业做网站