首页 > 其他分享 >李沐动手学深度学习pytorch实践笔记

李沐动手学深度学习pytorch实践笔记

时间:2024-03-17 13:33:28浏览次数:22  
标签:labels 笔记 pytorch train 向量 李沐 data mnist d2l

1、pytorch中的矩阵乘法

2、标量对向量求导

3、pytorch的backward函数

4、如何直观理解梯度下降

梯度,是个向量,有方向和长度就是向量,向量里的各个元素是偏导、是标量对向量求导的那个偏导、是多元函数全微分里z对x、y求的那个偏导。

全微分dz所在的z轴是向上的,而梯度下降需要向下,所以要找负梯度方向,也就是移动了Δx和Δy之后,这个Δz的增量最大,他降低的最多,他最陡。这个向量怎么找,用方向导数,方向导数需要什么,需要偏导和角度,角度永远是0,因为cos0=1最大,所以只要有偏导就行。

所以,李沐课程第8节第3课,线性回归从零实践里,梯度下降循环了300次以更新系数w和b,这些系数就是梯度、是要找的向量。

每次更新之后,就以新的向量点的坐标为起点,继续计算方向导数,找到下一个Δz增量最大的向量。

5、课程第九节softmax回归有2个问题:

  1 load_data_fashion_mnist函数里FashionMNIST是下载不了图片集的,可以把torch里的load_data_fashion_mnist改成MNIST

def load_data_fashion_mnist(batch_size, resize=None):
    """Download the Fashion-MNIST dataset and then load it into memory.

    Defined in :numref:`sec_utils`"""
    trans = [transforms.ToTensor()]
    if resize:
        trans.insert(0, transforms.Resize(resize))
    trans = transforms.Compose(trans)
    mnist_train = torchvision.datasets.MNIST(
        root=".\\data", train=True, transform=trans, download=True)
    mnist_test = torchvision.datasets.MNIST(
        root=".\\data", train=False, transform=trans, download=True)
    return (torch.utils.data.DataLoader(mnist_train, batch_size, shuffle=True,
                                        num_workers=get_dataloader_workers()),
            torch.utils.data.DataLoader(mnist_test, batch_size, shuffle=False,
                                        num_workers=get_dataloader_workers()))

  标签也改成0~9,MNIST是识别手写数字的

def get_fashion_mnist_labels(labels):
    """Return text labels for the Fashion-MNIST dataset.

    Defined in :numref:`sec_utils`"""
    text_labels = ['0', '1', '2', '3', '4',
                   '5', '6', '7', '8', '9']
    return [text_labels[int(i)] for i in labels]

  这样以后就可以正常用 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)  加载图片数据集了

  2  pycharm中这一节的动画和图片不显示

  show_images函数后面 d2l.plt.show() 就可以显示图片

  在d2l的torch文件中,在 class Animator add函数最后两行中间加入两行代码

        display.display(self.fig)
        d2l.plt.draw()
        d2l.plt.pause(0.001)
        display.clear_output(wait=True)

  然后 调用 train_ch3 时,记得里面的Animator 类 要实例化 d2l的,如果改自己的Animator 就对应改它的add函数,最后调完train_ch3 函数在下面加上d2l.plt.show()就能显示动画

6、权重衰减

以softmax为例,求出的向量元素都是概率,这个向量作为损失函数的入参。所以一组大的或一组小的w和b,得到的都是概率组成的向量,最后损失函数的最小值是一样的,但是大的w和b会使特征放大,也使噪音放大了,那还不如选个小的w和b

正则化参数是限制w的Θ的倒数。所以λ=0,Θ无穷大;Θ无穷大,Θ=0
激活函数relu tanh 在原点附近接近f(x)=x,再配合合理的权重初始值,可以提升数值稳定性,防止梯度爆炸或消失
新加的层训练的是上一层的输出x和正确值之间的残差,最终训练的结果输出,就是新加层的残差输出Fx加上之前层的输出x

7、微调

现在都用基于预训练的模型和参数,然后进行微调,最后一层之前的,就基于预训练的参数和正常的学习率训练,因为这些参数变动不大,而最后的输出层变动很大,因此用10倍的学习率训练。很少有人会对所有参数重新训练,除非是大公司。

学术界和竞赛界是固定数据调模型,调试太多,验证集也变成训练集了,会过拟合。而工业界不需要调太多,需要提升数据质量,因为工业界不断有新数据,所以应该优化训练集的数据,找更多数据。

目标检测直接用别人写好的包,细节太多别自己写,Python 效率低,一般用c++或cuda 写

标签:labels,笔记,pytorch,train,向量,李沐,data,mnist,d2l
From: https://www.cnblogs.com/zhaot1993/p/17891759.html

相关文章

  • Pytorch实践学习笔记一(附可运行详细代码实例)
    一、Pytorch的诞生        2017年1月,FAIR(FacebookAIResearch)发布了PyTorch。PyTorch是在Torch基础上用python语言重新打造的一款深度学习框架。Torch是采用Lua语言为接口的机器学习框架,但是因为Lua语言较为小众,导致Torch学习成本高,因此知名度不高。......
  • python自动化——Requests——教程截图笔记复习
                                                                           123123......
  • FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
    ​学习FFmpeg的时候,经常要到GitHub下载各种开源代码,比如FFmpeg的源码页面位于https://github.com/FFmpeg/FFmpeg。然而国内访问GitHub很不稳定,经常打不开该网站,比如在命令行执行下面的ping命令。pinggithub.com上面的ping结果如下所示,可见默认解析的DNS地址连接超时。正在......
  • Android开发笔记[11]-长按图标显示快捷方式
    摘要配置长按图标的快捷方式.关键信息AndroidStudio:Iguana|2023.2.1Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zipjvmTarget='1.8'minSdk21targetSdk34compileSdk34开发语言:Kotlin,JavandkVersion='21.1.6352462�......
  • Android开发笔记[10]-关于页
    摘要构建关于页、最终用户许可页(EULA)页和隐私协议页;Compose页面中嵌入xml布局;Compose页面中添加markdown文本.关键信息AndroidStudio:Iguana|2023.2.1Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zipjvmTarget='1.8'minSdk......
  • 滴水逆向笔记系列-win32总结4-50.创建线程-51.线程控制_CONTEXT结构
    第五十课win32创建线程1.进程与线程程序就是在硬盘里还没跑起来的二进制文件,进程就是已经运行中的程序,一个进程至少有一个线程,比如一个正在举行的活动需要几十个人帮忙干活,进程就是那个活动,线程就是那几十个人一个线程启动是需要占用一个cpu的一个新线程也会创建一个新堆......
  • 滴水逆向笔记系列-win32总结5-52.临界区-53.互斥体
    第五十二课win32临界区1.线程安全问题其实就是多个线程同时对一个资源(即全局变量等)进行操作2.临界区设计图临界区的使用1、创建CRITICAL_SECTION: CRITICAL_SECTIONcs; 2、在使用前进行初始化 InitializeCriticalSection(&cs); ......
  • 滴水逆向笔记系列-win32总结1-43.宽字节-44.事件_消息_消息处理函数
    第四十三课win32宽字节1.编码0x00.ASCII码1、ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符2、标准ASCII码使用7位二进制数来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。3、扩展ASCII码允许将......
  • 滴水逆向笔记系列-win32总结2-45.esp寻址_定位回调函数-46.子窗口_消息处理函数-47.资
    第四十五课win32esp寻址_定位回调函数自己vs编译的exe入口函数好像和课程视频哩的vc6不一样,没办法跟着视频走,可以用课件里给的作业exe勉强跟着视频学,前面的都差不多,课件下载地址:https://www.bcdaren.com/video/videoPlay/3303185150621818881.win32应用程序入口识别没加过壳......
  • 滴水逆向笔记系列-win32总结3-48.提取图标_修改标题-49.通用控件_实现LoadPE
    第四十八课win32提取图标_修改标题1.添加图标a,.右键添加icon时不要直接新建,导入b.加载图标:::infoHICONhIcon;hIcon=LoadIcon(hAppInstance,MAKEINTRESOURCE(IDI_ICON));hAppInstance 应用程序句柄IDI_ICON 图标编号MAKEINTRESOURCE 用这个宏的主要原因......