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), 即直到数据第一次通过模型传递时,框架才会动态地推断出每个层的大小。
posted @   辰令  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
历史上的今天:
2023-02-13 Pytorch_人脸检测
点击右上角即可分享
微信分享提示