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

产品宣传网站的作用天津做网站公司

产品宣传网站的作用,天津做网站公司,石家庄的网站的公司,2017如何免费制作网站前一篇文章#xff0c;Tensor 基本操作5 device 管理#xff0c;使用 GPU 设备 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started PyTorch 计算图和 Autograd 微积分之于机器学习Computational Graphs 计算图Autograd…前一篇文章Tensor 基本操作5 device 管理使用 GPU 设备 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started PyTorch 计算图和 Autograd 微积分之于机器学习Computational Graphs 计算图Autograd 自动求导一个训练过程及 no_grad 的使用示例代码执行结果生成数据第一轮后第二轮后第十轮后 更多计算图的知识更为复杂点的计算图的样子自动求导有关的参数 Links 微积分之于机器学习 机器学习的主要工作原理就是万事万物存在规律而我们使用机器来完成参数评估。参数评估的过程是随机梯度下降也就是任意选择起点然后使用微积分技术指导我们调优找到一组最优参数值。 这就像我们爬山面对众多的山峰我们从不同的出发点出发不断的朝着山顶前进最终我们即便起点不同都可以达到山顶 - 通向山顶的路有多条。另外一方面我们可能来到了不同的山顶。 在我们爬山的过程中如何选择下一步呢这时就是微积分大显身手的时候了。 在机器学习中对参数优化的过程使用了大量微积分的运算PyTorch 能成为通用性的机器学习框架就在于不同的机器学习任务底层的数学原理是一致的而 PyTorch 内置了这些标准化的数学运算在 PyTorch 中除了 Tensor 外还有两个关键的概念 计算图自动求导 Computational Graphs 计算图 神经网络是由很多神经元组成的网络最简单的神经网络就是只包含一个线性神经元的神经网络理解这个最简单的神经网络有助于理解任何复杂的神经网络。 z x ∗ w b z x * w b zx∗wb 注意这里没有添加激活函数这个神经元是一个简单的线性神经元。 计算过程 加权输出 z 与理想输出 y 之间使用交叉熵CE计算出损失loss然后基于 loss 计算梯度 grad基于梯度更新 w 和 b 这个计算过程可以用一张图表达一个图就是由节点以及边组成边上定义操作符。同时这个计算过程会在训练中发生多次因为梯度下降算法是 SGD 迭代运算。 PyTorch 为了让每次运算可以更灵活比如使用 Dropout 随机丢弃一些神经元PyTorch 实现了每次运算动态的生成这张图 - 动态计算图1。也就是说对于每次运算PyTorch 会生成一个计算图并附着计算状态。 Autograd 自动求导 附着状态最主要的目的就是实现自动求导。因为每个节点都是一个变量变量和变量之间通过操作符相互依赖而操作符和变量构成的函数式就可以实现求导根据链式法则实现计算图中每个变量的导数的计算。 在上图只有一个线性神经元的情况下PyTorch 的自动求导是如何工作的呢参考下面的代码。 import torch# 定义输入和理想输出 x torch.ones(5) # input tensor y torch.zeros(3) # expected output# 定义参数 w torch.randn(5, 3, requires_gradTrue) b torch.randn(3, requires_gradTrue)# 定义模型并进行一次运算 z torch.matmul(x, w)b# 定义损失函数并得到单次的损失 loss torch.nn.functional.binary_cross_entropy_with_logits(z, y)# 进行反向传播并得到梯度 loss.backward() print(w.grad) print(b.grad) 如此一来参数更新将变得非常简单。计算图允许每次迭代传入不同的操作符等实现训练过程更灵活的配置。计算图保留了运算过程中的 Tensor、操作符、操作符对应的导函数。当 loss.backward() 调用时顺序的调用自动求导变量的导函数得到 .grad 梯度值。 一个训练过程及 no_grad 的使用 现在我们看一个例子通过一个简单的模型了解训练中自动求导机制是如何工作的。 示例代码 autogradimport plotly.graph_objects as go import plotly.express as px from torch import nn import numpy as np import torch import math# 输入变量 x理想输出 yt生成 y 的函数就是要拟合的模型 X torch.tensor(np.linspace(-10, 10, 1000)) y 1.5 * torch.sin(X) 1.2 * torch.cos(X/4) # 真实的模型 yt y np.random.normal(0, 1, 1000)# vis def plotter(X, y, yhatNone, titleNone):with torch.no_grad():fig go.Figure()fig.add_trace(go.Scatter(xX, yy, modelines, namey))fig.add_trace(go.Scatter(xX, yyt, modemarkers, markerdict(size4), nameyt))if yhat is not None: fig.add_trace(go.Scatter(xX, yyhat, modelines, nameyhat))fig.update_layout(templatenone, titletitle)fig.show()plotter(X, y, titleData Generating Process)# 计算模型的实际输出这里前提是假设知道变量 X 和函数 sin|cos, 而不知道参数 theta def fit_model(theta:torch.tensortorch.rand(3, requires_gradTrue)):return theta[0] * X theta[1] * torch.sin(X) theta[2] * torch.cos(X/4)# 随机初始化参数开启自动求导 theta torch.randn(3, requires_gradTrue)# 损失函数和优化器 loss_fn nn.MSELoss() # MSE loss optimizer torch.optim.SGD([theta], lr0.01) # build optimizer # 迭代训练 epochs 500 for i in range(epochs):yhat fit_model(theta) # 计算实际输出loss loss_fn(y, yhat) # 将实际输出和理想输出传入损失函数得到损失 lossloss.backward() # 反向传播完成 .grad 梯度的计算optimizer.step() # 基于梯度完成参数更新 optimizer.zero_grad() # 本轮计算完成将梯度值归零否则下次计算损失并调用 backward 导致梯度累计 if i % (epochs/10) 0: # 验证及输出调试信息 msg floss: {loss.item():7f} theta: {theta.detach().numpy()}yhat fit_model(theta)plotter(X, y, yhat.detach(), titlefloss: {loss.item():7f} theta: {theta.detach().numpy().round(3)})执行结果 生成数据 创建了一个假数据 分布在象限中的点就是 xy象限中的曲线就是符合设想的模型我们看最终的机器学习的模型能否拟合这条曲线 第一轮后 初始化后实际模型和理想模型差距很大。注意此时 theta 和目标参数差距很大。 第二轮后 经过两次迭代差距在缩小。 第十轮后 又经过了几轮训练此时我们发现图中已经分辨不出来但是从 theta 的值我们还可以看到一点差距这已经证明机器学习拟合上了目标空间。 更多计算图的知识 更为复杂点的计算图的样子 在训练中生成的 DAG 类似如下。 自动求导有关的参数 # 做一个计算图 x torch.rand(1) b torch.rand(1, requires_gradTrue) w torch.rand(1, requires_gradTrue) y w * x # y 是一个新的 tensor# 检查 y 是否是叶子节点这里 y 是输出也就是 root 节点而不是 leaf 节点 print(y.is_leaf)# 反向传播 y.backward(retain_graphTrue) # retain_graphTrue保留计算图中的状态https://discuss.pytorch.org/t/use-of-retain-graph-true/179658 print(w.grad) # 查看梯度Links How Computational Graphs are Constructed in PyTorchHow Computational Graphs are Executed in PyTorch PyTorch’s Dynamic Graphs (Autograd)Automatic Differentiation with torch.autogradAutograd mechanics PyTorch 使用 DAG 有向无环图这种格式存储计算图其中输入的 Tensor 称为叶子节点leaves输出的 Tensor 称为根节点roots。 ↩︎
http://www.hkea.cn/news/14467892/

相关文章:

  • wordpress category.php南宁网站的优化
  • 网站排名如何做wordpress好看主题
  • 正在建设的网站可以随时进入吗it人力外包服务公司
  • 广西建设工程质量安全监督总站网站贾汪建设局网站
  • 江阴做网站的企业做网上招聘哪个网站好
  • 简洁网站模板下载一级a做爰片完整网站
  • 性价比最高的网站建设公司企业自助建站
  • 如何申请建设个人网站网站建设开放的端口
  • seo撰写网站标题以及描述的案例良品铺子vi设计手册
  • 联通营业厅做网站维护企业网站建设物美价廉
  • 深圳做英文网站的公司镇平哪家网站做的好
  • 建设互联网站是什么齐博企业网站
  • 网站seo问题诊断工具西安百度竞价推广
  • 深圳网站排名怎么做奇趣统计网站谁做的
  • 网站建设费记入科目wordpress免费手机主题
  • 培训网站开发需求说明书设计制作网站收费
  • 网站设计公司简介wordpress 视图插件
  • 如何做网站写手怎么选择丹徒网站建设
  • 上海网站排名推广网站域名是网站架构吗
  • 网站推广的公司沅江网站开发
  • 阳泉软件定制网站建设兖州城乡建设局网站
  • 湖南网站seo推广百度帐号个人中心
  • 金坛市住房和城乡建设局 网站国外服务器 网站进行经营性活动
  • 做网站的好处和坏处互联网定制网站
  • 直播教育网站建设网站设置301重定向
  • 制作php网站用什么软件企业免费网站建设
  • 织梦电子行业网站模板用户体验设计课程
  • 熟练掌握网站开发技术wordpress 友情链接 书签
  • 怎么做黑客把网站余额更改怎样用网站做单笔外贸
  • 电商网站开发北京免费网页空间2023