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

网站建设电话销售不被挂断为什么网站的备案号在备案网站查询不到

网站建设电话销售不被挂断,为什么网站的备案号在备案网站查询不到,南昌企业免费建站,wordpress 3.9中文版使用 PyTorch 进行自动求导和梯度计算 在 PyTorch 中#xff0c;张量的 requires_grad 属性决定了是否需要计算该张量的梯度。设置为 True 的张量会在计算过程中记录操作#xff0c;以便在调用 .backward() 方法时自动计算梯度。通过构建计算图#xff0c;PyTorch 能够有效…使用 PyTorch 进行自动求导和梯度计算 在 PyTorch 中张量的 requires_grad 属性决定了是否需要计算该张量的梯度。设置为 True 的张量会在计算过程中记录操作以便在调用 .backward() 方法时自动计算梯度。通过构建计算图PyTorch 能够有效地追踪和计算梯度。 1、梯度的定义 在数学中梯度是一个向量表示函数在某一点的变化率。在深度学习中我们通常关心的是损失函数相对于模型参数的梯度。具体来说假设我们有一个输出 out我们计算的是损失函数对模型参数如权重和偏置的梯度而不是直接对输出的梯度。 2、 简单例子 在我们接下来的例子中我们将计算 out 相对于输入变量 x x x 和 y y y的梯度通常表示为 ( d out d x ) ( \frac{d \text{out}}{dx}) (dxdout​)和 ( d out d y ) ( \frac{d \text{out}}{dy}) (dydout​) import torch# 1. 创建张量并设置 requires_gradTrue x torch.tensor(2.0, requires_gradTrue) # 输入变量 x y torch.tensor(3.0, requires_gradTrue) # 输入变量 y# 2. 定义第一个函数 f(z) z^2 def f(z):return z**2# 3. 定义第二个函数 g(x, y) f(z) y^3 def g(x, y):z x y # 中间变量 zz_no_grad z.detach() # 创建不需要梯度的副本return f(z_no_grad) y**3 # 输出 out f(z_no_grad) y^3# 4. 计算输出 out g(x, y) # 计算输出# 5. 反向传播以计算梯度 out.backward() # 计算梯度# 6. 打印梯度 print(fdz/dx: {x.grad}) # 输出 x 的梯度 print(fdz/dy: {y.grad}) # 输出 y 的梯度dout/dx: None dout/dy: 27.0import torch# 1. 创建张量并设置 requires_gradTrue x torch.tensor(2.0, requires_gradTrue) # 输入变量 x y torch.tensor(3.0, requires_gradTrue) # 输入变量 y# 2. 定义第一个函数 f(z) z^2 def f(z):return z ** 2# 3. 定义第二个函数 g(x, y) f(z) y^3 def g(x, y):z x y # 中间变量 zreturn f(z) y ** 3 # 输出 out f(z_no_grad) y^3# 4. 计算输出 out g(x, y) # 计算输出# 5. 反向传播以计算梯度 out.backward() # 计算梯度# 6. 打印梯度 print(fdout/dx: {x.grad}) # 输出 x 的梯度 print(fdout/dy: {y.grad}) # 输出 y 的梯度dout/dx: 10.0 dout/dy: 37.0在这两个代码示例中dout/dx 和 dout/dy 的值存在显著差异主要原因在于如何处理中间变量 ( z ) 以及其对最终输出 out 的影响。 结果分析 第一部分代码 在 g(x, y) 函数中使用了 z . detach ( ) z.\text{detach}() z.detach() 创建了一个不需要梯度的副本 z no_grad z_{\text{no\_grad}} zno_grad​。这意味着在计算 f ( z no_grad ) f(z_{\text{no\_grad}}) f(zno_grad​) 时PyTorch 不会将 z z z 的变化记录进计算图中。 因此 z z z 对 out \text{out} out 的影响被切断导致 d out d x None \frac{d \text{out}}{d x} \text{None} dxdout​None 因为 x x x 的变化不会影响到 out \text{out} out 的计算。 对于 y y y计算得到的梯度为 d out d y 27.0 \frac{d \text{out}}{d y} 27.0 dydout​27.0 这是通过以下步骤得到的 输出为 out f ( z no_grad ) y 3 \text{out} f(z_{\text{no\_grad}}) y^3 outf(zno_grad​)y3 使用链式法则 d out d y 0 3 y 2 3 ( 3 2 ) 27 \frac{d \text{out}}{d y} 0 3y^2 3(3^2) 27 dydout​03y23(32)27 第二部分代码 在 g(x, y) 函数中直接使用了 z z z 而没有使用 z . detach ( ) z.\text{detach}() z.detach()。这使得 z z z 的变化会被记录在计算图中。计算 d out d x \frac{d \text{out}}{d x} dxdout​ 时 z x y z x y zxy 的变化会影响到 out \text{out} out因此计算得到的梯度为 d out d x 10.0 \frac{d \text{out}}{d x} 10.0 dxdout​10.0 这是因为 f ( z ) z 2 f(z) z^2 f(z)z2 的导数为 d f ( z ) d z 2 z \frac{d f(z)}{d z} 2z dzdf(z)​2z 当 z 5 z 5 z5当 x 2 , y 3 x2, y3 x2,y3 时所以 2 z 10 2z 10 2z10对于 y y y计算得到的梯度为 d out d y 37.0 \frac{d \text{out}}{d y} 37.0 dydout​37.0 这是因为 d out d y d ( f ( z ) y 3 ) d y 2 z ⋅ d z d y 3 y 2 2 ( 5 ) ( 1 ) 3 ( 3 2 ) 10 27 37 \frac{d \text{out}}{d y} \frac{d (f(z) y^3)}{d y} 2z \cdot \frac{d z}{d y} 3y^2 2(5)(1) 3(3^2) 10 27 37 dydout​dyd(f(z)y3)​2z⋅dydz​3y22(5)(1)3(32)102737 3、线性拟合及梯度计算 在深度学习中线性回归是最基本的模型之一。通过线性回归我们可以找到输入特征与输出之间的线性关系。在本文中我们将使用 PyTorch 实现一个简单的线性拟合模型定义模型为 y a x b x c d y ax bx c d yaxbxcd并展示如何计算梯度同时控制某些参数如 b b b 和 d d d不更新梯度。 在这个模型中我们将定义以下参数 a a a斜率表示输入 x x x 对输出 y y y 的影响。 b b b另一个斜率表示输入 x x x 对输出 y y y 的影响但在训练过程中不更新。 c c c截距表示当 x 0 x0 x0 时的输出值。 d d d一个常数项在训练过程中不更新。 3.1、完整代码 下面是实现线性拟合的完整代码 import torch import torch.nn as nn import torch.optim as optim import matplotlib.pyplot as plt# 1. 创建数据 # 假设我们有一些样本数据 x_data torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0]) y_data torch.tensor([3.0, 5.0, 7.0, 9.0, 11.0]) # 目标值# 2. 定义线性模型 class LinearModel(nn.Module):def __init__(self):super(LinearModel, self).__init__()self.a nn.Parameter(torch.tensor(1.0)) # 需要更新的参数self.b nn.Parameter(torch.tensor(0.5), requires_gradFalse) # 不需要更新的参数self.c nn.Parameter(torch.tensor(0.0)) # 需要更新的参数self.d nn.Parameter(torch.tensor(0.5), requires_gradFalse) # 不需要更新的参数def forward(self, x):return self.a * x self.b * x self.c self.d# 3. 实例化模型 model LinearModel()# 4. 定义损失函数和优化器 criterion nn.MSELoss() # 均方误差损失 optimizer optim.SGD(model.parameters(), lr0.005) # 随机梯度下降优化器# 5. 训练模型 for epoch in range(5000):model.train() # 设置模型为训练模式# 计算模型输出y_pred model(x_data)# 计算损失loss criterion(y_pred, y_data)# 反向传播optimizer.zero_grad() # 清零梯度loss.backward() # 计算梯度optimizer.step() # 更新参数# 每10个epoch打印一次loss和参数值if (epoch 1) % 500 0:print(fEpoch [{epoch 1}/100], Loss: {loss.item():.4f}, a: {model.a.item():.4f}, b: {model.b.item():.4f}, c: {model.c.item():.4f}, d: {model.d.item():.4f})# 6. 打印最终参数 print(fFinal parameters: a {model.a.item()}, b {model.b.item()}, c {model.c.item()}, d {model.d.item()})# 7. 绘制拟合结果 with torch.no_grad():# 生成用于绘图的 x 值x_fit torch.linspace(0, 6, 100) # 从 0 到 6 生成 100 个点y_fit model(x_fit) # 计算对应的 y 值# 绘制真实数据点 plt.scatter(x_data.numpy(), y_data.numpy(), colorred, labelTrue Data) # 绘制拟合曲线 plt.plot(x_fit.numpy(), y_fit.numpy(), colorblue, labelFitted Curve) plt.xlabel(X) plt.ylabel(Y) plt.title(Linear Fit Result) plt.legend() plt.grid() plt.show()3.2、梯度计算过程 在这个例子中我们使用了 PyTorch 的自动求导功能来计算梯度。以下是对每个参数的梯度计算过程的解释 参数定义 a a a 和 c c c 是需要更新的参数因此它们的 requires_grad 属性默认为 True。 b b b 和 d d d 是不需要更新的参数设置了 requires_gradFalse因此它们的梯度不会被计算。 损失计算 在每个训练周期中我们计算模型的预测值 y pred y_{\text{pred}} ypred​并与真实值 y data y_{\text{data}} ydata​ 计算均方误差损失 loss 1 n ∑ i 1 n ( y pred , i − y i ) 2 \text{loss} \frac{1}{n} \sum_{i1}^{n} (y_{\text{pred},i} - y_{i})^2 lossn1​i1∑n​(ypred,i​−yi​)2 反向传播 调用 loss.backward() 计算所有参数的梯度。由于 b b b 和 d d d 的 requires_grad 被设置为 False因此它们的梯度不会被计算和更新。 参数更新 使用优化器 optimizer.step() 更新参数。只有 a a a 和 c c c 会被更新。 Epoch [500/100], Loss: 0.0038, a: 1.5399, b: 0.5000, c: 0.3559, d: 0.5000 Epoch [1000/100], Loss: 0.0007, a: 1.5171, b: 0.5000, c: 0.4382, d: 0.5000 Epoch [1500/100], Loss: 0.0001, a: 1.5073, b: 0.5000, c: 0.4735, d: 0.5000 Epoch [2000/100], Loss: 0.0000, a: 1.5032, b: 0.5000, c: 0.4886, d: 0.5000 Epoch [2500/100], Loss: 0.0000, a: 1.5014, b: 0.5000, c: 0.4951, d: 0.5000 Epoch [3000/100], Loss: 0.0000, a: 1.5006, b: 0.5000, c: 0.4979, d: 0.5000 Epoch [3500/100], Loss: 0.0000, a: 1.5002, b: 0.5000, c: 0.4991, d: 0.5000 Epoch [4000/100], Loss: 0.0000, a: 1.5001, b: 0.5000, c: 0.4996, d: 0.5000 Epoch [4500/100], Loss: 0.0000, a: 1.5000, b: 0.5000, c: 0.4998, d: 0.5000 Epoch [5000/100], Loss: 0.0000, a: 1.5000, b: 0.5000, c: 0.4999, d: 0.5000 Final parameters: a 1.5000202655792236, b 0.5, c 0.4999275505542755, d 0.5
http://www.tj-hxxt.cn/news/137524.html

相关文章:

  • 免费建站网站网页长沙债务优化公司
  • 网站建设中 动态图片长春公司网站模板建站
  • 保健品网站建设案例佛山市seo推广哪家好
  • 免费企业官网模板天蝎网站推广优化
  • 电商商城网站开发深圳网站建设工作
  • 江西省城住房和城乡建设厅网站学做网站视频论坛
  • 网站cms系统哪个好用吗做网站在图片里加文字
  • 曲阜网站建设百度开户wordpress购物车保存
  • 海伦网站建设济南网站建设开发
  • 做团购网站怎样赚钱网站建设对企业很重要
  • 网站系统建设系广告经营者网站建设的简介
  • 网站建设网站制作公司哪家好做电商网站的步骤
  • 怎么让网站文章被收录番禺论坛网站建设
  • 做网站和APP需要注册公司吗学网页制作需要学什么
  • 建设银行网站解除绑定wordpress 标签云插件下载
  • 北京做网站公司有哪些da面板安装wordpress
  • 金湖网站建设如何进行推广
  • vue做网站前端我想接app注册推广单
  • 如何申请免费网站泗县住房和城乡建设局网站
  • 企业网站开发使用方法昆山移动网站建设
  • 杭州网站建设优化案例hao123文件在哪里
  • 电脑建网站软件用什么程序做网站好
  • wordpress专题模板企业网站怎么优化
  • 经常做飞机网站rp网站自动跳转图片怎么做
  • 做词频云图的网站怎么查有做网站的公司有哪些
  • wordpress多站共享授权码wordpress 云主机名
  • 网站建设投资风险分析用户体验设计原则
  • 做网站 宁波数据分析和网站开发
  • 哈尔滨站建筑面积xp花生壳做自己的网站
  • 微网站服务器一学一做腾讯视频网站吗