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

头歌之动手学人工智能-Pytorch 之autograd

目录

第1关:Variable

任务描述

编程要求

测试说明

没有伟大的愿望,就没有伟大的天才。——巴尔扎克开始你的任务吧,祝你成功!

第2关:Variable 属性

任务描述

编程要求

测试说明

真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克开始你的任务吧,祝你成功!

第3关:梯度初探

任务描述

编程要求

测试说明

科学的界限就像地平线一样:你越接近它,它挪得越远。——布莱希特开始你的任务吧,祝你成功!

第4关:梯度进阶

任务描述

编程要求

测试说明

真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克开始你的任务吧,祝你成功!


第1关:Variable

恭喜大家进入  Pytorch 最为核心的学习——autograd,这是  Pytorch 中区别其他机器学习库的一个重要元素。准备好了吗?让我们一探它的庐山真面目吧!

  • 任务描述

本关任务:本关提供了一个张量变量tensor ,根据所给的张量创建 Variable 变量v,同时要求同学们掌握 Variable 的相关属性,例如如何获得 Variable 的 data 属性。

  • 编程要求

本关涉及的代码文件为 createVariable.py,本次编程任务是补全右侧代码片段中 Begin 至 End 中间的代码,具体要求如下:

根据所给的张量创建 Variable 变量 v。
具体请参见后续测试样例。

  • 测试说明

本关涉及的测试文件为 createVariable.py ,运行用户填写后的程序判断正误。

根据程序的输出判断程序是否正确,若正确则输出下面的预期输出,否则报错。

请注意输出格式及规范。

以下是测试样例:

测试输入:
预期输出:
Variable containing:
 1  4  2
 3  1  4
[torch.FloatTensor of size 2x3]

没有伟大的愿望,就没有伟大的天才。——巴尔扎克
开始你的任务吧,祝你成功!
import torch
from torch.autograd import Variable
tensor = torch.FloatTensor([[1,4,2],[3,1,4]])#/********** Begin *********/
v = Variable(tensor,requires_grad=True)
#/********** End *********/
print(v)

第2关:Variable 属性

本关将介绍 Variable 属性方面的知识,让同学们对其更加熟悉,便于掌握。

  • 任务描述

本关要求掌握Variable 的基本属性及其意义,如requires_grad属性标记着该Variable 是否需要求导。

本关任务:本关提供了一个32位浮点型的张量 x,要求同学们根据 x创建一个Variable类型的变量 y, y是由 x 的平方计算得到,并输出y的Requires Gradiet属性和Gradient属性。

  • 编程要求

本关涉及的代码文件为attributes.py,本次的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:

创建一个变量  y,由  x 的平方计算得到,并输出;

输出 y 的Requires Gradient属性;

输出 y 的Gradient属性。

具体请参见后续测试样例。

  • 测试说明

测试过程:

本关涉及的测试文件为attributes.py,运行用户填写后的程序判断正误。

根据程序的输出判断程序是否正确,若正确则输出下面的预期输出,否则报错。

请注意输出格式及规范。

以下是测试样例:

测试输入:
预期输出:

Variable containing:
 1
 4
 9
[torch.FloatTensor of size 3]

Requires Gradient : True 
Gradient : None 

真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克
开始你的任务吧,祝你成功!
import torch
from torch.autograd import Variable
import warnings  
# 忽略特定警告  
warnings.filterwarnings("ignore", message="The .grad attribute of a Tensor that is not a leaf Tensor is being accessed.*") x = torch.FloatTensor([1,2,3])
x = Variable(x, requires_grad=True)#/********** Begin *********/
#创建一个变量 y,由 x 的平方计算得到
y = x * x
#按照要求输出y相应的属性
print(y)
print('Requires Gradient : %s ' % (y.requires_grad))
print('Gradient : %s ' % (y.grad))
#/********** End *********

第3关:梯度初探

接下来让我们一探神秘的梯度求导吧!

  • 任务描述

结合上一关卡所介绍的Variable属性,我们将进一步学习Variable的反向传播函数backward,从而计算出其梯度的大小。

本关任务:

本关提供了一个 Variable 类型的变量x,并将x的 requires_grad设置为True,以便后续的求导操作。在 x 基础上进行相应的运算得到y ,在 y的基础上进行运算得到z,令变量out为 z 的平均值,计算out 的梯度并输出x的梯度值。求导计算的步骤如下所示:

  • 编程要求

本关涉及的代码文件为gradient.py,本次编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:

在 x 基础上进行运算, y = x + 2;

在 y 基础上进行运算, z = y * y * 3;

令变量out为 z 的平均值并输出;

计算 out 的梯度并输出x的梯度值;

具体请参见后续测试样例。

  • 测试说明

测试过程:

本关涉及的测试文件为gradient.py,运行用户填写后的程序判断正误。

根据程序的输出判断程序是否正确,若正确则输出下面的预期输出,否则报错。

请注意输出格式及规范。

以下是测试样例:

测试输入:
预期输出:

output:
 Variable containing:
 40.5000
[torch.FloatTensor of size 1]

Variable containing:
 3.0000
 4.5000
 6.0000
 7.5000
[torch.FloatTensor of size 4]

科学的界限就像地平线一样:你越接近它,它挪得越远。——布莱希特
开始你的任务吧,祝你成功!

import torch
from torch.autograd import Variable x = Variable(torch.Tensor(range(4)), requires_grad=True)
#/********** Begin *********/
#在 x 基础上进行运算, y = x + 2
y = x + 2
#在 y 基础上进行运算, z = y * y * 3
z = y * y * 3
#令变量 out 为 z 的平均值并输出
out = z.mean()#计算 out 的梯度并输出x的梯度值
out.backward(retain_graph=True)
print('output:')
print(out.item())print(x.grad)
#/********** End *********

第4关:梯度进阶

在上一关卡中,我们学习了利用.backward ()对Variable 变量进行反向传播求导,本关将介绍另一种求解梯度的方法——torch.autograd.grad。

  • 任务描述

本关任务:

本关提供了Variable 类型的变量x和Variable 类型的变量y,并将x 和y的requires_grad设置为True以便后续的求导操作。在 x和y的基础上进行运算得到z,利用torch.autograd.grad方法求梯度 dz_dx和dz_dy。

  • 编程要求

本关涉及的代码文件为autograd_grad.py,本次编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:

计算 z = x*x + 3*y;

求梯度 dz_dx和dz_dy 并输出;

具体请参见后续测试样例。

  • 测试说明

测试过程:

本关涉及的测试文件为autograd_grad.py,运行用户填写后的程序判断正误;

根据程序的输出判断程序是否正确,若正确则输出下面的预期输出,否则报错;

请注意输出格式及规范。

以下是测试样例:

dz_dx: 
 (Variable containing:
  2   4   6
  8  10  12
[torch.FloatTensor of size 2x3]
,)
dz_dy: 
 (Variable containing:
 3  3  3
 3  3  3
[torch.FloatTensor of size 2x3]
,)

真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克
开始你的任务吧,祝你成功!
import torch
from torch.autograd import Variablex = Variable(torch.unsqueeze(torch.linspace(1, 6, 6), dim = 1).view(2, 3), requires_grad=True)y = Variable(torch.Tensor(2, 3).uniform_(-1, 1), requires_grad=True)#/********** Begin *********/
#计算 z = x*x + 3*y
z = x*x + 3*y#求dz_dx和dz_dy 并输出
dz_dx = torch.autograd.grad(z, x, grad_outputs=torch.ones_like(z))
dz_dy = torch.autograd.grad(z, y, grad_outputs=torch.ones_like(z))
print("dz_dx: \n",dz_dx)
print("dz_dy: \n",dz_dy)
#/********** End *********/ 

http://www.xdnf.cn/news/9672.html

相关文章:

  • 算法 Arrays.sort()函数自定义排序(Comparator 接口)
  • [网页五子棋][匹配模块]服务器开发、用户管理器(创建匹配请求/响应对象、处理连接成功、处理下线)
  • 根据jvm源码剖析类加载机制
  • Python爬虫实战:研究Tornado框架相关技术
  • [Vue组件]半环进度显示器
  • 小猴子摆玩具
  • 计算机网络第一章计算机网络概述(竟成)
  • 小白成长之路-Linux操作系统-进程管理
  • 【机器人编程基础】python中的常用数据类型
  • ElasticSearch查询指定时间内出现的次数/2秒内出现的次数
  • 我们来学mysql -- 输出一份“数据备份还原”sh脚本
  • 手写字魔法消除1:数据集说明(含下载链接)
  • Kruskal算法剖析与py/cpp/Java语言实现
  • linux中基础IO(上)
  • 浅谈 JavaScript 性能优化
  • 深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践
  • YOLOv8性能提升:引入华为GhostNetv1特征提取网络
  • 第五章 宽松内存一致性模型 A Primer on Memory Consistency and Cache Coherence - 2nd Edition
  • Houdini learning Record
  • Python中的跨域资源共享(CORS)处理
  • CRTP学习笔记与指南
  • MySQL8.4主从复制
  • Mysql学习笔记之事务
  • 大数据未来发展的趋势与挑战
  • 深入详解(0020,0052) Frame of Reference UID在序列空间定位中的定义与作用
  • 【机器学习基础】机器学习入门核心算法:GBDT(Gradient Boosting Decision Tree)
  • 20250528-C#知识:强制类型转换
  • PostgreSQL 数据完整性检查工具对比:amcheck 与 pg_checksums
  • TCP连接数统计脚本
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论系统负载均衡设计方法(包括解题思路和参考素材)