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

首先是安装一些软件,包括 :

**PcCharm Community版本:**
这个比较简单,官网下载然后一直下一步即可。
然后要下载**Python**:
然后是 **Pytorch**,这个比较麻烦。

参照下面博客下载基本没问题:

这个是安装流程

需要先下载Anaconda,也比较简单。

然后需要比较一些资料:

Pytorch逐层前向传播必须手动flatten吗_PyTorch


然后Torch官网选择下载方式:

电脑是核显选择CPU即可。

Pytorch逐层前向传播必须手动flatten吗_环境配置_02


下载过程中的问题:

下载速度慢,甚至一些资源下载失败:
解决方法
:使用Anaconda清华镜像源的使用及安装Pytorch失败问题解决

运行以下命令,将清华镜像添加至Anaconda仓库中

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

导入成功后在按照官网的下载连接进行下载即可。

注意:

Pytorch逐层前向传播必须手动flatten吗_损失函数_03


要将后面的 -c pytorch 去掉在下载!!

到这里基本下载成功,然后在使用过程中可能出现 未引入torch的情况,可参考这个进行修改:

以上下载流程和出现的问题皆是本人亲身经历,按照上述流程成功完成了软件的下载和使用。

使用Pytorch实现反向传播

前向传播全程为y=w∗x+b进行计算的一个例子,每一次变换都为线性变换
代码如下:

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

结果如下:

Pytorch逐层前向传播必须手动flatten吗_环境配置_04