[动手学深度学习]线性神经网络学习笔记

动手学深度学习-李沐(视频):08 线性回归 + 基础优化算法【动手学深度学习v2】_哔哩哔哩_bilibili

动手学深度学习-李沐(网页):3. 线性神经网络 — 动手学深度学习 2.0.0 文档 (d2l.ai)

⭐这是jupyter与torch结合的笔记!!!

自从开始和数学有关的就已经精神不正常惹,所以说话有点抽象

而且感觉还有待补充

目录

1. 线性回归

1.1. 线性模型

1.2. 损失函数

1.3. 梯度下降

1.4. 矢量化加速

1.5. 正态分布与平方损失

2. 线性回归的从零开始实现

2.1. 自制数据集和回归

3. 线性回归的简洁实现

3.1. 导入data简洁实现

4. Softmax回归

4.1. 分类

4.2. 损失函数

5. 图像分类数据集

5.1. 导库

5.2. 读取数据集

6. Softmax回归的从零开始实现

6.1. 导库

7. Softmax回归的简洁实现

7.1. 上溢

1. 线性回归

1.1. 线性模型

(1)线性模型可以看作是单层的神经网络

1.2. 损失函数

(1)常用的平方误差公式

        ①公式里小写l只是一组y_hat和y的损失值

        ②但是很明显我们求出来的回归函数(那根黑线)离实际值(蓝色空心圆)有很多组都应该有差异

 (2)整体损失均值

        ①这里大写L是所有的y和我们求出来的回归函数的误差的平均

        ②y_hat(我们回归函数的值)被替换成了wx+b

        ③前面那一大坨就是取平均值

        ④把括号里的倒一圈变成y-wx-b也没什么问题,反正是平方

        ⑤如果要写成向量的话就长成下面这个样子,可以省略掉Σ了

(3)这么看那条黑线和蓝点差异太大了,实际上我们不想要这么大的差异,不然很可能预测不准。因此要最小化整体均方误差(当每个点都被我们的回归函数穿过时均方误差就最小了!但是这样可能造成过拟合)

(4)很明显,这个L(w,b)的大小是由w和b决定的,而且L肯定>=0。于是我们希望找到一组w和b使得L尽可能小

 (5)这个偏差加入权重,应该是

(6)然后l对w求导(展开求就好了)

        ①矩阵求导

此时第二步到第三步采用了矩阵求导,即如下公式

 求导来源:可能是全网最详细的线性回归原理讲解!!!_哔哩哔哩_bilibili

        ②多项式求导

(7)显式解

1.3. 梯度下降

(1)当一个模型没有显式解的时候就要用梯度下降(我咋知道哪些有哪些没有)(是不是没有为0的时侯的意思?)

(2)所以先挑选一个w的随机初始值w0,然后不断更新,使得它接近最优解(这个η是学习率)

 

 (3)学习率是超参数,是人为指定的值,它不能太小也不能太大(吴恩达那有细🔒)

 (4)小批量随机梯度下降(深度学习用的多的)

        ①意思是如果我们的样本有几千亿个(我就随便说说),这个n实在是太大了,y和y_hat也需要取几千亿个,因此人为采用采用小批量的b(批量大小)来计算一个相对好的损失就好了

        ②公式(还是一样的惹)

(5)随机梯度下降指的是这个批量的采样是随机的

        ①可以先把所有数据shuffle,然后再按批次取并取完(这样实际就是原来的那些点)。取不完的话扔掉也可以,再补随机的也可以

        ②也可以在全部数据里面随机取,这样可能取不完也可能取得完,但是影响不大

        ③记得每个batch做完之后梯度清零一下

1.4. 矢量化加速

(1)我觉得他想表达的意思就是,对于两个有一千个元素的列向量a和b,要实现a+b,用for循环一个元素一个元素加的速度比直接d=a+b慢得多

1.5. 正态分布与平方损失

(1)太闹心了,我cv了

(2)公式

2. 线性回归的从零开始实现

2.1. 自制数据集和回归

(1)完全是自制随机数据集→写函数→训练这样,可以参考书

3. 线性回归的简洁实现

3.1. 导入data简洁实现

(1)导入包

from torch.utils import data
from torch import nn

(2)nn可以带来预定义好的层

(3)相当于不用手动定义函数

4. Softmax回归

4.1. 分类

(1)分类实际上就是从回归的单输出变成了多输出(预测概率)

4.2. 损失函数

(蓝色是曲线,绿色线是似然函数,橙色是导数)

(1)均方损失

(2)绝对值损失函数

(3)Huber's Robust loss

5. 图像分类数据集

5.1. 导库

(1)代码

%matplotlib inline
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l

d2l.use_svg_display()

5.2. 读取数据集

(1)代码

# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式,
# 并除以255使得所有像素的数值均在0~1之间
trans = transforms.ToTensor()
mnist_train = torchvision.datasets.FashionMNIST(
    root="../data", train=True, transform=trans, download=True)
mnist_test = torchvision.datasets.FashionMNIST(
    root="../data", train=False, transform=trans, download=True)

6. Softmax回归的从零开始实现

6.1. 导库

(1)代码

import torch
"""主要是加了这个IPython"""
from IPython import display
from d2l import torch as d2l

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

7. Softmax回归的简洁实现

7.1. 上溢

(1)可能分母在累积的时候变得过于大了,因为计算机存储的原理会变成0或NaN

 (2)在减法和规范化步骤之后,可能有些具有较大的负值。 由于精度受限,将有接近零的值,即下溢(underflow)。 这些值可能会四舍五入为零,于是可以采用以下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
深度学习是目前非常热门的领域,而 PyTorch 是其中最受欢迎和广泛使用的深度学习库之一。为了动手学习 PyTorch,你可以按照以下步骤进行。 首先,你需要安装 PyTorch。可以通过 PyTorch 官方网站或者使用包管理工具如 pip 或 conda 来完成安装。确保你安装的是最新版本,并根据你的操作系统和硬件环境选择合适的版本。 之后,你可以开始学习 PyTorch 的基础知识。可以借助官方文档、在线教程、博客文章或者视频教程来学习。掌握如何创建和操作张量(Tensors),了解张量的不同数据类型,例如浮点数或整数,以及如何执行各种数运算和操作。 接下来,你可以学习构建深度学习模型的基本概念。了解如何定义神经网络,包括各种不同类型的层(如全连接层、卷积层和循环层),并掌握如何连接它们以构建模型。学习如何初始化模型参数、前向传播和反向传播算法,以及如何使用优化器来调整模型参数以最小化损失函数。 进一步学习 PyTorch 中的高级功能,如数据加载和预处理,学习如何将自定义数据集加载到模型中进行训练。此外,掌握如何使用 GPU 运行模型,以加快训练速度和模型性能。 在学习过程中,最好通过动手实践来加深理解。可以尝试使用 PyTorch 来解决一些经典的深度学习问题,如图像分类、目标检测或语音识别。通过编写代码并实际运行模型,你将更好地理解和掌握 PyTorch 提供的各种功能和工具。 最后,别忘了参考和阅读相关的论文和研究工作,以了解最新的深度学习算法和技术。参加深度学习社区和论坛,与其他使用 PyTorch 的开发者交流和分享经验,这将有助于你不断提升自己的技能。 总结来说,动手学习 PyTorch 的关键是理解基本概念、构建深度学习模型,并通过实践应用来加深理解。随着不断的学习和实践,你将能够熟练地使用 PyTorch 来解决各种深度学习问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值