文章目录

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



一、PyCharm的安装

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

二、安装Pytorch环境

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

获取pytorch前向传播计算图 pytorch自定义反向传播_机器学习

2.在CMD执行安装命令

  由于服务器在国外,所以直接下载速度较慢,可以配置清华的镜像提高下载速度

获取pytorch前向传播计算图 pytorch自定义反向传播_反向传播_02

参考博客: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

 可以看到配置完成后速度有较大提升

获取pytorch前向传播计算图 pytorch自定义反向传播_迭代_03

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

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

  1. 进入PyCharm设置
  2. 选择show all
  3. 获取pytorch前向传播计算图 pytorch自定义反向传播_python_04

  4. 选择文件并导入
  5. 获取pytorch前向传播计算图 pytorch自定义反向传播_获取pytorch前向传播计算图_05

  6. 新建测试python代码
from __future__ import print_function
import torch
x =  torch.empty(5,3)
print(x)
  1. 选择环境并运行代码
    选择运行环境


    运行成功会出现如下结果:

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

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())

 运行结果:

获取pytorch前向传播计算图 pytorch自定义反向传播_获取pytorch前向传播计算图_06


 将算法收敛情况可视化输出

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()

输出结果

获取pytorch前向传播计算图 pytorch自定义反向传播_python_07

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

η=0.001

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

算法收敛情况:

获取pytorch前向传播计算图 pytorch自定义反向传播_机器学习_08

η=0.005

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

算法收敛情况:

获取pytorch前向传播计算图 pytorch自定义反向传播_python_09

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


四、 总结

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