李沐动手学深度学习pytorch实践笔记
2、标量对向量求导;
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.2 Softmax回归与分类模型
目录 softmax的基本概念 交叉熵损失函数 模型训练和预测 获取Fashion-MNIST训练集和读取数据 get dataset softmax从零开始的实现 获取训练集数据和测试集数据 模型参 ...
- 《动手学深度学习》系列笔记 —— 语言模型(n元语法、随机采样、连续采样)
目录 1. 语言模型 2. n元语法 3. 语言模型数据集 4. 时序数据的采样 4.1 随机采样 4.2 相邻采样 一段自然语言文本可以看作是一个离散时间序列,给定一个长度为\(T\)的词的序列\( ...
- 小白学习之pytorch框架(2)-动手学深度学习(begin-random.shuffle()、torch.index_select()、nn.Module、nn.Sequential())
在这向大家推荐一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比 ...
- 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF
随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...
- 【动手学深度学习】Jupyter notebook中 import mxnet出错
问题描述 打开d2l-zh目录,使用jupyter notebook打开文件运行,import mxnet 出现无法导入mxnet模块的问题, 但是命令行运行是可以导入mxnet模块的. 原因: 激活 ...
- 动手学深度学习9-多层感知机pytorch
多层感知机 隐藏层 激活函数 小结 多层感知机 之前已经介绍过了线性回归和softmax回归在内的单层神经网络,然后深度学习主要学习多层模型,后续将以多层感知机(multilayer percetro ...
- mxnet 动手学深度学习
http://zh.gluon.ai/chapter_crashcourse/introduction.html 强化学习(Reinforcement Learning) 如果你真的有兴趣用机器学习开 ...
- 动手学深度学习14- pytorch Dropout 实现与原理
方法 从零开始实现 定义模型参数 网络 评估函数 优化方法 定义损失函数 数据提取与训练评估 pytorch简洁实现 小结 针对深度学习中的过拟合问题,通常使用丢弃法(dropout),丢弃法有很多的 ...
- 动手学深度学习6-认识Fashion_MNIST图像数据集
获取数据集 读取小批量样本 小结 本节将使用torchvision包,它是服务于pytorch深度学习框架的,主要用来构建计算机视觉模型. torchvision主要由以下几个部分构成: torchv ...
- 动手学深度学习1- pytorch初学
pytorch 初学 Tensors 创建空的tensor 创建随机的一个随机数矩阵 创建0元素的矩阵 直接从已经数据创建tensor 创建新的矩阵 计算操作 加法操作 转化形状 tensor 与nu ...
随机推荐
- 2023年多校联训NOIP层测试7+【LGR-149-Div.3】洛谷基础赛 #2 & qw Round -1
普及模拟3 \(T1\) 最大生成树 \(100pts\) 简化题意:给定一个 \(n(1 \le n \le 1 \times 10^5)\) 个点的完全图,给定各点的点权 \(a_i(1 \le ...
- NC22600 Rinne Loves Dynamic Graph
题目链接 题目 题目描述 Rinne 学到了一个新的奇妙的东西叫做动态图,这里的动态图的定义是边权可以随着操作而变动的图. 当我们在这个图上经过一条边的时候,这个图上所有边的边权都会发生变动. 定义变 ...
- Js将字符串转数字的方式
Js将字符串转数字的方式 Js字符串转换数字方方式主要有三类:转换函数.强制类型转换.弱类型隐式类型转换,利用这三类转换的方式可以有5种转换的方法. parseInt() parseInt()和Num ...
- weblogic CVE-2024-20931分析
weblogic 12.2.1.4.0安装 我的环境:ubuntu 22.04 + weblogic 12.2.1.4.0 + jdk8(注:weblogic不支持OpenJDK) jdk下载安装:h ...
- 项目实战:C#上位机+arduino下位机+控制点亮LED灯
前言 当前比较流行的arduino开发,联动做一个Demo. 应用构架 上位机:C#上位机通过串口发送接收控制协议,来控制下位机: 下位机:arduino下位机主控,接受上位机串口协议控 ...
- django中使用redis管道
管道(事务),要是都成功则成功,失败一个全部失败 原理:将数据操作放在内存中,只有成功后,才会一次性全部放入redis 记住,redis中的管道可以开启事务处理,但是并没有回滚这一说法!跟mysql中 ...
- J-link虚拟串口波特率异常问题
J-LINK V9以上自带了虚拟串口,使用非常方便. 但最近遇到问题,发现打开虚拟串口时电脑接收到的是乱码.到官网搜索了一下,发现最高波特率是115200,我使用的是256000,于是降低波特率. 官 ...
- sql注入简单初
import requests,sys,time from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon from threading ...
- java字节、位移以及进制转换
数据存储方式 众所周知,java中的数据都是以二进制的形式存储在计算机中的,但是我们看到的数据怎么是10进制的,因为java提供了很多进制自动转换的方式. 位移 向左位移是*2的幂次,一般都是正数操作 ...
- 分布式事务框架seata入门
一.简介 在近几年流行的微服务架构中,由于对服务和数据库进行了拆分,原来的一个单进程本地事务变成多个进程的本地事务,这时要保证数据的一致性,就需要用到分布式事务了.分布式事务的解决方案有很多,其中国内 ...