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

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


一、安装PyCharm,配置好python开发环境
1.配置环境变量:python下载地址
下载后,双击下载包,进入 Python 安装向导,安装非常简单,你只需要使用默认的设置一直点击"下一步"直到安装完成即可。(作者下载的python3.9.7)
安装好之后,进入高级系统设置,找到环境变量中的系统变量,然后再path中加入python的安装路径,使用win+R键打开命令提示符,输入python,若出现Python版本号则配置成功。
人工智能作业1:PyTorch实现反向传播_第1张图片
具体可参考:python环境配置|菜鸟教程

二、PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,下面进行PyCharm 安装:PyCharm 下载地址(推荐使用社区版Community,因为社区版是免费的)
具体安装和配置教程可参考:具体安装教程|菜鸟教程
注:教程中安装时第二步如出现如下界面,按下图勾选
人工智能作业1:PyTorch实现反向传播_第2张图片
安装和配置完成后,运行一个python程序验证:
人工智能作业1:PyTorch实现反向传播_第3张图片

如图,PyCharm安装成功!

三、安装pytorch
安装Anaconda:下载地址
安装后,进入Anaconda Prompt
人工智能作业1:PyTorch实现反向传播_第4张图片

输入conda create -n pytorch python=3.9.7,创建pytorch环境
输入activate pytorch进入创建的pytorch环境
人工智能作业1:PyTorch实现反向传播_第5张图片

找到.condarc这个文件(文件地址C:\Users\admin.condarc),将文件用记事本打开,删除原内容,将以下代码复制到文件中

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
ssl_verify: true

进入官网:pytorch下载地址
进行配置,配置如下
人工智能作业1:PyTorch实现反向传播_第6张图片

复制Run this Command中的地址(去掉 -c pytorch):
conda install pytorch torchvision torchaudio cudatoolkit=11.3
在环境中输入地址:在这里插入图片描述
进行安装,安装后进入配置:
安装完成后在命令行输入python,之后再输入import touch,若无报错则安装完毕。
在这里插入图片描述
在这里插入图片描述

三、使用pytorch进行反向传播:
代码如下:

import torch
import numpy as np

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  # 是否需要计算梯度,Tensor创建之 后默认不计算梯度


# y_predict=x*w
def forward(x):
    return x * w


def loss(x, y):  # 损失函数
    y_pred = forward(x)
    return (y_pred - y) ** 2


# 训练过程
# 第一步:先算损失Loss
# 第二步: backward, 反向传播
# 第三步:梯度下降
for epoch in range(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.data = w.data - 0.01 * w.grad.data  # w.. grad. data:获取梯度,用data计算, 不会建立计算图

        w.grad.data.zero_()  # 注意:将w中所有梯度清零
    print("pregress:", epoch, l.item())

结果如下(部分):
人工智能作业1:PyTorch实现反向传播_第7张图片

四、自动求导:

import torch
#①创建一个张量并设置requires_grad=True用来追踪其计算历史
x = torch.ones(2, 2, requires_grad=True)
print(x)
#②对这个张量做一次运算:②
y = x + 2
print(y)
print(y.grad_fn)#y是计算的结果,所以它有grad_fn属性
#③对y进行更多操作:
z = y * y * 3
out = z.mean()
print(z, out)
'''④.requires_grad_(...) 原地改变了现有张量的 requires_grad 标志。
如果没有指定的话,默认输入的这个标志是False'''
a = torch.randn(2, 2)
a = ((a * 3) / (a - 1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b = (a * a).sum()
print(b.grad_fn)

'''⑤梯度,因为out是一个标量。所以让我们直接进行反向传播,
out.backward()和out.backward(torch.tensor(1.))等价'''
out.backward()

#输出导数d(out)/dx
print(x.grad)


结果:
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

计算过程实质就是一个标量函数对于各个分量求偏导数
详情参考:PyTorch Autograd自动求导_w3cschool

你可能感兴趣的:(python)