【人工智能基础作业1:PyTorch实现反向传播】

文章目录

  • 一、PyCharm的安装
  • 二、安装Pytorch环境
    • 1.进入Pytorch选择选择相关版本
      •  a.复制安装命令
    • 2.在CMD执行安装命令
      •  a.直接在cmd下载
      •  b.配置清华镜像
    • 3.在PyCharm中导入环境并测试
  • 三、使用配置的环境进行反向传播和自动求导实验
    • 1.反向传播实验
    • 2.更换步长值查看算法的收敛情况
  • 四、 总结


一、PyCharm的安装

安装Python,并安装PyCharm开发环境。
由于机器学习实验要用到Python以及开发环境,所以已经事先安装完成。

二、安装Pytorch环境

1.进入Pytorch选择选择相关版本

 a.复制安装命令

【人工智能基础作业1:PyTorch实现反向传播】_第1张图片

2.在CMD执行安装命令

 a.直接在cmd下载

  由于服务器在国外,所以直接下载速度较慢,可以配置清华的镜像提高下载速度
【人工智能基础作业1:PyTorch实现反向传播】_第2张图片

 b.配置清华镜像

参考博客:Windows下更换pip源为清华源
 1.打开appdata文件夹,在资源管理器的地址栏输入%appdata%后回车
 2.新建一个pip文件夹,在pip文件夹里面新建一个配置文件pip.ini
 3.在配置文件中输入如下内容后保存

[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn

 可以看到配置完成后速度有较大提升
【人工智能基础作业1:PyTorch实现反向传播】_第3张图片

3.在PyCharm中导入环境并测试

参考文档:Pytorch 安装及使用(Pycharm 版)

  1. 进入PyCharm设置

  2. 选择show all
    【人工智能基础作业1:PyTorch实现反向传播】_第4张图片

  3. 选择文件并导入
    【人工智能基础作业1:PyTorch实现反向传播】_第5张图片

  4. 新建测试python代码

from __future__ import print_function
import torch
x =  torch.empty(5,3)
print(x)
  1. 选择环境并运行代码
    选择运行环境
    【人工智能基础作业1:PyTorch实现反向传播】_第6张图片
    【人工智能基础作业1:PyTorch实现反向传播】_第7张图片
    运行成功会出现如下结果:
    【人工智能基础作业1:PyTorch实现反向传播】_第8张图片

三、使用配置的环境进行反向传播和自动求导实验

1.反向传播实验

 参考博客:06 Pytorch实现反向传播

 定义损失函数:

def loss(x, y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

 调用backward函数计算每个权重的梯度值:

l.backward()  

 迭代100轮,查看算法的收敛情况,此时步长为0.01

for epoch in range(100):
    for x, y in zip(x_data, y_data):
        l = loss(x, y)  
        l.backward()  
        print("\tgrad: ", x, y, w.grad.item())
        w.data = w.data - 0.01 * w.grad.data 
        w.grad.data.zero_() 

    print("pregress:", epoch, l.item())

 运行结果:
【人工智能基础作业1:PyTorch实现反向传播】_第9张图片
 将算法收敛情况可视化输出

x = np.arange(0.0, 100, 1)
plt.scatter(x, lo)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

plt.xlabel(u"迭代次数")
plt.ylabel(u"损失函数值")

plt.show()

输出结果
【人工智能基础作业1:PyTorch实现反向传播】_第10张图片

2.更换步长值查看算法的收敛情况

η=0.001

   w.data = w.data - 0.001 * w.grad.data 

算法收敛情况:
【人工智能基础作业1:PyTorch实现反向传播】_第11张图片

η=0.005

   w.data = w.data - 0.005 * w.grad.data 

算法收敛情况:
【人工智能基础作业1:PyTorch实现反向传播】_第12张图片

 可以看到对于不同的步长,算法收敛的程度和快慢不同,这是由于对于不同的步长,梯度下降算法获得最优解的情况不同。这就是神经网络模型获得良好模型的一个重要方法:调参


四、 总结

 使用Pytorch可以快速求出损失函数对于各个权重的偏导,这个偏导值就是梯度,再搭配梯度下降法对权重向量进行调整。这样结果多轮的调整的迭代后,可以获得一个较为理想的神经网络模型。

你可能感兴趣的:(python,机器学习)