主要内容

深度学习技巧

本页介绍了提高深度学习网络准确性的各种培训选项和技术。

选择网络架构

适当的网络体系结构取决于任务和可用的数据。在决定使用哪种体系结构以及是使用预先训练过的网络还是从头开始训练时,请考虑这些建议。

数据 任务的描述 了解更多
图像 自然图像分类

尝试不同的预训练网络。有关预先训练的深度学习网络列表,请参见预先训练的深度神经网络

要学习如何使用深度网络设计器交互式地准备一个用于迁移学习的网络,请参阅使用深度网络设计师进行迁移学习

自然图像的回归 尝试不同的预训练网络。有关如何将预训练分类网络转换为回归网络的示例,请参见将分类网络转换为回归网络
非自然图像的分类和回归(例如,微小图像和光谱图

有关如何对微小图像进行分类的示例,请参见图像分类的训练残差网络

有关如何对谱图进行分类的示例,请参见基于深度学习的语音命令识别

语义分割 计算机视觉工具箱™提供用于创建语义分割的深度学习网络的工具。有关更多信息,请参见使用深度学习开始语义分割(计算机视觉工具箱)
序列、时间序列和信号 序列到标签分类 例如,请参见基于深度学习的序列分类
序列间分类与回归 想要了解更多,请看基于深度学习的序列到序列分类使用深度学习的序列到序列回归
时间序列预测 例如,请参见基于深度学习的时间序列预测
文本 分类与回归 文本分析工具箱™ 提供用于创建文本数据深度学习网络的工具。有关示例,请参见使用深度学习对文本数据进行分类
文本生成 例如,请参见使用深度学习生成文本
音频 音频分类与回归 例如,请参见基于深度学习的语音命令识别

选择培训选项

这个trainingOptions功能提供了多种选项来训练您的深度学习网络。

提示 更多信息
监控培训进展 要打开训练进度图,设置“情节”选项trainingOptions“培训进度”
使用验证数据

要指定验证数据,请使用“ValidationData”选项trainingOptions

笔记

如果您的验证数据集太小,并且不能充分表示数据,那么报告的度量可能对您没有帮助。使用过大的验证数据集可能会导致较慢的培训。

对于迁移学习,加快新层的学习,减缓迁移层的学习

为新层指定更高的学习速率因子,例如加权比率因子的属性convolution2dLayer

降低初始学习率“InitialLearnRate”选择trainingOptions

当迁移学习时,你不需要训练那么多的时代。减少纪元的数量使用“MaxEpochs”选项trainingOptions

要学习如何使用深度网络设计器交互式地准备一个用于迁移学习的网络,请参阅使用深度网络设计师进行迁移学习

每个时代都洗牌你的数据

要在每个epoch(一个完整的数据遍历)中洗牌数据,请设置“洗牌”选项trainingOptions“every-epoch”

笔记

对于序列数据,变换可能会对准确性产生负面影响,因为它会增加填充或截断数据的数量。如果您有序列数据,那么根据序列长度对数据进行排序会有所帮助。想要了解更多,请看序列填充、截断和分割

尝试不同的优化

要指定不同的优化器,请使用solverName争论trainingOptions

有关更多信息,请参见卷积神经网络参数的建立与训练

提高训练精度

如果你在培训过程中注意到问题,那么就考虑这些可能的解决方案。金宝搏官方网站

问题 可能的解决方案
NaNs或损失的大峰值

降低初始学习率“InitialLearnRate”选择trainingOptions

如果降低学习率没有帮助,那么尝试使用渐变剪裁。要设置渐变阈值,请使用“GradientThreshold”选项trainingOptions

在训练结束时,损失仍在减少 通过增加使用时代的数量,使列车运行时间更长“MaxEpochs”选项trainingOptions
损失高原

如果损失在一个出乎意料的高值上停滞不前,那么在停滞不前时降低学习率。要改变学习速率计划,请使用“LearnRateSchedule”选项trainingOptions

如果降低学习率没有帮助,那么模型可能不适合。尝试增加参数或层的数量。您可以通过监视验证丢失来检查模型是否拟合不足。

验证损失远高于训练损失

为了防止过拟合,请尝试以下一种或多种方法:

损失下降非常缓慢

增加初始学习率使用“InitialLearnRate”选择trainingOptions

对于图像数据,尝试在网络中包含批处理规格化层。有关更多信息,请参见批处理规范化层

有关更多信息,请参见卷积神经网络参数的建立与训练

修正训练中的错误

如果您的网络根本没有训练,那么考虑可能的解决方案。金宝搏官方网站

错误 描述 可能的解决方案
训练时出现内存不足错误 可用硬件无法存储当前小批量、网络权重和计算的激活。

可以尝试减少迷你批处理大小“MiniBatchSize”选择trainingOptions

如果减少迷你批处理大小不起作用,那么尝试使用更小的网络,减少层的数量,或减少层中的参数或过滤器的数量。

自定义图层错误 自定义层的实现可能有问题。

检查自定义图层的有效性,并使用checkLayer

如果在使用时测试失败checkLayer,然后该函数提供测试诊断和框架诊断。测试诊断突出了任何层的问题,而框架诊断提供了更详细的信息。要了解有关测试诊断的更多信息并获得有关可能解决方案的建议,请参见金宝搏官方网站诊断

训练抛出错误“CUDA_ERROR_UNKNOWN” 有时候,GPU在处理操作系统的计算和显示请求时会抛出这个错误。

可以尝试减少迷你批处理大小“MiniBatchSize”选择trainingOptions

如果减少小批量大小不起作用,那么在Windows中®,请尝试调整超时检测和恢复(TDR)设置。例如,更改TdrDelay从2秒(默认)到4秒(需要注册表编辑)。

你可以使用analyzeNetwork.这个analyzeNetwork命令功能显示网络架构的交互可视化,检测网络的错误和问题,并提供关于网络层的详细信息。使用网络分析器来可视化和理解网络体系结构,检查您是否正确定义了体系结构,并在培训前检测问题。的问题,analyzeNetwork检测包括丢失或断开连接的图层、图层输入不匹配或不正确的大小、不正确的图层输入数量以及无效的图形结构。

准备和预处理数据

你可以通过对数据进行预处理来提高准确性。

体重或平衡类

理想情况下,所有类都有相同数量的观察值。但是,对于某些任务,类可能是不平衡的。例如,街道场景的汽车数据集往往比行人和骑自行车的像素具有更多的天空、建筑物和道路像素,因为天空、建筑物和道路覆盖了更多的图像区域。如果处理不正确,这种不平衡会消失可能对学习过程有害,因为学习偏向于优势阶级。

对于分类任务,可以使用“ClassWeights”选择分类层.对于语义分割任务,可以使用ClassWeights(计算机视觉工具箱)的属性pixelClassificationLayer(计算机视觉工具箱)

或者,你可以通过做以下的一个或多个来平衡类:

  • 从最不频繁的班级添加新的观察结果。

  • 从最频繁的类中删除观察。

  • 组相似的类。例如,将类“car”和“truck”分组到单个类“vehicle”中。

图像数据预处理

有关预处理图像数据的更多信息,请参见用于深度学习的图像预处理

任务 更多信息
调整图像

若要使用预训练网络,必须将图像大小调整为网络的输入大小。若要调整图像大小,请使用augmentedImageDatastore. 例如,此语法调整图像数据存储中图像的大小imds:

auimds = augmentedImageDatastore (inputSize, imd);

提示

使用augmentedImageDatastore用于对图像进行有效预处理,以进行深度学习,包括图像大小调整。

不要使用readFcn选择imageDatastore对于预处理或调整大小,这个选项通常非常慢。

图像增强

要避免过度拟合,请使用图像变换。要了解更多信息,请参阅带有增强图像的列车网络

回归正常化的目标

在将预测值输入网络之前,将其标准化。如果在训练前对响应进行规范化,则必须转换训练网络的预测,以获得原始响应的预测。

有关更多信息,请参见训练卷积神经网络用于回归

预处理序列数据

有关使用LSTM网络的更多信息,请参见长短期记忆网络

任务 更多信息
规范化序列数据

要对序列数据进行归一化,首先计算所有序列的每个特征均值和标准差。然后,对每一个训练观察,减去平均值,除以标准差。

想要了解更多,请看标准化序列数据

减少序列填充和截断

为了减少填充或截断序列时的填充或丢弃数据的数量,请尝试按序列长度对数据进行排序。

想要了解更多,请看序列填充、截断和分割

为预测指定小批量大小和填充选项

当使用不同长度的序列进行预测时,小批量的大小会影响添加到输入数据中的填充量,从而导致不同的预测值。尝试使用不同的值,看看哪一个最适合你的网络。

要指定小批量大小和填充选项,请使用“MiniBatchSize”“SequenceLength”委员会的选择分类,预测,classifyAndUpdateState,预测和更新房地产功能。

使用可用的硬件

要指定执行环境,请使用“执行环境”选项trainingOptions

问题 更多信息
CPU训练很慢 如果单个CPU上的训练太慢,可以尝试使用一个预先训练的深度学习网络作为特征提取器,并训练一个机器学习模型。例如,请参见利用预训练网络提取图像特征
在GPU上训练LSTM很慢

CPU更适合使用带有短序列的小批量来训练LSTM网络。如果要使用CPU,请设置“执行环境”选项trainingOptions“cpu”

软件不使用所有可用的图形处理器 如果您可以访问具有多个gpu的机器,只需设置“执行环境”选项trainingOptions“multi-gpu”. 有关详细信息,请参阅基于MATLAB的多gpu深度学习

有关更多信息,请参见在gpu和云上并行扩展深度学习

修复从MAT文件加载时出现的错误

如果无法从MAT文件加载图层或网络,则会收到表单警告

警告:无法将类layerType的实例加载到异构数组。layerType的定义可能缺失或包含错误。默认对象将被替换。Warning: While loading an object of class 'SeriesNetwork': Error using 'forward' in Layer net.cnn. Layer. missinglayer。该函数抛出一个错误,无法执行。
那么mat文件中的网络可能包含不可用的层。这可能是由于以下原因:

  • 要加载包含自定义层的网络,将自定义层文件添加到MATLAB中®路径。

  • 该文件包含支持包中的自定义层–要使用支持包中的层加载网络,请使用相应的功能(例如金宝app,resnet18)或使用附加组件资源管理器。

  • 该文件包含不在路径上的文档示例中的自定义层–要从文档示例中加载包含自定义层的网络,请将该示例作为实时脚本打开,然后将该层从示例文件夹复制到工作目录。

  • 该文件包含未安装工具箱中的层—要访问其他工具箱中的层,例如,计算机视觉工具箱或文本分析工具箱,请安装相应的工具箱。

在尝试了建议的解决方案之后,重新加载mat -文件。金宝搏官方网站

另见

|||

相关的话题