人工智能-作业1:PyTorch实现反向传播

  • 人工智能-作业1:PyTorch实现反向传播
    • 环境配置:
    • 计算过程
  • 反向传播
    • PyTorch Autograd自动求导

人工智能-作业1:PyTorch实现反向传播

环境配置:

1.安装pycharm要求不多,我原来的pycharm就是从软件商店下载的,下载社区版就ok,专业版的话只有使用一个月的时间。
2.安装Anaconda,额 我的Anaconda3早先就安装完成了,安装也是傻瓜式安装,所以不做介绍
3.安装pytorch,这部分就很关键,毕竟花了一下午的时间,遇到的问题就五花八门
官网:https://pytorch.org/enterprise-support-program
选择版本的时候并不是版本越高越好,需要适配自己的驱动版本。
(1)输入命令行时要在Anaconda Prompt下进行,不要在win+R下进行,否则只会提示命令无效,至少我的是这样。
(2)pycharm的setting中Python Iterpreter中确实有导入包的方法,但大多情况下会失败,主要是因为torch版本的问题,因为默认会给你安装最高的版本,反而不适配自己的驱动。
(3)时间超时:某些情况下是可以通过将命令行中的conda改为pip而解决,但也只是少数情况下
(4)大片冒红,这时候会提示很多错误,其实只要升级一下Anaconda版本
conda update -n base conda
挑选一个版本低一点的torch就可以解决。
可以参考:https://blog.csdn.net/weixin_41622348/article/details/100582862?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165131100716782395379530%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=165131100716782395379530&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-100582862.142v9pc_search_result_control_group,157v4control&utm_term=Solving+environment%3A+failed+with+initial+frozen+solve.+Retrying+with+flexible+solve.&spm=1018.2226.3001.4187

计算过程

首先我们的 w 设置一个初始值,将 w ww 设置为需要梯度,然后就构建出整个计算图。


  构建出计算图之后,我们使用 backward 来反向计算 L 对 w的导数,就存放在 w.grad 成员里面。这里需要注意的是 grad 也是一个 Tensor,所以为了避免计算导数的时候构建计算图,需要使用 grad 中的成员 data 进行计算。

以上就是参数 w相应的更新过程。

反向传播

代码如下

import torch
import numpy
x_data = [1.0, 2.0, 3.0]        # 输入值
y_data = [2.0, 4.0, 6.0]        # 输出值
w = torch.Tensor([1.0])
w.requires_grad = True
# 权重初始值(设置w的初始值),在grad求导时会将这里设置的初始值带入
# Tensor创建时默认不计算梯度,需要计算梯度设置为ture,自动记录求w的导# y_predict = x * w
def forward(x):return x * w
# 损失函数,return激活函数后得到的
def loss(x,y):y_pred = forward(x)return (y_pred - y) ** 2# 训练过程
# 第一步:先算损失Loss
# 第二步:backward,反向传播
# 第三步:梯度下降
for epoch in range(100):    #训练100次for x, y in zip(x_data,y_data) :l = loss(x,y)           # 前向传播,求Loss(损失函数),构建计算图l.backward()            # 反向传播,求出计算图中所有梯度存入w中print("\tgrad: ",x,y,w.grad.item())# w.grad.data:获取梯度,用data计算,不会建立计算图,每次获取叠加到gradw.data = w.data - 0.01 * w.grad.data     # 修正一次w,learningrate=0.01(类似步长w.grad.data.zero_()     # 注意:将w中记录的梯度清零,消除本次计算记录,只保留新的w,开启下一次前向传播print("pregress:", epoch, l.item()) # item取元素精度更高,得到的是loss# Press the green button in the gutter to run the script.
if __name__ == '__main__':print_hi('PyCharm')

运行结果

PyTorch Autograd自动求导

import torch
import numpy#创建一个张量并设置requires_grad=True用来追踪其计算历史
x = torch.ones(2, 2, requires_grad=True)
print(x)
#对这个张量做一次运算
y = x + 2
print(y)
print(y.grad_fn)
#y是计算的结果,所以它有grad_fn属性# 对y进行更多操作:
z = y * y * 3
out = z.mean()
print(z, out)#.requires_grad_(...) 原地改变了现有张量的 requires_grad 标志。
#如果没有指定的话,默认输入的这个标志是False'''
a = torch.randn(2, 2)
a = ((a * 3) / (a - 1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b = (a * a).sum()
print(b.grad_fn)#梯度,因为out是一个标量。所以让我们直接进行反向传播,
#out.backward()和out.backward(torch.tensor(1.))out.backward()#输出导数d(out)/dx
print(x.grad)x=torch.randn(3,requires_grad=True)
y=x*2
while y.data.norm()<1000:y=y*2print(y)
#在这种情况下,y不再是标量。torch.autograd不能直接计算完整的雅可比矩阵,
# 但是如果我们只想要雅可比向量积,只需将这个向量作为参数传给backward:
v=torch.tensor([0.1,1.0,0.001],dtype=torch.float)
y.backward(v)
print(x.grad)#为了防止跟踪历史记录(和使用内存),可以将代码块包装在with torch.no_grad():中。在评估模型时特别有用,
# 因为模型可能具有requires_grad = True的可训练的参数,但是我们不需要在此过程中对他们进行梯度计算。
# 也可以通过将代码块包装在 with torch.no_grad(): 中,来阻止autograd跟踪设置了
# .requires_grad=True 的张量的历史记录。print(x.requires_grad)
print((x ** 2).requires_grad)

输出结果:

人工智能-作业1:PyTorch实现反向传播相关推荐

  1. 【2021-2022 春学期】人工智能-作业1:PyTorch实现反向传播

    1 安装pycharm,配置好python开发环境 PyCharm 安装教程(Windows) | 菜鸟教程 (runoob.com) 2 安装pytorch PyTorch 3 使用pytorch实 ...

  2. pytorch学习 -- 反向传播backward

    pytorch学习 – 反向传播backward 入门学习pytorch,在查看pytorch代码时对autograd的backard函数的使用和具体原理有些疑惑,在查看相关文章和学习后,简单说下我自 ...

  3. Pytorch(三) --反向传播

    整体上来说,和上一节的梯度下降法差不多,不过这次是用Pytorch实现的,调用了其中的一些方法. 需要注意的事项: ①Tensor中包含data和grad,其中data和grad也是Tensor.在更 ...

  4. 吴恩达|机器学习作业4.0神经网络反向传播(BP算法)

    4.0.神经网络学习 1)题目: 在本练习中,您将实现神经网络的反向传播算法,并将其应用于手写数字识别任务.在之前的练习中,已经实现了神经网络的前馈传播,并使用Andrew Ng他们提供的权值来预测手 ...

  5. pytorch loss反向传播出错

    今天在使用pytorch进行训练,在运行 loss.backward() 误差反向传播时出错 : RuntimeError: grad can be implicitly created only f ...

  6. Pytorch的反向传播backward()详解

    在Pytorch中,我们有时候会进行多个loss的回传,然而回传中,会发生一些错误.例如: RuntimeError: Trying to backward through the graph a s ...

  7. 【Pytorch】反向传播为NaN报错的排查解决方法,RuntimeError: Function ‘BmmBackward0‘ returned nan values

    最近在训练模型的过程中,反复出现方向传播至为NaN的报错,报错信息如下所示: File "/home/fu/anaconda3/envs/torch/lib/python3.7/site-p ...

  8. Pytorch框架中SGD&Adam优化器以及BP反向传播入门思想及实现

    因为这章内容比较多,分开来叙述,前面先讲理论后面是讲代码.最重要的是代码部分,结合代码去理解思想. SGD优化器 思想: 根据梯度,控制调整权重的幅度 公式: 权重(新) = 权重(旧) - 学习率 ...

  9. 「反向传播非你原创」,Jürgen发文直指Hinton不应获2019本田奖

    来源:机器之心 LSTM 之父 Jürgen Schmidhuber 再次掀起争论,这回他指向了深度学习之父.图灵奖得主 Geoffrey Hinton.不过,这次他站出来质疑的是 Hinton 的最 ...

最新文章

  1. python用os.system打开wav文件_使用python读取wav格式文件
  2. 在jupyter notebook中attr1参数的作用_PID控制中P、I、D参数的作用究竟是什么?
  3. [POJ](3268)Silver Cow Party ---最短路径(图)
  4. Hook安卓项目内的字符串获取,用服务器的key value优先代替本地的key value
  5. 【STC15库函数上手笔记】10、EEPROM
  6. linux bash函数里面调用命令行,Linux-在gnome-terminal -x中运行bash函数
  7. nvarchar(2048)能写多少个字符_我的拼多多店一个标题能带来多少的免费流量?三个字“非常多”...
  8. JAVA 第2课 基本程序设计
  9. STP中各算法接口开销(COST)计算方式
  10. http://ilinuxkernel.com/?p=1328
  11. 漫画 | 硬核技术预测你有没有女朋友
  12. 谷粒商城:跨域问题解决
  13. Python 学习第一周
  14. Python实现问卷星表单机刷
  15. 转载_纯Java代码批量去除图片文字水印
  16. IGBT是啥?看完这篇文章你还不明白就不要再做电子行业。
  17. 微服务系统设计(一) -- 如何拆分服务
  18. 2022年重新启航规划
  19. Spring Boot第八篇-关于web静态资源的整合
  20. dting 手环 数据 获取 可视化

热门文章

  1. 屋顶打字通(三)--总结
  2. 用 Python 赚钱的 5 个方法,教你业余时间赚外快!
  3. 车道偏离预警——LDW Carsim与simulink联合仿真模型
  4. zabbix监控MySQL遇到的EB单位BUG
  5. 考研计算机统考知识点,09计算机考研统考大纲权威解读之考试范围
  6. Web3赋能新商业模式
  7. 下面linux程序中哪一个是调试器,【编程】noi2009笔试复习题(1)
  8. 深入浅出js中的this
  9. 房地产三维交互展示,专为房产商量身定制的数字化营销展示系统
  10. 插件 原生js 省市区 三级联动 源码