8.1k 7 分钟

# 风格迁移 摄影爱好者也许接触过滤波器。它能改变照片的颜色风格,从而使风景照更加锐利或者令人像更加美白。但一个滤波器通常只能改变照片的某个方面。如果要照片达到理想中的风格,可能需要尝试大量不同的组合。这个过程的复杂程度不亚于模型调参。 本节将介绍如何使用卷积神经网络,自动将一个图像中的风格应用在另一图像之上,即风格迁移(style transfer) :cite: Gatys.Ecker.Bethge.2016 。 这里我们需要两张输入图像:一张是内容图像,另一张是风格图像。 我们将使用神经网络修改内容图像,使其在风格上接近风格图像。 例如, :numref:...
4.5k 4 分钟

# 区域卷积神经网络(R-CNN)系列 🏷 sec_rcnn 除了 :numref: sec_ssd 中描述的单发多框检测之外, 区域卷积神经网络(region-based CNN 或 regions with CNN features,R-CNN) :cite: Girshick.Donahue.Darrell.ea.2014 也是将深度模型应用于目标检测的开创性工作之一。 本节将介绍 R-CNN 及其一系列改进方法:快速的 R-CNN(Fast R-CNN) :cite: Girshick.2015 、更快的 R-CNN(Faster R-CNN) :cite:...
2k 2 分钟

# 自定义层 深度学习成功背后的一个因素是神经网络的灵活性: 我们可以用创造性的方式组合不同的层,从而设计出适用于各种任务的架构。 例如,研究人员发明了专门用于处理图像、文本、序列数据和执行动态规划的层。 有时我们会遇到或要自己发明一个现在在深度学习框架中还不存在的层。 在这些情况下,必须构建自定义层。本节将展示如何构建自定义层。 # 不带参数的层 首先,我们 (构造一个没有任何参数的自定义层)。 回忆一下在 :numref: sec_model_construction 对块的介绍, 这应该看起来很眼熟。 下面的 CenteredLayer...
12k 11 分钟

# 单发多框检测(SSD) 🏷 sec_ssd 在 :numref: sec_bbox — :numref: sec_object-detection-dataset 中,我们分别介绍了边界框、锚框、多尺度目标检测和用于目标检测的数据集。 现在我们已经准备好使用这样的背景知识来设计一个目标检测模型:单发多框检测(SSD) :cite: Liu.Anguelov.Erhan.ea.2016 。 该模型简单、快速且被广泛使用。尽管这只是其中一种目标检测模型,但本节中的一些设计原则和实现细节也适用于其他模型。 # 模型 :numref: fig_ssd...
782 1 分钟

# 延后初始化 🏷 sec_deferred_init 到目前为止,我们忽略了建立网络时需要做的以下这些事情: 我们定义了网络架构,但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时,甚至没有足够的信息来确定模型应该包含多少参数。 有些读者可能会对我们的代码能运行感到惊讶。 毕竟,深度学习框架无法判断网络的输入维度是什么。 这里的诀窍是框架的延后初始化(defers...
627 1 分钟

# 深度学习计算 🏷 chap_computation 除了庞大的数据集和强大的硬件, 优秀的软件工具在深度学习的快速发展中发挥了不可或缺的作用。 从 2007 年发布的开创性的 Theano...
4.4k 4 分钟

# 转置卷积 🏷 sec_transposed_conv 到目前为止,我们所见到的卷积神经网络层,例如卷积层( :numref: sec_conv_layer )和汇聚层( :numref: sec_pooling ),通常会减少下采样输入图像的空间维度(高和宽)。 然而如果输入和输出图像的空间维度相同,在以像素级分类的语义分割中将会很方便。 例如,输出像素所处的通道维可以保有输入像素在同一位置上的分类结果。 为了实现这一点,尤其是在空间维度被卷积神经网络层缩小后,我们可以使用另一种类型的卷积神经网络层,它可以增加上采样中间层特征图的空间维度。 本节将介绍 转置卷积(transposed...
6.1k 6 分钟

# 层和块 🏷 sec_model_construction 之前首次介绍神经网络时,我们关注的是具有单一输出的线性模型。 在这里,整个模型只有一个输出。 注意,单个神经网络 (1)接受一些输入; (2)生成相应的标量输出; (3)具有一组相关 参数(parameters),更新这些参数可以优化某目标函数。 然后,当考虑具有多个输出的网络时, 我们利用矢量化算法来描述整层神经元。 像单个神经元一样,层(1)接受一组输入, (2)生成相应的输出, (3)由一组可调整参数描述。 当我们使用 softmax...
5.2k 5 分钟

# GPU 🏷 sec_use_gpu 在 :numref: tab_intro_decade 中, 我们回顾了过去 20 年计算能力的快速增长。 简而言之,自 2000 年以来,GPU 性能每十年增长 1000 倍。 本节,我们将讨论如何利用这种计算性能进行研究。 首先是如何使用单个 GPU,然后是如何使用多个 GPU 和多个服务器(具有多个 GPU)。 我们先看看如何使用单个 NVIDIA GPU 进行计算。 首先,确保至少安装了一个 NVIDIA GPU。 然后,下载 NVIDIA 驱动和 CUDA 并按照提示设置适当的路径。 当这些准备工作完成,就可以使用 nvidia-smi...
5.7k 5 分钟

# 参数管理 在选择了架构并设置了超参数后,我们就进入了训练阶段。 此时,我们的目标是找到使损失函数最小化的模型参数值。 经过训练后,我们将需要使用这些参数来做出未来的预测。 此外,有时我们希望提取参数,以便在其他环境中复用它们, 将模型保存下来,以便它可以在其他软件中执行, 或者为了获得科学的理解而进行检查。 之前的介绍中,我们只依靠深度学习框架来完成训练的工作, 而忽略了操作参数的具体细节。 本节,我们将介绍以下内容: 访问参数,用于调试、诊断和可视化; 参数初始化; 在不同模型组件间共享参数。 (我们首先看一下具有单隐藏层的多层感知机。) import torchfrom torch...