Pytorch (一) 杂七杂八整理

        tensor 包含有 requires_grad属性,意为计算梯度值 设置为True时,会计算该张量的梯度,相反False不会计算梯度。通过调用反向传播方法:.backward(),计算梯度值,并且积累到.grad属性上,所以在每次反向传播时,一般需要把梯度置零,.zero_grad()方法。

实例:(请注意各个方法应该是由谁调用)

# optimizer 是优化器
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)  # 传入 net 的所有参数, 学习率
loss_func = torch.nn.MSELoss()      # 损失函数为均方误差

for t in range(100):
    prediction = net(x)     # 把数据加入网络

    loss = loss_func(prediction, y)     # 计算误差

    optimizer.zero_grad()   # 清空上一步的梯度值
    loss.backward()         # 误差反向传播, 计算梯度值
    optimizer.step()        # 将参数更新值施加到网络上

tensor中的data封装了方法norm 用于返回模

x = torch.ones(3)
print(x.data.norm)

torch中自动计算梯度的例子

from __future__ import print_function
import torch
x = torch.ones(2,2,requires_grad=True)
print(x)
y = x + 2
print(y)
print(y.grad_fn)
z = y*y*3
# z = 3*(x+2)^2
# z'=6*(x+2)

out = z.mean()#均值
print(z,out)

out.backward()
print(x.grad)

o = z/4

输出

tensor([[ 1.,  1.],
        [ 1.,  1.]])
tensor([[ 3.,  3.],
        [ 3.,  3.]])
<AddBackward0 object at 0x7f64b2615e10>
tensor([[ 27.,  27.],
        [ 27.,  27.]]) tensor(27.)
tensor([[ 4.5000,  4.5000],
        [ 4.5000,  4.5000]])



猜你喜欢

转载自blog.csdn.net/SpringQAQ/article/details/80911097