🇨🇳
阿臻的学习笔记
  • 🤖AI
    • 📑README
    • 🕒Scheduling
      • 一种JSSP的DRL环境
    • 📜Paper
      • 神经协同过滤
      • 非侵入信号深度学习
      • 肾透析移植机器学习
      • 心理学随机森林
      • P300数据学习
    • ⚒️Pytorch
      • 1.1数据基础
      • 1.2自动梯度
      • 1.3神经网络
      • 1.4模型实现
      • 2数据操作
    • 🛠️Ray+Gym
    • 📃Graph Neural
      • 图神经网络基础
      • Contrastive Multi-View Representation Learning on Graphs
    • 📽️Deep Learning
      • 《第一章》
      • 《第二章》
      • 《第三章》
      • 《第四章》
      • 台湾陈蕴侬视频2020
    • 🔨MXNet
      • 《第一章》《第二章》
      • 《第三章》
      • 《第四章》
      • 《第五章》
      • 《第六章》
      • 《第七章》
      • 《第八章》
      • 《第九章》
      • 《第十章》
  • 👨‍🏭Study
    • 📔Algorithm
      • Leetcode
        • 第一天(乱刷)
        • 第二天(栈)
        • 第三天(栈)
        • 第四天(堆)(贪心)
        • 第五天(贪心)
        • 第六天(贪心)
        • 第七天(排序)
        • 第八天(排序)
        • 第九天(排序)
        • 第十天(位运算)
        • 第十一天(位运算)
        • 第十二天(位运算)
        • 第十三天(位运算)
        • 第十四天(树)
        • 第十五天(树)
        • 第十六天(树)
        • 第十七天(树)
        • 第十八天(树)
        • 第十九天(树)
        • 第二十天(树)
        • 第二十一天(树)
        • 第二十二天(并查集)
        • 第二十三天(并查集)
        • 第二十四天(DFS)(图)
        • 第二十五天(图)(设计)
        • 第二十六天(拓扑)
        • 第二十七天(字典树)
        • 第二十八天(字典树)
        • 第二十九天(树状数组)(二叉搜索树)
        • 第三十天(递归)
        • 第三十一天(脑筋急转弯)
        • 第三十二天(脑筋急转弯)
        • 第三十三天(记忆化)
        • 第三十四天(队列)
        • 第三十五天(队列)
        • 第三十六天(极小化极大)
        • 第三十七天(几何)
        • 第三十八天(蓄水池抽样)
        • 第三十九天(数组)
        • 第四十天(数组)
        • 第四十一天(数组)
        • 第四十二天(数组)
        • 第四十三天(数组)
        • 第四十四天(数组)
        • 第四十五天(数组)
        • 第四十六天(数组)
      • Sort
        • 最小堆
        • 归并排序(merge_sort)
    • 📓Knowledge
      • python补码
    • 🔧Other
      • pythonic语法
      • Ubuntu备忘
由 GitBook 提供支持
在本页

这有帮助吗?

导出为 PDF
  1. AI
  2. Pytorch

1.2自动梯度

import torch
# 设置跟踪向量
x = torch.ones(2, 2, requires_grad=True)
print(x)
tensor([[1., 1.],
        [1., 1.]], requires_grad=True)
y = x + 2
y
tensor([[3., 3.],
        [3., 3.]], grad_fn=<AddBackward0>)
help(y.grad_fn)
Help on AddBackward0 object:

class AddBackward0(object)
 |  Methods defined here:
 |  
 |  __call__(self, /, *args, **kwargs)
 |      Call self as a function.
 |  
 |  name(...)
 |  
 |  register_hook(...)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  metadata
 |  
 |  next_functions
 |  
 |  requires_grad
z = y  * y *3 # z =  (x+2)^2 *3
out = z.mean() # out = (x+2)^2 *3/4
z, out
(tensor([[27., 27.],
         [27., 27.]], grad_fn=<MulBackward0>),
 tensor(27., grad_fn=<MeanBackward0>))
a = torch.randn(2, 2)
a = ((a*3)/ (a-1))
# 默认为Flase
print(a.requires_grad)
# 设置梯度为True
a.requires_grad_(True)
print(a.requires_grad)
b = (a*a).sum()
print(b.grad_fn)
False
True
<SumBackward0 object at 0x7fd230a89d90>
# 求出out对x在x=1的偏导数
out.backward()
x.grad
tensor([[4.5000, 4.5000],
        [4.5000, 4.5000]])
x = torch.randn(3 , requires_grad=True)

y = x *2
# norm是求L2范数,平方之和而后开方
while y.data.norm() < 1000:
    y = y *2
print(y)
tensor([ 277.2757,    3.3198, -986.0908], grad_fn=<MulBackward0>)
v = torch.tensor([0.1, 1.0, 1.0], dtype=torch.float)
# 将向量v传递给backward
y.backward(v)
# 计算向量-雅可比积,也就是在x=v的时候的梯度
x.grad
# 下面表示2^11次方
tensor([ 204.8000, 2048.0000, 2048.0000])
print(x.requires_grad)
print((x ** 2).requires_grad)

# 取消求梯度
with torch.no_grad():
    print((x ** 2).requires_grad)
True
True
False
print(x.requires_grad)
# 取消求梯度
y = x.detach()
print(y.requires_grad)
print(x.eq(y))
True
False
tensor([True, True, True])
上一页1.1数据基础下一页1.3神经网络

最后更新于4年前

这有帮助吗?

🤖
⚒️