人工智能-作业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实现反向传播的全部内容!