人工智能-作业1:PyTorch实现反向传播

人工智能-作业1:PyTorch实现反向传播

PyCharm 安装

打开PyCharm官网,选择安装Community社区版本。
在这里插入图片描述
设置好安装路径,然后下一步
在这里插入图片描述
等待安装完成。之前已经安装过python。
接下来配置环境变量。打开高级设置,点击环境变量。
在这里插入图片描述

安装完成后打开Pycharm,检查是否可以正常使用,点击New Project,新建一个项目。
在这里插入图片描述
运行程序成功:
在这里插入图片描述
进入File->Setting,添加新的模块
在这里插入图片描述
若有需要则在此处添加即可。

PyTorch安装

查看自己的显卡驱动版本号:
在这里插入图片描述
找到适合计算机的CUDA版本:
在这里插入图片描述
进入PyTorch安装
在这里插入图片描述
CMD命令行窗口安装:
在这里插入图片描述
在conda安装过程中安装到pytorch时候就失败了,提示让我反复尝试,依然失败。于是重新选择pip安装,(安装过程中可能会因为网络原因失败,多尝试几次即可),安装完成后在Anconda Prompt中检查。
在这里插入图片描述

反向传播

训练过程中不断更新w使损失减小,可以得到一般简单的线性更新计算的解析式为:
在这里插入图片描述
其中,α称为学习率。采用贪心策略,得到对应的Loss Function:
在这里插入图片描述
对于我们常用的复杂的网络时,如果还是按照上述的求解ω方法,则我们需要花费大量的时间来求解相应网络连接中的权重ω,因此,我们考虑用反向传播,以求解图的方式来求解对应的权重ω:
在这里插入图片描述
Pytorch 里面数据最基本的成员是 Tensor,它是用来存储数据的,它可以存标量,向量,矩阵或者高阶的 Tensor。它里面包含两个重要成员 data 和 grad。data 用来保存权重 w,grad 用来保存损失函数 Loss 对权重 w的导数。

最后通过代码实现如下:

在我运行的过程中提示我没有torch和matplotlib包,命令行窗口使用命令“pip list”查看找到了这两个包。
在这里插入图片描述
在这里插入图片描述
尝试添加安装
在这里插入图片描述
在这里插入图片描述
安装依然失败,错误信息显示包版本可能可以更新:
在这里插入图片描述
更新如下:
在这里插入图片描述
更新后安装依然失败
在这里插入图片描述
错误提示检查命令排除IDE问题。
在这里插入图片描述
命令检查无误!
在这里插入图片描述
最后在同学的帮助下,尝试增加解释器,在cmd窗口查找py路径,然后添加。
在这里插入图片描述

添加结果如下在这里插入图片描述
添加完成后则解决了问题,代码可以正常运行。

初始数据:

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 loss(x,y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

先计算损失函数loss,然后通过反向传播的方式计算权重w,在实验结果中可以看到虽然计算次数的增加,损失函数逐渐减小。

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
# 权重初始值(设置w的初始值),在grad求导时会将这里设置的初始值带入
# Tensor创建时默认不计算梯度,需要计算梯度设置为ture,自动记录求w的导

# y_predict = x * w
def forward(x):
    return x * w
# 损失函数,return激活函数后得到的
def loss(x,y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

# 训练过程
# 第一步:先算损失Loss
# 第二步:backward,反向传播
# 第三步:梯度下降
for epoch in range(100):    #训练100次
    for x, y in zip(x_data,y_data) :
        l = loss(x,y)           # 前向传播,求Loss(损失函数),构建计算图
        l.backward()            # 反向传播,求出计算图中所有梯度存入w中
        print("\tgrad: ",x,y,w.grad.item())
                                # w.grad.data:获取梯度,用data计算,不会建立计算图,每次获取叠加到grad
        w.data = w.data - 0.01 * w.grad.data     # 修正一次w,learningrate=0.01(类似步长

        w.grad.data.zero_()     # 注意:将w中记录的梯度清零,消除本次计算记录,只保留新的w,开启下一次前向传播
    print("pregress:", epoch, l.item()) # item取元素精度更高,得到的是loss

运行结果:
grad: 1.0 2.0 -7.152557373046875e-07
grad: 2.0 4.0 -2.86102294921875e-06
grad: 3.0 6.0 -5.7220458984375e-06
pregress: 99 9.094947017729282e-13

参考文档:

PyCharm 安装教程(Windows)
Pycharm:从国内镜像导入matplotlib库时安装失败
pycharm-package安装报错
PyTorch Autograd自动求导
06 PyTorch实现反向传播

以上为人工智能-作业1:PyTorch实现反向传播的全部内容!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值