pytorch反向传播

误差反向传播(Back-propagation, BP)算法的出现是神经网络发展的重大突破,也是现在众多深度学习训练方法的基础。该方法会计算神经网络中损失函数对各参数的梯度,配合优化方法更新参数,降低损失函数。

BP本来只指损失函数对参数的梯度通过网络反向流动的过程,但现在也常被理解成神经网络整个的训练方法由误差传播、参数更新两个环节循环迭代组成。

源程序

import torch

# 假设w的初始值为1.0,并通过设置 requires_grad标识为Ture来
# 告诉Pytorch需要对该张量进行自动求导,PyTorch会记录该张量的每一步操作历史并自动计算
w = torch.tensor([1.0], requires_grad=True)
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]


# 定义损失函数、

def forward(x):  # y^ = wx

    return x * w  # w是tensor 所以 这个乘法自动转换为tensor数乘 , x被转化成tensor 这里构建了一个计算图


def loss(x, y):  # 计算单个的误差 : 损失

    '''
    每调用一次loss函数,计算图自动构建一次
    :param x:
    :param y:
    :return:
    '''
    y_pred = forward(x)
    return (y_pred - y) ** 2


eli = []
lli = []
print('predict(before training)', 4, forward(4).item())

for epoch in range(100):
    for x, y in zip(x_data, y_data):
        l = loss(x, y)
        l.backward()  # 自动求梯度
        print('\tgrad:', x, y, w.grad.item())
        w.data = w.data - 0.01 * w.grad.data

        # 清空权重,不然梯度会累加
        w.grad.data.zero_()

    eli.append(epoch)
    lli.append(l.item())
    print('progress:', epoch, l.item())
print('predict(after training)', 4, forward(4).item())

在pytorch使用Autograd模块实现深度学习的反向传播求导,tensor类本身就支持了使用autograd功能,因此需要使用该功能时,可以将.requires_grad=True。通过grad属性保持对应的数据;因此,可以通过xxx.grad查看对应的梯度值。

PyTorch会自动追踪和记录对与张量的所有操作,当计算完成后调用.backward()方法自动计算梯度并且将计算结果保存到grad属性中

最终迭代结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值