pytorch -- 反向传播

根据上次学习的内容,在进行随机梯度下降算法的时候要不断更新权重,而复杂的loss函数会导致

权重更新的难以计算因此这时候就要用到反向传播算法来方便的进行计算

反向传播--backward

19db68a16abd42388dbb82e5caeb8669.png

 这是全连接神经网络的两层计算 比如 x 可以是n列的向量  w1 可以是一个mxn 的矩阵 MM 就是矩阵乘法的缩写 根据矩阵乘法 计算以后 得到一个m 行 一列的矩阵 接下来再传到第二个计算图中

但是

1879a68f5f4f4c3cb6e275c7a645532b.png

 最后会化简成这样一个形式,那样就没有意义了 所以要在后面加一个 非线性函数来保证他不能展开才是一个神经网络

a94117851b9d44359b2d6378b8f6abb0.png

 对于一个张量进行求导也要遵循链式法则 由此引出了 反向传播算法

5c6beba9d0fb4a0c82873a3c9dd84044.png

反向传播的原理就是先正向传播到最后,再反向逆推回去从而方便求导 

ac6c73de6932444db7d28494bc1e41c3.png

 在pytorch 如何进行前馈和反馈的计算

还是之前的线性模型的例题

代码如下:

import torch

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

w = torch.tensor([1.0])
w.requires_grad = True

def forward(x):
    return x * w

def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y)**2
print("predect (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("epoch", epoch, x, y, w.grad.item())
        w.data = w.data - 0.01 * w.grad.item()
    print("predice (after training)", 4, forward(4).item())

重点问题:

1. 在计算图里面进行运算的量都要是张量 也就是里面直接  x*w  等,且标注w 是需要计算梯度的

63ac9d51dfc54b9a80cd92a951f91d80.png

921199a525854a2abab0f0f0c892f087.png

 2.随机梯度下降算法的随机体现在样本的随机提取上。随机梯度下降算法不是用所有的数据来计算梯度,而是每次只用一个或者一小批数据来计算梯度。这样可以加快计算速度,也可以避免陷入局部最优解。  这里对应的就是梯度下降算法是将所有样本呢求完以后求均值

f971f5e927284df7b49d71c062c62db4.png

 3.进行权重更新的时候使用的是w的数据而不是这个张量本身, 如果你使用了w而非w.data的话,那么结果会是错误的。你的w会变成一个新的张量,它的数值和梯度都会和原来的w不一样。你的模型就不能正确地学习了,你的loss也不会下降了。所以你一定要用w.data来更新w,这样才能保证你的模型能够正确地优化,如果你用w进行计算,PyTorch会把它当作一个新的计算图的节点,而不是原来的计算图的参数。这样的话,你就不能更新原来的w了,而是创建了一个新的张量。所以你要用w.data来表示w的数值,这样PyTorch才能知道你是在更新原来的w,而不是创建一个新的张量

其中  tensor 是一个张量 用来在计算图中进行运算 , tensor.data 也是张量但用于 权重的更行 tensor.item(),用来将张量转化为标量用来展示数据

课后作业

1: x = 2 ,y = 4 

7ed43fa24d9b40c6bac160e160694e33.png

2. 将模型变更为y = x*w +b 

88d2247cebe04af9ad8ac7a1216a9e18.png

作业答案:

1.

cb015fc061014146bd1e1a4b714afa6f.png

 2.

b21414ef437b494e91646fcd373a8d67.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小户爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值