PyTorch学习——autograd: 自动微分

from __future__ import print_function
import torch as t
import numpy as np

# 分割测试样例
print('-'*30)

# 要想使得 Tensor 使用autograd功能,只需要设置tensor.requries_grad=True.

# 为 tensor 设置 requires_grad 标识,代表着需要求导数
# pytorch 会自动调用 autograd 记录操作
x = t.ones(2, 2, requires_grad=True)
# 上一步等价于
# x = t.ones(2, 2)
# x.requires_grad = True
print('x: \n' + str(x))

# y = x.sum() = (x[0][0] + x[0][1] + x[1][0] + x[1][1])
y = x.sum()
print('y: \n' + str(y))

# .grad_fn 表明该变量是怎么来的
# <SumBackward0 object at 0x000001A9AD118438>,表明 y 是 sum() 得来的
print('y.grad_fn: \n' + str(y.grad_fn))

# 分割测试样例
print('-'*30)

y.backward()
# 每个值的梯度都为1
print('y.backward() -x.grad: \n' + str(x.grad))

# 分割测试样例
print('-'*30)

y.backward()
# grad在反向传播过程中是累加的(accumulated),
# 这意味着每一次运行反向传播,梯度都会累加之前的梯度,
# 所以反向传播之前需把梯度清零。
print('y.backward() -x.grad: \n' + str(x.grad))

y.backward()
print('y.backward() -x.grad: \n' + str(x.grad))

# 分割测试样例
print('-'*30)

# 以下划线结束的函数是 inplace 操作,会修改自身的值,就像add_
print('x.grad.data.zero_(): \n' + str(x.grad.data.zero_()))

y.backward()
print('y.backward() -x.grad: \n' + str(x.grad))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值