AI_参数更新
预训练和微调
pre_training 预训练 预先训练一个模型--或者预先训练模型的过程
Fine_tuning 微调 微调参数--将预训练的模型作用于自己的数据集,并使参数适应自己数据集的过程
冻结模型参数
精度问题的直接现象一般体现在loss(模型损失值)和metrics(模型度量指标)
在MindSpore中,冻结权重可以通过控制传入优化器的在MindSpore中,冻结权重可以通过控制传入优化器的params参数来
评测: metrics一般表现为模型的accuracy、precision等
选择模型家族,定义损失函数量化预测误差,通过优化算法找到最小损失的最优模型参数。
损失函数位于机器学习模型的向前传播和向后传播之间。
在向前传播阶段,模型根据输入特征生成预测值。
损失函数接收这些预测值,并计算与真实值之间的差异。
这个差异随后被用于向后传播阶段,以更新模型的参数并减少未来的预测误差。
优化器与模型参数和损失函数
一整个网络看做一个param_groups,params参数的赋值为model.parameters()。
优化器(Optimizer)是与模型参数(params)和损失函数(loss function)
loss.backward()和 optimizer.zero_grad() 以及optimizer.step()
torch里面有自动求导函数 xTensor.grad 对象里面。
进来一个batch的数据,先将梯度归零,计算一次梯度,更新一次网络
loss = criterion(output, labels)
将梯度归零(optimizer.zero_grad()),然后反向传播计算得到每个参数的梯度值(loss.backward()),
最后通过梯度下降执行一步参数更新(optimizer.step())
for i, (inputs, labels) in enumerate(train_loader):
# forward
output= model(inputs)
loss = criterion(output, labels)
# backward 清空模型参数的梯度,以确保每次迭代的梯度计算都是基于当前小批量数据的,而不会受之前迭代的影响
optimizer.zero_grad()
loss.backward()
# gardient descent or adam step
optimizer.step()
scheduler.step() 通常在每个 epoch 结束时调用,以更新学习率-每个 epoch 结束时调用,
"optimizer"(优化器)是指一种用于优化模型参数以最小化损失函数的算法或工具
Optimizer类在实例化时会在构造函数中创建一个param_groups列表
param_groups=[param_group1,param_group2,param_group3,...,param_group_num_groups]
列表中有num_groups=len(param_groups)param_group字典
每个 param_group 包含了 [‘params’, ‘lr’, ‘momentum’, ‘dampening’, ‘weight_decay’, ‘nesterov’] 这6组键值对
param_group1["params"] 参数是一个torch.nn.parameter.Parameter对象
torch.tensor是autograd包的基础类,如果你设置tensor的requires_grads为True,就会开始跟踪这个tensor上面的所有运算
tensor的梯度将会累加到它的.grad属性里面去
损失函数loss是由模型的所有权重w经过一系列运算得到的,若某个w的requires_grads为True,
则w的所有上层参数(后面层的权重w)的.grad_fn属性中就保存了对应的运算,然后在使用loss.backward()后,
会一层层的反向传播计算每个w的梯度值,并保存到该w的.grad属性中。梯度是tensor.backward()方法产生的
optimizer只负责通过梯度下降进行优化,而不负责产生梯度,梯度是tensor.backward()方法产生的
模型参数的更新通常依赖于损失函数的梯度
通常是将当前参数减去学习率乘以参数的梯度
参数管理
访问参数,用于调试、诊断和可视化;
参数初始化;
在不同模型组件间共享参数
参数是复合的对象,包含值、梯度和额外信息:模型参数包含梯度
named_parameters()
损失函数(Loss Function)作为神经网络中的一个评估指标,用于衡量神经网络输出与真实标签之间的差异或误差
optimizer关注的是最小化目标,DeepLearning则关注在给定有限数据量的情况下寻找合适的模型
优化算法的目标函数通常是基于训练数据集的损失函数,因此优化的目标是减少训练误差。
但是,深度学习(或更广义地说,统计推断)的目标是减少泛化误差
dropout 常常用于抑制过拟合
model = Net()
pytorch 构建神经网络的时候,训练过程中会在程序上方添加一句 model.train( ),作用是启用 batch normalization 和 dropout
BN层(Batch Normalization)和 Dropout
model.eval( )的作用是不启用 Batch Normalization 和 Dropout
在 model(test) 之前,需要加上model.eval( ),
否则的话,有输入数据,即使不训练,它也会改变权值。这是 model 中含有 BN 层和 Dropout 所带来的的性质
框架的延后初始化(defers initialization), 即直到数据第一次通过模型传递时,框架才会动态地推断出每个层的大小。
分类:
Pytorch
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
2023-02-13 Pytorch_人脸检测