
深度学习
文章平均质量分 91
熙曦Sakura
985大连理工大学计算机专业本科生,分享我的学习心得,欢迎大家批评指正
展开
-
【深度学习】汇聚层
通常当我们处理图像时,我们希望逐渐降低隐藏表示的空间分辨率、聚集信息,这样随着我们在神经网络中层叠的上升,每个神经元对其敏感的感受野(输入)就越大。而我们的机器学习任务通常会跟全局图像的问题有关(例如,“图像是否包含一只猫呢?”),所以我们最后一层的神经元应该对整个输入的全局敏感。通过逐渐聚合信息,生成越来越粗糙的映射,最终实现学习全局表示的目标,同时将卷积图层的所有优势保留在中间层。此外,当检测较底层的特征时,我们通常希望这些特征保持某种程度上的平移不变性。例如,如果我们拍摄黑白之间轮廓清晰的图像X。原创 2025-03-29 21:25:58 · 724 阅读 · 0 评论 -
【深度学习】多输入多输出通道
构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。但是到目前为止,我们仅展示了单个输入和单个输出通道的简化例子。这使得我们可以将输入、卷积核和输出看作二维张量。当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每个RGB输入图像具有3×h×w的形状。我们将这个大小为3的轴称为(channel)维度。本节将更深入地研究具有多输入和多输出通道的卷积核。原创 2025-03-29 20:39:50 · 1258 阅读 · 0 评论 -
【深度学习】填充和步幅
在前面的例子中,输入的高度和宽度都为3,卷积核的高度和宽度都为2,生成的输出表征的维数为2×2。正如我们在图像卷积一节中所概括的那样,nh×nwkh×kwnh−kh1×nw−kw1因此,。还有什么因素会影响输出的大小呢?本节我们将介绍填充(padding)和步幅(stride)。假设以下情景:有时,在应用了连续的卷积之后,我们最终得到的输出远小于输入大小。这是由于卷积核的宽度和高度通常大于1。原创 2025-03-26 20:08:37 · 1011 阅读 · 0 评论 -
【深度学习】图像卷积
上节我们解析了卷积层的原理,现在我们看看它的实际应用。由于卷积神经网络的设计是用于探索图像数据,本节我们将以图像为例。原创 2025-03-12 16:21:56 · 840 阅读 · 0 评论 -
【深度学习】从全连接层到卷积
我们之前讨论的多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。此时,多层感知机可能是最好的选择,然而对于高维感知数据,这种缺少结构的网络可能会变得不实用。例如,在之前猫狗分类的例子中:假设我们有一个足够充分的照片数据集,数据集中是拥有标注的照片,每张照片具有百万级像素,这意味着网络的每次输入都有一百万个维度。即使将隐藏层维度降低到1000,这个全连接层也将有106×1031。原创 2025-03-12 15:35:09 · 656 阅读 · 0 评论 -
【深度学习】读写文件
到目前为止,我们讨论了如何处理数据,以及如何构建、训练和测试深度学习模型。然而,有时我们希望保存训练的模型,以备将来在各种环境中使用(比如在部署中进行预测)。此外,当运行一个耗时较长的训练过程时,最佳的做法是定期保存中间结果,以确保在服务器电源被不小心断掉时,我们不会损失几天的计算结果。因此,现在是时候了。原创 2025-03-11 19:16:43 · 642 阅读 · 0 评论 -
【深度学习】自定义层
回忆一下块的介绍,这应该看起来很眼熟。下面的。原创 2025-03-11 18:56:18 · 875 阅读 · 0 评论 -
【深度学习】延后初始化
到目前为止,我们忽略了建立网络时需要做的以下这些事情:有些读者可能会对我们的代码能运行感到惊讶。毕竟,深度学习框架无法判断网络的输入维度是什么。这里的诀窍是框架的延后初始化(defers initialization),即直到数据第一次通过模型传递时,框架才会动态地推断出每个层的大小。在以后,当使用卷积神经网络时,由于输入维度(即图像的分辨率)将影响每个后续层的维数,有了该技术将更加方便。现在我们在编写代码时无须知道维度是什么就可以设置参数,这种能力可以大大简化定义和修改模型的任务。接下来,我们将原创 2025-03-11 18:34:10 · 465 阅读 · 0 评论 -
【深度学习】参数管理
在选择了架构并设置了超参数后,我们就进入了训练阶段。此时,我们的目标是找到使损失函数最小化的模型参数值。经过训练后,我们将需要使用这些参数来做出未来的预测。此外,有时我们希望提取参数,以便在其他环境中复用它们,将模型保存下来,以便它可以在其他软件中执行,或者为了获得科学的理解而进行检查。之前的介绍中,我们只依靠深度学习框架来完成训练的工作,而忽略了操作参数的具体细节。原创 2025-03-10 19:08:25 · 1116 阅读 · 0 评论 -
【深度学习】 层和块
之前首次介绍神经网络时,我们关注的是具有单一输出的线性模型。在这里,整个模型只有一个输出。注意,单个神经网络(1)接受一些输入;(2)生成相应的标量输出;(3)具有一组相关(parameters),更新这些参数可以优化某目标函数。然后,当考虑具有多个输出的网络时,我们利用矢量化算法来描述整层神经元。像单个神经元一样,层(1)接受一组输入,(2)生成相应的输出,(3)由一组可调整参数描述。当我们使用softmax回归时,一个单层本身就是模型。原创 2025-03-10 17:13:32 · 1143 阅读 · 0 评论 -
【深度学习】分布偏移纠正
结果表明,如果我们的分类器一开始就相当准确,并且目标数据只包含我们以前见过的类别,以及如果标签偏移假设成立(这里最强的假设),我们就可以通过求解一个简单的线性系统来估计测试集的标签分布。标签偏移的一个好处是,如果我们在源分布上有一个相当好的模型,那么我们可以得到对这些权重的一致估计,而不需要处理周边的其他维度。现在,我们不能直接计算目标数据上的混淆矩阵,因为我们无法看到真实环境下的样本的标签,除非我们再搭建一个复杂的实时标注流程。例如,我们需要预测明天的股票价格,这样我们就可以根据这个预测进行交易。原创 2025-02-18 13:01:18 · 986 阅读 · 0 评论 -
【深度学习】环境和分布偏移
前面我们学习了许多机器学习的实际应用,将模型拟合各种数据集。然而,我们从来没有想过数据最初从哪里来?以及我们计划最终如何处理模型的输出?通常情况下,开发人员会拥有一些数据且急于开发模型,而不关注这些基本问题。许多失败的机器学习部署(即实际应用)都可以追究到这种方式。有时,根据测试集的精度衡量,模型表现得非常出色。但是当数据分布突然改变时,模型在部署中会出现灾难性的失败。更隐蔽的是,有时模型的部署本身就是扰乱数据分布的催化剂。举一个有点荒谬却可能真实存在的例子。原创 2025-02-17 23:27:35 · 1003 阅读 · 0 评论 -
【深度学习】数值稳定性和模型初始化
到目前为止,我们实现的每个模型都是根据某个预先指定的分布来初始化模型的参数。有人会认为初始化方案是理所当然的,忽略了如何做出这些选择的细节。甚至有人可能会觉得,初始化方案的选择并不是特别重要。相反,初始化方案的选择在神经网络学习中起着举足轻重的作用,它对保持数值稳定性至关重要。此外,这些初始化方案的选择可以与非线性激活函数的选择有趣的结合在一起。。糟糕选择可能会导致我们在训练时遇到梯度爆炸或梯度消失。本节将更详细地探讨这些主题,并讨论一些有用的启发式方法。这些启发式方法在整个深度学习生涯中都很有用。原创 2025-02-17 21:53:57 · 939 阅读 · 0 评论 -
【深度学习】前向传播、反向传播和计算图
当实现小批量随机梯度下降训练模型算法时,我们只考虑了通过(forward propagation)所涉及的计算。在计算梯度时,我们只调用了深度学习框架提供的反向传播函数,而不知其所以然。梯度的自动计算(自动微分)大大简化了深度学习算法的实现。在自动微分之前,即使是对复杂模型的微小调整也需要手工重新计算复杂的导数,学术论文也不得不分配大量页面来推导更新规则。本节将通过一些基本的数学和计算图,深入探讨的细节。首先,我们将重点放在带权重衰减(L2正则化)的单隐藏层多层感知机上。原创 2025-02-15 23:37:22 · 927 阅读 · 0 评论 -
【深度学习】暂退法(Dropout)
同样,我们使用Fashion-MNIST数据集。我们[定义具有两个隐藏层的多层感知机,每个隐藏层包含256个单元我们可以将暂退法应用于每个隐藏层的输出(在激活函数之后),并且可以为每一层分别设置暂退概率:常见的技巧是在靠近输入层的地方设置较低的暂退概率。下面的模型将第一个和第二个隐藏层的暂退概率分别设置为0.2和0.5,并且暂退法只在训练期间有效。# 只有在训练模型时才使用dropout# 在第一个全连接层之后添加一个dropout层# 在第二个全连接层之后添加一个dropout层。原创 2025-02-10 23:03:39 · 991 阅读 · 0 评论 -
【深度学习】权重衰减
前一节我们描述了过拟合的问题,本节我们将介绍一些正则化模型的技术。我们总是可以通过去收集更多的训练数据来缓解过拟合。但这可能成本很高,耗时颇多,或者完全超出我们的控制,因而在短期内不可能做到。假设我们已经拥有尽可能多的高质量数据,我们便可以将重点放在正则化技术上。回想一下,在多项式回归的例子中,我们可以通过调整拟合多项式的阶数来限制模型的容量。实际上,。然而,简单地丢弃特征对这项工作来说可能过于生硬。我们继续思考多项式回归的例子,考虑高维输入可能发生的情况。多项式对多变量数据的自然扩展称为。原创 2025-02-05 23:04:32 · 1210 阅读 · 0 评论 -
【深度学习】模型选择、欠拟合和过拟合
作为机器学习科学家,我们的目标是发现模式(pattern)。但是,我们如何才能确定模型是真正发现了一种泛化的模式,而不是简单地记住了数据呢?例如,我们想要在患者的基因数据与痴呆状态之间寻找模式,其中标签是从集合{痴呆,轻度认知障碍,健康}\{\text{痴呆}, \text{轻度认知障碍}, \text{健康}\}{痴呆,轻度认知障碍,健康}中提取的。因为基因可以唯一确定每个个体(不考虑双胞胎),所以在这个任务中是有可能记住整个数据集的。我们不想让模型只会做这样的事情:“那是鲍勃!我记得他!他有痴呆症!”原创 2025-02-04 18:55:09 · 1038 阅读 · 0 评论 -
【深度学习】多层感知机的简洁实现
本节将介绍(原创 2025-02-04 16:47:47 · 344 阅读 · 0 评论 -
【深度学习】多层感知机的从零开始实现
我们已经在中描述了多层感知机(MLP),现在让我们尝试自己实现一个多层感知机。为了与softmax回归获得的结果进行比较,我们将继续使用Fashion-MNIST图像分类数据集。原创 2025-02-03 18:21:07 · 581 阅读 · 0 评论 -
【深度学习】多层感知机
仿射变换是一种带有偏置项的线性变换。首先,回想一下图3.4.1中所示的softmax回归的模型架构。该模型通过单个仿射变换将我们的输入直接映射到输出,然后进行softmax操作。如果我们的标签通过仿射变换后确实与我们的输入数据相关,那么这种方法确实足够了。但是,仿射变换中的线性是一个很强的假设。例如,线性意味着单调假设:任何特征的增大都会导致模型输出的增大(如果对应的权重为正),或者导致模型输出的减小(如果对应的权重为负)。有时这是有道理的。例如,如果我们试图预测一个人是否会偿还贷款。我们可以认为,原创 2025-02-03 17:52:06 · 749 阅读 · 0 评论 -
【深度学习】softmax回归的简洁实现
我们发现(通过深度学习框架的高级API能够使实现)(softmax)线性(回归变得更加容易)。同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。本节继续使用Fashion-MNIST数据集,并保持批量大小为256。初始化模型参数[softmax回归的输出层是一个全连接层]。因此,为了实现我们的模型,我们只需在中添加一个带有10个输出的全连接层。同样,在这里并不是必要的,但它是实现深度模型的基础。我们仍然以均值0和标准差0.01随机初始化权重。重新审视Softmax的原创 2025-02-02 23:24:02 · 1429 阅读 · 0 评论 -
【深度学习】softmax回归的从零开始实现
在实现softmax回归模型之前,我们简要回顾一下sum运算符如何沿着张量中的特定维度工作。给定一个矩阵X,我们可以对所有元素求和](默认情况下),也可以只求同一个轴上的元素,即同一列(轴0)或同一行(轴1)。如果X是一个形状为(2, 3)的张量,我们对列进行求和,则结果将是一个具有形状(3,)的向量。当调用sum运算符时,我们可以指定保持在原始张量的轴数,而不折叠求和的维度,这将产生一个具有形状(1, 3)的二维张量。回想一下,[实现softmax对每个项求幂(使用exp。原创 2025-02-01 22:09:38 · 1265 阅读 · 5 评论 -
【深度学习】图像分类数据集
功能:创建一个图像预处理的转换对象trans。是模块里的一个类,专门用于将 PIL(Python Imaging Library)图像或者 NumPy 数组(一般是uint8类型)转换为类型的张量。转换细节- 在转换过程中,会把图像的像素值归一化到[0.0, 1.0]范围。例如,原始图像像素值范围是[0, 255],经过该转换后,像素值会除以 255,变成[0.0, 1.0]之间的浮点数。- 同时,转换后张量的维度也会发生变化。对于单通道的灰度图像,会从(H, W)(高度和宽度)变为。原创 2025-01-29 17:30:57 · 1375 阅读 · 0 评论 -
【深度学习】softmax回归
回归可以用于预测多少的问题。比如预测房屋被售出价格,或者棒球队可能获得的胜场数,又或者患者住院的天数。事实上,我们也对分类注册不注册通常,机器学习实践者用这个词来描述两个有微妙差别的问题:我们只对样本的“硬性”类别感兴趣,即属于哪个类别;我们希望得到“软性”类别,即得到属于每个类别的概率。这两者的界限往往很模糊。其中的一个原因是:即使我们只关心硬类别,我们仍然使用软类别的模型。原创 2025-01-29 15:00:53 · 1146 阅读 · 0 评论 -
【深度学习】线性回归的简洁实现
当我们在实现线性回归时,我们明确定义了模型参数变量,并编写了计算的代码,这样通过基本的线性代数运算得到输出。但是,如果模型变得更加复杂,且当我们几乎每天都需要实现模型时,自然会想简化这个过程。这种情况类似于为自己的博客从零开始编写网页。做一两次是有益的,但如果每个新博客就需要工程师花一个月的时间重新开始编写网页,那并不高效。对于标准深度学习模型,我们可以[使用框架的预定义好的层这使我们只需关注使用哪些层来构造模型,而不必关注层的实现细节。我们首先定义一个模型变量net,它是一个。原创 2025-01-27 22:30:00 · 1350 阅读 · 0 评论 -
【深度学习】线性回归的从零开始实现
接下来,我们必须[定义模型,将模型的输入和参数同模型的输出关联起来。回想一下,要计算线性模型的输出,我们只需计算输入特征X\mathbf{X}X和模型权重w\mathbf{w}w的矩阵-向量乘法后加上偏置bbb。注意,上面的XwXw是一个向量,而bbb是一个标量。回想一下广播机制:当我们用一个向量加一个标量时,标量会被加到向量的每个分量上。"""线性回归模型"""原创 2025-01-25 21:26:22 · 549 阅读 · 0 评论 -
【深度学习】线性回归
回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。在机器学习领域中的大多数任务通常都与预测(prediction)有关。当我们想预测一个数值时,就会涉及到回归问题。常见的例子包括:预测价格(房屋、股票等)、预测住院时间(针对住院病人等)、预测需求(零售销量等)。但不是所有的预测都是回归问题。线性回归(linear regression)可以追溯到19世纪初,它在回归的各种标准工具中最简单而且最流行。线原创 2025-01-25 19:38:11 · 1634 阅读 · 0 评论 -
【深度学习】概率
简单地说,机器学习就是做出预测。现在让我们更认真地考虑第一个例子:根据照片区分猫和狗,这听起来可能很简单,但对于机器却可能是一个艰巨的挑战。首先,问题的难度可能取决于图像的分辨率。如图所示,虽然人类很容易以160×160160 \times 160160×160像素的分辨率识别猫和狗,但它在40×4040\times4040×40像素上变得具有挑战性,而且在10×1010 \times 1010×10像素下几乎是不可能的。换句话说,我们在很远的距离(从而降低分辨率)区分猫和狗的能力可能会变为猜测。概率给原创 2025-01-24 18:39:37 · 824 阅读 · 0 评论 -
【深度学习】 自动微分
正如上节所说,求导是几乎所有深度学习优化算法的关键步骤。虽然求导的计算很简单,只需要一些基本的微积分。但对于复杂的模型,手工进行更新是一件很痛苦的事情(而且经常容易出错)。深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。实际中,根据设计好的模型,系统会构建一个来跟踪计算是哪些数据通过哪些操作组合起来产生输出。自动微分使系统能够随后反向传播梯度。这里,原创 2025-01-23 17:36:22 · 977 阅读 · 0 评论 -
【深度学习】微积分
这段Python代码定义了一个名为set_axes的函数,它的主要功能是对Matplotlib绘图时的坐标轴进行设置。函数定义与参数axes:代表Matplotlib的坐标轴对象,通过它能对坐标轴进行各类设置操作。xlabel:表示x轴的标签,也就是x轴的名称。ylabel:表示y轴的标签,即y轴的名称。xlim:是一个包含两个元素的元组或者列表,用来指定x轴的取值范围,例如(0, 10)。ylim:同样是一个包含两个元素的元组或者列表,用于指定y轴的取值范围。xscale。原创 2025-01-23 16:31:24 · 1525 阅读 · 0 评论 -
【深度学习】线性代数
标量(标量由只有一个元素的张量表示)。下面的代码将实例化两个标量,并执行一些熟悉的算术运算,即加法、乘法、除法和指数。import torchx = torch.tensor(3.0)y = torch.tensor(2.0)x + y, x * y, x / y, x**y向量[向量可以被视为标量值组成的列表]。这些标量值被称为向量的元素(element)或分量(component)。当向量表示数据集中的样本时,它们的值具有一定的现实意义。例如,如果我们正在训练一个模型来预测原创 2025-01-12 20:06:51 · 434 阅读 · 0 评论 -
【深度学习】数据预处理
为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始,而不是从那些准备好的张量格式数据开始。在Python中常用的数据分析工具中,我们通常使用pandas软件包。像庞大的Python生态系统中的许多其他扩展包一样,pandas可以与张量兼容。本节我们将简要介绍使用pandas预处理原始数据,并将原始数据转换为张量格式的步骤。后续将介绍更多的数据预处理技术。原创 2025-01-11 22:16:58 · 871 阅读 · 0 评论 -
【深度学习】运算符
a.item():item()方法用于获取张量中仅包含一个元素时的该元素值(如果张量包含多个元素,使用item()会报错),这里会返回浮点数3.5。下面的例子分别演示了当我们沿行(轴-0,形状的第一个元素)和按列(轴-1,形状的第二个元素)连结两个矩阵时,会发生什么情况。在下面的例子中,我们使用逗号来表示一个具有5个元素的元组,其中每个元素都是按元素操作的结果。对于将两个数组作为输入的函数,按元素运算将二元运算符应用于两个数组中的每对位置对应的元素。标量运算符,这意味着该函数接收两个输入,并产生一个输出。原创 2025-01-11 21:28:02 · 1170 阅读 · 0 评论 -
【深度学习】数据操作入门
以下代码创建一个形状为(3,4)的张量,其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样。这个新的张量包含与转换前相同的值,但是它被看成一个3行4列的矩阵。注意,通过改变张量的形状,张量的大小不会改变。也就是说,如果我们的目标形状是(高度,宽度),那么在知道宽度后,高度会被自动计算得出,不必我们自己做除法。在这里,最外层的列表对应于轴0,内层的列表对应于轴1。除非另外指定,新的张量将存储在内存中,并采用基于CPU的计算。在这里,最外层的列表对应于轴0,内层的列表对应于轴1。原创 2025-01-11 20:25:19 · 913 阅读 · 0 评论