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

域名审核怎么做返利网站亚马逊品牌官网建设

域名审核怎么做返利网站,亚马逊品牌官网建设,注册新加坡公司,天津正规制作网站公司1. 梯度累加 在训练大模型时#xff0c;batch_size 最大值往往受限于显存容量上限#xff0c;当模型非常大时#xff0c;这个上限可能小到不可接受。梯度累加#xff08;Gradient Accumulation#xff09;是一个解决该问题的 trick梯度累加的思想很简单#xff0c;就是时…1. 梯度累加 在训练大模型时batch_size 最大值往往受限于显存容量上限当模型非常大时这个上限可能小到不可接受。梯度累加Gradient Accumulation是一个解决该问题的 trick梯度累加的思想很简单就是时间换空间。具体而言我们不在每个 batch data 梯度计算后直接更新模型而是多算几个 batch 后使用这些 batch 的平均梯度更新模型从而放大等效 batch_size。如下图所示 用公式表示设 batch size 为 n n n模型参数为 w \pmb{w} w样本 i i i 的损失为 l i l_i li​则正常情况下 sgd 参数更新为 w ← w α ∑ i 1 n 1 n ∂ l i ∂ w \pmb{w} \leftarrow \pmb{w} \alpha \sum_{i1}^n\frac{1}{n}\frac{\partial l_i}{\partial \pmb{w}} w←wαi1∑n​n1​∂w∂li​​ 使用梯度累加时设累加步长为 m m m即计算 m m m 个 batch 梯度后用梯度均值更新一次sgd 更新如下 w ← w α 1 m ∑ b 1 m ∑ i 1 n 1 n ∂ l b i ∂ w w α ∑ i 1 m n 1 m n ∂ l i ∂ w \begin{aligned} \pmb{w} \leftarrow \pmb{w} \alpha \frac{1}{m} \sum_{b1}^m \sum_{i1}^n\frac{1}{n}\frac{\partial l_{bi}}{\partial \pmb{w}} \\ \pmb{w} \alpha \sum_{i1}^{mn}\frac{1}{mn} \frac{\partial l_i}{\partial \pmb{w}} \end{aligned} w​←wαm1​b1∑m​i1∑n​n1​∂w∂lbi​​wαi1∑mn​mn1​∂w∂li​​​ 可见这等价于使用 batch_size m n mn mn 进行训练 2. 在 pytorch 中实现梯度累加 2.1 伪代码 pytorch 使用和 tensor 绑定的自动微分机制。每个 tensor 对象都有 .grad 属性存储其中每个元素的梯度值通过 .requires_grad 属性控制其是否参与梯度计算。训练模型时一般通过对标量 loss 执行 loss.backward() 自动进行反向传播以得到计算图中所有 tensor 的梯度。详见 PyTorch入门2—— 自动求梯度pytorch 中梯度 tensor.grad 不会自动清零而会在每次反向传播过程中自动累加所以一般在反向传播前把梯度清零for inputs, labels in data_loader:# forward pass preds model(inputs)loss criterion(preds, labels)# clear grad of last batch optimizer.zero_grad()# backward pass, calculate grad of batch dataloss.backward()# update modeloptimizer.step()这种设计对于实现梯度累加 trick 是很方便的我们可以在 batch 计算过程中进行计数仅在达到计数达到更新步长时进行一次参数更新并清零梯度即# batch accumulation parameter accum_iter 4 # loop through enumaretad batches for batch_idx, (inputs, labels) in enumerate(data_loader):# forward pass preds model(inputs)loss criterion(preds, labels)# scale the loss to the mean of the accumulated batch sizeloss loss / accum_iter # backward passloss.backward()# weights updateif ((batch_idx 1) % accum_iter 0) or (batch_idx 1 len(data_loader)):optimizer.step()optimizer.zero_grad()2.2 线性回归案例 下面使用来自 经典机器学习方法1—— 线性回归 的简单线性回归任务说明梯度累加的具体实现方法 本节代码直接从 jupyter notebook 复制而来可能无法直接运行 首先生成随机数据构造 datasetimport torch from IPython import display from matplotlib import pyplot as plt import numpy as np import random import torch.utils.data as Data import torch.nn as nn import torch.optim as optim# 生成样本 num_inputs 2 num_examples 1000 true_w torch.Tensor([-2,3.4]).view(2,1) true_b 4.2 batch_size 10# 1000 个2特征样本每个特征都服从 N(0,1) features torch.randn(num_examples, num_inputs, dtypetorch.float32) # 生成真实标记 labels torch.mm(features,true_w) true_b labels torch.tensor(np.random.normal(0, 0.01, sizelabels.size()), dtypetorch.float32)# 包装数据集将训练数据的特征和标签组合 dataset Data.TensorDataset(features, labels)不使用梯度累加技巧batch size 设置为 40# 构造 DataLoader batch_size 40 data_iter Data.DataLoader(dataset, batch_size, shuffleFalse) # shuffleFalse 保证实验可比# 定义模型 net nn.Sequential(nn.Linear(num_inputs, 1))# 初始化模型参数 nn.init.normal_(net[0].weight, mean0, std0) nn.init.constant_(net[0].bias, val0)# 均方差损失函数 criterion nn.MSELoss()# SGD优化器 optimizer optim.SGD(net.parameters(), lr0.01)# 模型训练 num_epochs 3 for epoch in range(1, num_epochs 1):epoch_loss []for X, y in data_iter:# 正向传播计算损失output net(X) loss criterion(output, y.view(-1, 1))# 梯度清零optimizer.zero_grad() # 计算各参数梯度loss.backward()#print(backward: , net[0].weight.grad)# 更新模型optimizer.step()epoch_loss.append(loss.item()/batch_size)print(fepoch {epoch}, loss: {np.mean(epoch_loss)}) epoch 1, loss: 0.5434057731628418 epoch 2, loss: 0.1914414196014404 epoch 3, loss: 0.06752514398097992使用梯度累加batch size 设置为 10步长设为 4等效 batch size 为 40# 构造 DataLoader batch_size 10 accum_iter 4 data_iter Data.DataLoader(dataset, batch_size, shuffleFalse) # shuffleFalse 保证实验可比# 定义模型 net nn.Sequential(nn.Linear(num_inputs, 1))# 初始化模型参数 nn.init.normal_(net[0].weight, mean0, std0) nn.init.constant_(net[0].bias, val0)# 均方差损失 criterion nn.MSELoss()# SGD优化器对象 optimizer optim.SGD(net.parameters(), lr0.01)# 模型训练 num_epochs 3 for epoch in range(1, num_epochs 1):epoch_loss []for batch_idx, (X, y) in enumerate(data_iter):# 正向传播计算损失output net(X) loss criterion(output, y.view(-1, 1)) loss loss / accum_iter # 取各个累计batch的平均损失从而在.backward()时得到平均梯度# 反向传播梯度累计loss.backward()if ((batch_idx 1) % accum_iter 0) or (batch_idx 1 len(data_iter)):#print(backward: , net[0].weight.grad)# 更新模型optimizer.step() # 梯度清零optimizer.zero_grad()epoch_loss.append(loss.item()/batch_size)print(fepoch {epoch}, loss: {np.mean(epoch_loss)})epoch 1, loss: 0.5434057596921921 epoch 2, loss: 0.19144139245152472 epoch 3, loss: 0.06752512042224407可以观察到无论 epoch loss 还是 net[0].weight.grad 都完全相同说明梯度累加不影响计算结果
http://www.hkea.cn/news/14415022/

相关文章:

  • 网站建设情况说明书温州企业做网站
  • 中国建设银行官网站账户商品手机网站开发模拟
  • 订制电子商务网站 价格智慧团建官网登录口入口
  • 长沙网站建设商城去哪里学习wordpress
  • 一个企业网站如何能放到互联网上 vps深圳西乡有什么好玩的
  • 深圳教育网站建设东营今天的消息
  • 通辽北京网站建设苏州 网站 建设 公司
  • 在线制作网站源码python基础教程第3版
  • wordpress 全站ajax公司查名
  • 代写网站建设合同搜索企业信息的网站
  • 北京做网站费用进博会上海2022
  • 建个门户网站博客转wordpress
  • wordpress站点目录加强校园网站建设方案
  • 用tornado做网站android应用开发期末考试题
  • 中国常用网站极速一区二区三区精品
  • 网站建设需要哪些常用技术中国十大网络科技公司
  • 网站建设后商品进不去详情页网站建设是啥
  • 校园网站建设管理工作制度西安做北郊做网站
  • 鹤壁建设网站医疗 企业 网站建设
  • 资料查询网站怎么做怎么做响应式网站
  • 用路由侠做网站网站上传文件代码
  • 网站备案 非经营深圳定制网站制作报价
  • 做网站的公司怎样收费二级域名搭wordpress
  • 大型门户网站建设哪专业网站开发发和后台开发有什么区别
  • 郑州哪里教做网站厦门外贸网站建设报价
  • .net做的网站打开速度缓慢WordPress游览器标签
  • 承德优化网站建设有没有做网站的联系方式
  • 搭建网站要什么配置济南网络公司工资排名
  • 网站建设公司70hf360网页设计尺寸
  • 程序员怎么做网站赚钱班级网页设计模板图片