• 人工智能基础第一次作业


    PyTorch安装

    PyTorch可以在 https://pytorch.org/get-started/locally/ 网站进行安装。

    由最新的pytorch的windows版本不支持CUDA-10.2,所以我选择CUDA 11.3.下面是用pip进行安装
    在这里插入图片描述
    复制Run this Command里的命令,打开cmd输入.
    安装完毕后进行测试,发现已经安装成功!
    在这里插入图片描述
    Conda安装首先你要有安装Anaconda3, 然后打开Anaconda Prompt,在里面输入Run this Command里的即可,出现下面提示时选择y即可
    请添加图片描述
    如果安装太慢,可以先在Anaconda Prompt输入下面的命令更换镜像源

    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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
    
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
    
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    更换了之后,需要把官网给出的命令后面-c pytorch删除,因为-c命令是指定下载源

    PS:安装的时候要把梯子关掉,不然会报ProxyError

    pytorch实现反向传播
    首先,反向传播算法的目的是找到一组能最大限度地减小误差的权重,在反向传播中使用的方法是梯度下降法。 在这个算法中,误差会从输出结点反向传播到输入结点。

    1.链式法则
    在学习反向传播之前,首先要知道链式法则是什么东西。
    在这里插入图片描述
    这就是基本的链式法则,他会形成如下的计算图(三个单变量的情况):
    请添加图片描述
    计算误差函数对权重的导数
    设误差函数为C CC,权重为w i w_iw
    i

    ,如下图(下面所有的图均来自ML Lecture 7):
    请添加图片描述
    那么有
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    会发现仅仅是两层,式子就变得非常复杂,如果要计算当前层的答案,必须要把下一层的东西计算出来。

    但是如果从输出端往前推,会发现计算变得与前向传播一样,很好计算。

    请添加图片描述
    pytorch实现
    下面是代码实现(代码来自:Pytorch深度学习(三):反向传播)

    import torch
    import matplotlib.pyplot as plt
    x_data = [1.0,2.0,3.0]
    y_data = [2.0,4.0,6.0]
    
    w = torch.Tensor([3.0])  #初始化权重
    w.requires_grad = True    #说明w需要计算梯度
    
    # 注意其中w是tensor,在实际运算中开始进行数乘。
    def forward(x):
        return w*x
    
    # 损失函数的求解,构建计算图,并不是乘法或者乘方运算
    def loss(x,y):
        y_pred = forward(x)
        return (y_pred - y) ** 2
    
    print("Predict before training",4,forward(4).item())  ## 打印学习之前的值,.item表示输出张量的值
    
    learning_rate = 0.01
    epoch_list = []
    loss_list =[]
    #训练
    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之中,随后释放计算图,w.grad.item():取出数值
            w.data = w.data - learning_rate*w.grad.data # 张量中的grad也是张量,所以取张量中的data,不去建立计算图
            w.grad.data.zero_()  # 释放data
        print("process:",epoch,l.item())
        epoch_list.append(epoch)
        loss_list.append(l.item())
        
    print('Predict after training', 4, forward(4).item())
    
    #绘制可视化
    plt.plot(epoch_list,loss_list)
    plt.xlabel("epoch")
    plt.ylabel("Loss")
    plt.show()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    可以在可视化图中看到,随着迭代次数的增加,损失函数的值越来越小在这里插入图片描述

  • 相关阅读:
    AndroidT(13) -- natvie LOG 输出的实现(三)
    【Android - 技术期刊】第004期
    Netty——基础(笔记)
    Skia4Dephi 的 Demo 程序界面架构分析
    Kubernetes基于helm部署Kafka_Kraft集群并取消SASL认证且开启数据持久化
    手机电池容量计算及相关理论知识
    curl verbose模式有什么用
    3A4000架构银河麒麟V10编译安装filezilla
    实施过程中的几个方面
    openGauss学习笔记-90 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用重试中止事务
  • 原文地址:https://blog.csdn.net/IHuskY/article/details/126290766