栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

人工智能-作业1:配置PytTorch环境并利用PyTorch实 现反向传播

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

人工智能-作业1:配置PytTorch环境并利用PyTorch实 现反向传播

人工智能-作业1:配置PytTorch环境并利用PyTorch实 现反向传播 安装PyCharm
  1. 进入官网下载安装包https://www.jetbrains.com/pycharm/download/#section=windows;
  2. 进行安装,按照下图进行勾选
  3. 安装成功
安装Python
  1. 进入官网下载https://www.python.org/downloads/release/python-3104/

  2. 进行安装

  3. 配置环境变量,将python安装地址复制进去

  4. 功能检测,cmd输入python进行检测,则安装成功

安装PyCharm
  1. 安装Anaconda
    https://www.anaconda.com/products/distribution#Downloads

  2. 安装CUDA 10.0
    谷歌搜索“cuda download”进入https://developer.nvidia.com/cuda-downloads
    然后选择win10版本的local版本,点击右下角的dowload,大概2.4G左右

  3. Pytorch的安装
    打开pytorch官网,即https://pytorch.org/,点击“install”,然后进入版本的选择页面。
    然后将下面这条Command命令复制,以管理员身份运行cmd,并将刚刚这条命令粘贴到控制台上。即可安装。

  4. 安装pycharm并进行环境配置

    ##实现反向传播

由于不是很懂这一块的知识,于是去看了几篇大佬的博客进行了恶补……
先贴代码

import torch
 
# 假设w的初始值为1.0,并通过设置 requires_grad标识为Ture来
# 告诉Pytorch需要对该张量进行自动求导,PyTorch会记录该张量的每一步操作历史并自动计算
w = torch.tensor([1.0], requires_grad=True)
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
 
 
# 定义损失函数、
 
def forward(x):  # y^ = wx
 
    return x * w  # w是tensor 所以 这个乘法自动转换为tensor数乘 , x被转化成tensor 这里构建了一个计算图
 
 
def loss(x, y):  # 计算单个的误差 : 损失
 
    '''
    每调用一次loss函数,计算图自动构建一次
    :param x:
    :param y:
    :return:
    '''
    y_pred = forward(x)
    return (y_pred - y) ** 2
 
 
eli = []
lli = []
print('predict(before training)', 4, forward(4).item())
 
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_()
 
    eli.append(epoch)
    lli.append(l.item())
    print('progress:', epoch, l.item())
print('predict(after training)', 4, forward(4).item())

关于链式法则:假设有两个运算或两个函数,a(x)=y,b(y)=z,现在想最小化z,则需要知道z的相对开始的x的导数,则先计算z关于y的导数,然后乘以y关于x的导数,最终得到结果
关于计算图:用张量做的每一个操作pytorch都会创建一个图形,所以在每一个节点应用函数通过输入得到输出,在节点中可以计算局部梯度,例如f=x*y=z,则计算z关于x和y的梯度,分别是y和x,由于最终要计算一个想要最小化的损失函数,所以要计算关于损失相对x的梯度,又由于链式法则,损失对x的梯度就是对z的梯度乘以局部梯度z对x的导数
具体步骤:
1,前向传播,应用所有函数计算损失
2,在每个点上计算梯度
3,做后向传播,计算损失的梯度关于我们的权值或参数,使用链式法则
Pytorch 里面数据最基本的成员是 Tensor,它是用来存储数据的,它可以存标量,向量,矩阵或者高阶的 Tensor。它里面包含两个重要成员 data 和 grad。data 用来保存权重 w,grad 用来保存损失函数 Loss 对权重 w 的导数。
然后贴一张我觉得很直观的图在下面,模拟pytorch的计算过程

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/854370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号