Pytorch给我们提供了自动求导的函数,不用再自己再推导计算梯度的公式了

虽然有了自动求导的函数,但是这里我想给大家浅析一下:深度学习中的一个很重要的反向传播

references:https://en.wikipedia.org/wiki/Chain_rule

我们先来看看什么是chain- rule(链式法则)

Z是由 y经过f函数得到的,y又是x经过g函数得到

  ,    

正向传播的方向是从左往右,那么反向传播的便是从右到左,梯度是一级级往回传递的

我们知道一般输出的时候都要经过一个激活函数,常用的是relu。当前的结果要往后传,

那么,这个时候便是函数的复合,一个套一个(俄罗斯套娃)(正向传播)

反向传播,就像剥洋葱,一层一层,你会发现它是没有心的.........哈哈哈哈哈哈

tips:当前层的梯度的计算需要后一层计算的梯度的结果

我们再来看看代码

import torch
from torch.autograd import Variable x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

#这里的w,我们是用tensor来生成了,不再是一个python的变量,调用torch.Tensor 需要计算梯度,所以 requires——grad设置为true
w = Variable(torch.Tensor([1.0]), requires_grad=True) # Any random value # our model forward pass def forward(x):
return x * w # Loss function def loss(x, y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y) # Before training
print("predict (before training)", 4, forward(4).data[0]) # Training loop
for epoch in range(10):
for x_val, y_val in zip(x_data, y_data):
l = loss(x_val, y_val)
# l.backward()调用这个函数就可以让程序自动求梯度啦,是不是很神奇!
l.backward()
# 获取梯度的数值 使用 .data直接调用其属性即可
print("\tgrad: ", x_val, y_val, w.grad.data[0])
w.data = w.data - 0.01 * w.grad.data #手动清零 这里我们迭代10轮,所以下次计算之前都要清零当前的梯度值Manually zero the gradients after updating weights
w.grad.data.zero_() print("progress:", epoch, l.data[0]) # After training
print("predict (after training)", 4, forward(4).data[0]) 今天就讲到这里啦,see you next time!

  

PytorchZerotoAll学习笔记(三)--自动求导的更多相关文章

  1. Activiti工作流学习笔记(三)——自动生成28张数据库表的底层原理分析

    原创/朱季谦 我接触工作流引擎Activiti已有两年之久,但一直都只限于熟悉其各类API的使用,对底层的实现,则存在较大的盲区. Activiti这个开源框架在设计上,其实存在不少值得学习和思考的地 ...

  2. 2018/2/13 ElasticSearch学习笔记三 自动映射以及创建自动映射模版,ElasticSearch聚合查询

    终于把这些命令全敲了一遍,话说ELK技术栈L和K我今天花了一下午全部搞定,学完后还都是花式玩那种...E却学了四天(当然主要是因为之前上班一直没时间学,还有安装服务时出现的各种error真是让我扎心了 ...

  3. [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)

    一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...

  4. 『PyTorch』第三弹_自动求导

    torch.autograd 包提供Tensor所有操作的自动求导方法. 数据结构介绍 autograd.Variable 这是这个包中最核心的类. 它包装了一个Tensor,并且几乎支持所有的定义在 ...

  5. 从零开始学习MXnet(四)计算图和粗细粒度以及自动求导

    这篇其实跟使用MXnet的关系不大,但对于我们理解深度学习的框架设计还是很有帮助的. 首先还是对promgramming models的一个简单介绍,这个东西实际上是在编译里面经常出现的东西,我们在编 ...

  6. Pytorch学习(一)—— 自动求导机制

    现在对 CNN 有了一定的了解,同时在 GitHub 上找了几个 examples 来学习,对网络的搭建有了笼统地认识,但是发现有好多基础 pytorch 的知识需要补习,所以慢慢从官网 API进行学 ...

  7. pytorch的自动求导机制 - 计算图的建立

    一.计算图简介 在pytorch的官网上,可以看到一个简单的计算图示意图, 如下. import torchfrom torch.autograd import Variable x = Variab ...

  8. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  9. thinkphp学习笔记9—自动加载

    原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...

随机推荐

  1. cocos2d-x3.0 用CCDictionary写文件

    bool CDownLoad_LocalData::WriteToConfigFile( DownLoadLocalData* downdata ){ CCDictionary* pDict = CC ...

  2. win10 切换网卡的bat

    @echo off >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system3 ...

  3. C# WebClient Get获取网页内容

    //不知道怎么删除,只好留着 1. Get方式: WebClient web = new WebClient(); var html = web.DownloadString(url); 2. Pos ...

  4. 设计一个学生类&班级类

    第一题 设计一个学生类 属性:姓名.学号.年龄.成绩 设计一个班级类要求:实现向班级中添加学生.删除学生.查看学生.按照指定条件排序 属性:班级代号,所有学生 需要使用 calss, __int__, ...

  5. phpstrom快捷键

    PhpStorm 常用快捷键和配置 配置 设置代码及字体风格:File->Settings->Editor->Colors&Fonts->Font 安装插件(如:tp, ...

  6. 追溯了解Ubuntu之------基本命令操作(叁)

    在使用Ubuntu中的一些基本命令与Linux中是有区别的: 1.       查看Ubuntu系统位数:uname  -ar 或 getconf LONG_BIT 2.          获取Ubu ...

  7. input的默认样式去除

    outline:none;-----可去除input=text,的输入框输入时的亮边.

  8. 【七】ab压测

    [任务7]ab压测 安装ab压测软件 命令:yum -y install httpd-tools 进行压力测试: 执行命令:ab -c 20 -n 5000 http://192.168.159.30 ...

  9. C语言不定型参数函数定义

    我们在C语言中定义一个函数,通常都是需要在函数原型中规定这个函数需要提供什么类型的参数以及需要提供多少个.也就是,你的参数必须明确.但是我们调用函数库中的printf和scanf函数会发现,它们似乎是 ...

  10. 【blockly教程】第一章 Google Blockly教学应用手册

    1.1 Google Blockly概述 美国计算科学教育一直认为计算机作为当今各个领域的基础技术工具,有必要让学生尽早的了解和学习计算机工作原理,理解基础的编程思维.在2006年周以真教授提出计算思 ...