本地网站服务器搭建,网站窗口建设,北京市建设工程交易服务平台,seo在线培训机构排名设置梯度
直接在tensor中设置 requires_gradTrue#xff0c;每次操作这个数的时候#xff0c;就会保存每一步的数据。也就是保存了梯度相关的数据。
import torch
x torch.ones(2, 2, requires_gradTrue) #初始化参数x并设置requires_gradTrue用来追踪其计算历史
print(x…
设置梯度
直接在tensor中设置 requires_gradTrue每次操作这个数的时候就会保存每一步的数据。也就是保存了梯度相关的数据。
import torch
x torch.ones(2, 2, requires_gradTrue) #初始化参数x并设置requires_gradTrue用来追踪其计算历史
print(x)
#tensor([[1., 1.],
# [1., 1.]], requires_gradTrue)y x2
print(y)
#tensor([[3., 3.],
# [3., 3.]], grad_fnAddBackward0)z y*y*3 #平方x3
print(x)
#tensor([[27., 27.],
# [27., 27.]], grad_fnMulBackward0) out z.mean() #求均值
print(out)
#tensor(27., grad_fnMeanBackward0) 图1.1
想要修改的话x.requires_grad_(True)就把x变为可以追踪中间计算结果都保存的数了。
不想修改了
with torch.no_gard():c (a * a).sum() #tensor(151.6830),此时c没有gard_fn
把内容放在torch.no_gard():下就可以了
梯度计算
计算梯度直接调用.backward()就行。
例如上面图1.1out.backward()就行
获取梯度调用那个数.gard 注意如果.grad在循环中每次都会和之前的.grad叠加。
所以每次反向传播之后都需要把梯度变为0再进行操作。 使用.data获取里面的数据。相当于直接拷贝了一份数据而不改变原数据的内容。