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 写

李沐动手学深度学习pytorch实践笔记的更多相关文章

  1. 《动手学深度学习》系列笔记—— 1.2 Softmax回归与分类模型

    目录 softmax的基本概念 交叉熵损失函数 模型训练和预测 获取Fashion-MNIST训练集和读取数据 get dataset softmax从零开始的实现 获取训练集数据和测试集数据 模型参 ...

  2. 《动手学深度学习》系列笔记 —— 语言模型(n元语法、随机采样、连续采样)

    目录 1. 语言模型 2. n元语法 3. 语言模型数据集 4. 时序数据的采样 4.1 随机采样 4.2 相邻采样 一段自然语言文本可以看作是一个离散时间序列,给定一个长度为\(T\)的词的序列\( ...

  3. 小白学习之pytorch框架(2)-动手学深度学习(begin-random.shuffle()、torch.index_select()、nn.Module、nn.Sequential())

    在这向大家推荐一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比 ...

  4. 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF

    随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...

  5. 【动手学深度学习】Jupyter notebook中 import mxnet出错

    问题描述 打开d2l-zh目录,使用jupyter notebook打开文件运行,import mxnet 出现无法导入mxnet模块的问题, 但是命令行运行是可以导入mxnet模块的. 原因: 激活 ...

  6. 动手学深度学习9-多层感知机pytorch

    多层感知机 隐藏层 激活函数 小结 多层感知机 之前已经介绍过了线性回归和softmax回归在内的单层神经网络,然后深度学习主要学习多层模型,后续将以多层感知机(multilayer percetro ...

  7. mxnet 动手学深度学习

    http://zh.gluon.ai/chapter_crashcourse/introduction.html 强化学习(Reinforcement Learning) 如果你真的有兴趣用机器学习开 ...

  8. 动手学深度学习14- pytorch Dropout 实现与原理

    方法 从零开始实现 定义模型参数 网络 评估函数 优化方法 定义损失函数 数据提取与训练评估 pytorch简洁实现 小结 针对深度学习中的过拟合问题,通常使用丢弃法(dropout),丢弃法有很多的 ...

  9. 动手学深度学习6-认识Fashion_MNIST图像数据集

    获取数据集 读取小批量样本 小结 本节将使用torchvision包,它是服务于pytorch深度学习框架的,主要用来构建计算机视觉模型. torchvision主要由以下几个部分构成: torchv ...

  10. 动手学深度学习1- pytorch初学

    pytorch 初学 Tensors 创建空的tensor 创建随机的一个随机数矩阵 创建0元素的矩阵 直接从已经数据创建tensor 创建新的矩阵 计算操作 加法操作 转化形状 tensor 与nu ...

随机推荐

  1. Python实现冒泡排序、选择排序、插入排序

    排序与搜索 排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法. 排序算法的稳定性 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序.也就是如 ...

  2. JS Leetcode 496. 下一个更大元素 I 更清晰的图解单调栈做法

    壹 ❀ 引 最近一周的工作压力很大...一周的时间一直在处理一个APP漏洞问题,因为项目三年无人维护,突然要改东西光是修改构建错误以及三方包依赖错误就花了三天时间= =.不过好在问题到已经结束尾,闲下 ...

  3. CentOS在无网络环境下,用离线源yum安装软件

    先说大致步骤: 1.前提假设:当前无网络的目标服务器是A,我们需要先准备一台服务器B: 2.在B上面用yum先把软件安装完成. 3.然后用createrepo将B中的包拷贝出来,并传到A上(用U盘或者 ...

  4. Laravel入坑指南(5)——请求与响应

    作为互联网典型的Web应用,接收用户请求的数据,并将处理的结果向用户进行响应,是最基础也是最必备的功能.在原生的PHP中,我们常用$_POST.$_GET.$_REQUEST和$_FILES对不同的请 ...

  5. Java并发编程实例--15.在同步代码块中使用条件

    并发编程中有个经典问题: 生产消费者问题. 我们有一个数据缓冲区,一个或多个生产者往其中存入对象,另外一个或多个消费者从中取走. 因此,该数据缓冲区是一个共享数据结构,我们需要对其添加读取同步机制,但 ...

  6. TCP协议的流量控制和拥塞控制

    一开始,我总是容易把这2个概念搞混淆了,因此,为了加深理解,我写出来整理下思路. 一:流量控制 什么是流量控制,它涉及到哪些内容呢? 首先,我们看看一个最简单的tcp传输涉及到哪些东西 发送端,数据, ...

  7. STL-unordered_hashtable模拟实现

    #pragma once #include<vector> #include<string> #include<iostream> using std::cout; ...

  8. Jmeter如何分布式执行脚本?

    Jmeter分布式执行原理: JMeter分布式执行时,选择其中一台作为调度机(master),其他机器作为执行机(slave): master会在本地编辑好jmx压测脚本,执行时,master将jm ...

  9. C++ Qt开发:运用QThread多线程组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QTh ...

  10. XAF Blazor TabbedMdi

    开源项目地址:https://gitee.com/easyxaf/blazor-tabbed-mdi 前言 XAF在WinForm中采用了多文档界面(MDI),但在Blazor中却没有,在官网中也有人 ...