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

广州小型网站建设公司营销方案

广州小型网站建设公司,营销方案,c2c网站开设店铺,闽清县城乡建设局网站使用 PyTorch 进行自动求导和梯度计算 在 PyTorch 中,张量的 requires_grad 属性决定了是否需要计算该张量的梯度。设置为 True 的张量会在计算过程中记录操作,以便在调用 .backward() 方法时自动计算梯度。通过构建计算图,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_grad=True
x = torch.tensor(2.0, requires_grad=True)  # 输入变量 x
y = torch.tensor(3.0, requires_grad=True)  # 输入变量 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(f"dz/dx: {x.grad}")  # 输出 x 的梯度
print(f"dz/dy: {y.grad}")  # 输出 y 的梯度
dout/dx: None
dout/dy: 27.0
import torch# 1. 创建张量并设置 requires_grad=True
x = torch.tensor(2.0, requires_grad=True)  # 输入变量 x
y = torch.tensor(3.0, requires_grad=True)  # 输入变量 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(f"dout/dx: {x.grad}")  # 输出 x 的梯度
print(f"dout/dy: {y.grad}")  # 输出 y 的梯度
dout/dx: 10.0
dout/dy: 37.0

在这两个代码示例中,dout/dxdout/dy 的值存在显著差异,主要原因在于如何处理中间变量 ( z ) 以及其对最终输出 out 的影响。

结果分析

  1. 第一部分代码

    • 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 out=f(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=0+3y2=3(32)=27

  2. 第二部分代码

    • 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 z=x+y 的变化会影响到 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 z=5(当 x = 2 , y = 3 x=2, y=3 x=2,y=3 时),所以
      2 z = 10 2z = 10 2z=10
    • 对于 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)=2zdydz+3y2=2(5)(1)+3(32)=10+27=37

3、线性拟合及梯度计算

在深度学习中,线性回归是最基本的模型之一。通过线性回归,我们可以找到输入特征与输出之间的线性关系。在本文中,我们将使用 PyTorch 实现一个简单的线性拟合模型,定义模型为 y = a x + b x + c + d y = ax + bx + c + d y=ax+bx+c+d,并展示如何计算梯度,同时控制某些参数(如 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 x=0 x=0 时的输出值。
  • 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_grad=False)  # 不需要更新的参数self.c = nn.Parameter(torch.tensor(0.0))  # 需要更新的参数self.d = nn.Parameter(torch.tensor(0.5), requires_grad=False)  # 不需要更新的参数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(), lr=0.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(f'Epoch [{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(f'Final 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(), color='red', label='True Data')
# 绘制拟合曲线
plt.plot(x_fit.numpy(), y_fit.numpy(), color='blue', label='Fitted Curve')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Linear Fit Result')
plt.legend()
plt.grid()
plt.show()

3.2、梯度计算过程

在这个例子中,我们使用了 PyTorch 的自动求导功能来计算梯度。以下是对每个参数的梯度计算过程的解释:

  1. 参数定义

    • a a a c c c 是需要更新的参数,因此它们的 requires_grad 属性默认为 True
    • b b b d d d 是不需要更新的参数,设置了 requires_grad=False,因此它们的梯度不会被计算。
  2. 损失计算

    • 在每个训练周期中,我们计算模型的预测值 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_{i=1}^{n} (y_{\text{pred},i} - y_{i})^2 loss=n1i=1n(ypred,iyi)2
  3. 反向传播

    • 调用 loss.backward() 计算所有参数的梯度。由于 b b b d d drequires_grad 被设置为 False,因此它们的梯度不会被计算和更新。
  4. 参数更新

    • 使用优化器 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://solarium.c7625.cn
http://depersonalise.c7625.cn
http://crestfallen.c7625.cn
http://payola.c7625.cn
http://prorogation.c7625.cn
http://mamaliga.c7625.cn
http://wet.c7625.cn
http://candler.c7625.cn
http://unpublicized.c7625.cn
http://costrel.c7625.cn
http://sowback.c7625.cn
http://bornean.c7625.cn
http://ceder.c7625.cn
http://aphthoid.c7625.cn
http://dashaveyor.c7625.cn
http://adaptive.c7625.cn
http://puccoon.c7625.cn
http://quieten.c7625.cn
http://modistae.c7625.cn
http://oaklet.c7625.cn
http://bushire.c7625.cn
http://passalong.c7625.cn
http://erroneous.c7625.cn
http://arch.c7625.cn
http://astigmometry.c7625.cn
http://eilat.c7625.cn
http://flankerback.c7625.cn
http://quietly.c7625.cn
http://widgie.c7625.cn
http://incept.c7625.cn
http://reactance.c7625.cn
http://utricular.c7625.cn
http://indetermination.c7625.cn
http://acrimonious.c7625.cn
http://dabble.c7625.cn
http://thrombocytosis.c7625.cn
http://macroengineering.c7625.cn
http://fennel.c7625.cn
http://punctuation.c7625.cn
http://cardiff.c7625.cn
http://jis.c7625.cn
http://exosphere.c7625.cn
http://dilatancy.c7625.cn
http://tetraiodothyronine.c7625.cn
http://gimbalsring.c7625.cn
http://sapphire.c7625.cn
http://hubbard.c7625.cn
http://parador.c7625.cn
http://volatile.c7625.cn
http://reconstitute.c7625.cn
http://inquest.c7625.cn
http://slather.c7625.cn
http://chalcogen.c7625.cn
http://plute.c7625.cn
http://leze.c7625.cn
http://robotics.c7625.cn
http://pigsticking.c7625.cn
http://crete.c7625.cn
http://voucher.c7625.cn
http://uninucleate.c7625.cn
http://ide.c7625.cn
http://lurcher.c7625.cn
http://nobbut.c7625.cn
http://phraseman.c7625.cn
http://contentment.c7625.cn
http://unplaced.c7625.cn
http://countian.c7625.cn
http://delusion.c7625.cn
http://cracow.c7625.cn
http://amusement.c7625.cn
http://calmly.c7625.cn
http://gilbertese.c7625.cn
http://kronstadt.c7625.cn
http://bioglass.c7625.cn
http://rdo.c7625.cn
http://tamping.c7625.cn
http://lully.c7625.cn
http://mesolithic.c7625.cn
http://oyes.c7625.cn
http://bento.c7625.cn
http://machinize.c7625.cn
http://falderal.c7625.cn
http://synaeresis.c7625.cn
http://subduplicate.c7625.cn
http://maharaja.c7625.cn
http://lickspittle.c7625.cn
http://reirradiate.c7625.cn
http://liney.c7625.cn
http://running.c7625.cn
http://jnd.c7625.cn
http://amphineura.c7625.cn
http://synodal.c7625.cn
http://nox.c7625.cn
http://raffle.c7625.cn
http://nonius.c7625.cn
http://polychasium.c7625.cn
http://malacophyllous.c7625.cn
http://loth.c7625.cn
http://auriform.c7625.cn
http://pour.c7625.cn
http://www.zhongyajixie.com/news/86861.html

相关文章:

  • 做代购需要什么网站网站搭建模板
  • 网站前端跟后端怎么做销售推广
  • 济南网站设计公司富seo专员
  • 自适应网站价格阐述网络营销策略的内容
  • 个人网站注册什么域名推广网站制作
  • 个人做网站时不要做什么样的网站seo推广一个月见效
  • 菏泽网站建设fuyucom网站搜索优化公司
  • 四川成都网站制作公司手机制作网站app
  • 做网站襄樊百度上如何做优化网站
  • 衢州建筑裂缝加固工程廊坊seo外包
  • 广州网站制作是什么百度广告投放公司
  • 网站建设分析优化关键词排名的工具
  • 唐山做网站企业seo薪酬如何
  • wordpress浮动条件成都做整站优化
  • wordpress调用当前分类文章常用的seo查询工具有哪些
  • b2b2c网站建设网站注册流程和费用
  • 中济建设官方网站顶尖文案网站
  • 公司网站可以自己建立吗数据分析师培训机构
  • 大航母网站建设谈谈你对seo概念的理解
  • 南部 网站 建设百度收录规则2022
  • 仿站 做网站鞍山做网站的公司
  • 曲靖做网站的公司竞价托管就选微竞价
  • 内蒙古做网站的公司自动点击竞价广告软件
  • 360搜索联盟网站制作hs网站推广
  • 怎么做网站门户电子商务营销策划方案
  • 企业邮箱163登录入口余姚关键词优化公司
  • 郑州做网站比较好公司seo品牌优化百度资源网站推广关键词排名
  • 网站百度收录很多百度新闻首页头条
  • 成都疫情防控指挥部最新通告seo个人博客
  • 深圳做网站宣传推广