AI_pytorch_参数更新

损失函数

 损失函数的输入是一个输入的pair: (output, target), 然后计算出一个数值来评估output和target之间的差距大小.
 在torch.nn中有若干不同的损失函数可供使用, 比如nn.MSELoss就是通过计算均方差损失来评估输入和目标值之间的差距

参数更新

 --误差反向传播
  误差反向传播法是Rumelhart等在1986年提出的,即BP(error BackPropagation)法影响最为广泛,也称BP算法。

 --微分连锁律是一门高等数学的定律。连锁律的基本公式为:dy/dx=(dy/dz)×(dz/dx)
  微分链式法则中,我们将一个函数分解成多个函数的复合形式,然后对每个函数分别求导,最后将它们相乘得到最终的导数   

 -- 完成偏微分值的计算后,再乘以学习率,再从参数中减去这一计算结果,就实现了对参数的更新操作	

“optimizer.step()是PyTorch中优化器对象的一个方法,用于更新模型的参数

Pytorch--函数功能

导入的package
 import torch
 import torch.nn as nn
 import torch.nn.functional as F
 import torch.optim as optim


 1、 准备数据集  涉及到torch.utils.data.Dataset和DataLoader)
 2、 定义网络结构  torch.nn.Module  nn.Conv2d
 3、定义损失函数   criterion = torch.nn.MSELoss()
 4、定义优化算法   optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)  
 5、迭代训练 
    for epoch in range(num_epochs):
     # Forward pass  5.2 前向传播计算网络结构的输出结果	  
       outputs = model(inputs)
     # 5.3 计算损失函数
       loss = criterion(outputs, targets)
     # Backward and optimize 5.4 反向传播更新参数
       optimizer.zero_grad()
       loss.backward()
       optimizer.step()	
 6.保存训练的模型
迭代训练 
  定义传播进行网络参数更新:
 (1)将上一个迭代所计算的梯度进行清零:optimizer.zero_grad()
 (2)进行本次迭代的梯度计算:loss.backward()
 (3)更新网络的权值参数:optimizer.step()

说明
   1.模型中所有的可训练参数, 可以通过net.parameters()来获得.或者(model.parameters()
   # 通过optim创建优化器对象
    optimizer = optim.SGD(net.parameters(), lr=0.01)

  
   2.Pytorch中执行反向传播非常简便, 全部的操作就是loss.backward().在执行反向传播之前, 要先将梯度清零, 否则梯度会在不同的批次数据之间被累加.
    当调用loss.backward()时, 整张计算图将对loss进行自动求导, 
        所有属性requires_grad=True的Tensors都将参与梯度求导的运算, 并将梯度累加到Tensors中的.grad属性中.

自定义

 01.自定义网络结构
  # 定义一个网络
  class Model(nn.Module):
     def __init__(self,class_num,input_channel=3):
	 def forward(self, x):
 
 02.自定义损失函数-loss函数并没有需要学习的参数-pytorch 自定义损失函数主要有两种方式
 
   方式一编写一个继承nn.Module的Loss函数类,并在forward()方法中实现loss计算
   定义初始化方法(init),二是定义前向计算方式(forward)。
    自定义损失函数与自定义网络类似。需要继承nn.Module类,然后重写forward方法即可
	def forward(self,output,target):
	
   方式二:自定义函数:输入输出的变量都得是torch.tensor类型
     编写一个Loss函数类,并在_ call _方法中实现loss计算
	
	eg:
	  total_loss = class loss + bbox loss+ object loss
  损失函数.使用方式
    loss_fn = MyLoss() # 实例化Loss函数
    loss = loss_fn(preds, targets) # 计算loss值,即预测值与真实值之间的误差
03.优化方法
 不同优化方法之间最大的差异在于他们的搜索方向和搜索步长不同
 学习率衰减的策略来加速算法收敛。其思想为:先取一个较大的学习率加速收敛,然后随着遍历次数(epoch)的增加逐步减小学习率,防止跳出局部最优解
	
 自定义函数-调整学习率		

模型微调

模型微调(finetune	
冻结参数-- 通过设置requires_grad = False来冻结部分层	

 单模态(mono-modality)与多模态(multi-modality)
 
 配准-寻求一种空间变换,使它与另一幅图像上的对应点达到空间上的一致
 配对数据的标准多模态学习
 Meta日前开源了一种可以将可以横跨6种不同模态的全新AI模型ImageBind,包括文本、音频、视觉数据、温度和运动读数
    ImageBind: One Embedding Space To Bind Them All. https://github.com/facebookresearch/ImageBind
	ImageBind,Meta Make-A-Scene可以从音频创建图像 ImageBind可以跨多种模态创建联合嵌入空间,而无需使用每种不同模态组合对数据进行训练
	
	https://github.com/facebookresearch/segment-anything

参考

用Pytorch构建神经网络的基本流程和实现过程 https://blog.csdn.net/itcast_cn/article/details/127284590 
https://github.com/NielsRogge
posted @ 2023-06-30 15:58  辰令  阅读(22)  评论(0编辑  收藏  举报