Pytorch深度学习实践3—反向传播

所谓反向传播,我的理解就是求参数的梯度

这里用pytorch实现了反向传播的过程,用的是SGD随机梯度算法

代码展示:
 

import torch
x_data=[1.0,2.0,3.0]
y_data=[2.0,4.0,6.0]
#初始化w
w=torch.Tensor([1.0])
#表明w 需要计算梯度,需要特意说明
w.requires_grad=True
def forward(x):
    #计算的是一个数乘,x会进行自动的类型转换
    return  x*w;
#构建损失函数,构建了一个计算图
def loss(x,y):
    y_pred=forward(x)
    return (y_pred-y)**2
print("predict(before training )",4,forward(4).item())
#开始训练,采用随机梯度下降的算法,每一次,都将x,y进行zip成为一个元组样本
for epoch in range(100):
    for x,y in zip(x_data,y_data):
        #前馈过程,构建出一个计算图,forward
        l=loss(x,y)
        #自动求出计算图中所有需要梯度的地方,backward
        l.backward()

        print('\tgrad:',x,y,w.grad.item())
        # grad是一个tensor,所以一定要取到他的data数据,否则就是进行计算图运算,w也是同理
        w.data=w.data-0.01*w.grad.data
        #将权重里面梯度的数据全部清零
        w.grad.data.zero_()
        print("progress:",epoch,l.item())
print("predict (after training)",4 ,forward(4).item())
"""
.data

将Variable变成tensor形式的数据,但是不放入梯度图中,即不计算梯度。

.item()

将tensor类型数据转变成float型
"""

结果展示:

在这里唠两句,因为还在学运筹学,感觉两者的优化基本原理好像哦。

pytorch中用到的都是张量,tensors 类似于 NumPy 的 ndarrays ,同时 Tensors 可以使用 GPU 进行计算,运算速度会更快一些哦,希望大家都成功安装下来pytorch,我之前跟着别人的教程复刻了一个gpt-chinese很有意思,大家有兴趣也可以试一试。

今天也要加油!!!!!!!!!冲!!!!!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值