深度学习技巧和窍门
本页面描述了各种训练选项和技术改善深度学习网络的准确性。
选择网络体系结构
适当的网络体系结构取决于任务和可用的数据。考虑这些建议在决定使用哪个架构以及是否使用pretrained网络或从头开始训练。
数据 | 任务的描述 | 了解更多 |
---|---|---|
图片 | 自然图像的分类 | 尝试不同的pretrained网络。pretrained深入学习网络的列表,请参阅Pretrained深层神经网络。 学习如何交互网络准备转移学习使用深层网络设计师,看看转移学习与深层网络设计师。 |
回归自然的图像 | 尝试不同的pretrained网络。为一个例子,演示如何pretrained分类网络转换成一个回归网络,看到的分类网络转化为回归网络。 | |
分类和回归的非天然的图像(例如,图像和声音 | 为一个例子,演示如何分类小图片,明白了火车残余网络图像分类。 为一个例子,演示如何分类谱图,看看语音命令识别使用深度学习。 |
|
语义分割 | 计算机视觉工具箱™提供工具来创建深度学习网络语义分割。有关更多信息,请参见开始使用语义分割使用深度学习(计算机视觉工具箱)。 | |
序列、时间序列和信号 | Sequence-to-label分类 | 例如,看到的使用深度学习序列分类。 |
Sequence-to-sequence分类和回归 | 欲了解更多,请看使用深度学习Sequence-to-Sequence分类和使用深度学习Sequence-to-Sequence回归。 | |
Sequence-to-one回归 | 例如,看到的使用深度学习Sequence-to-One回归。 | |
时间序列预测 | 例如,看到的使用深度学习时间序列预测。 | |
文本 | 分类和回归 | 文本分析工具箱™提供工具来创建深度学习网络文本数据。例如,看到的使用深度学习分类文本数据。 |
文本生成 | 例如,看到的生成文本使用深度学习。 | |
音频 | 音频分类和回归 | 尝试不同的pretrained网络。pretrained深入学习网络的列表,请参阅Pretrained模型(音频工具箱)。 学习如何以编程方式准备转移的网络学习,明白了学习与Pretrained音频网络传输(音频工具箱)。学习如何交互网络准备转移学习使用深层网络设计师,看看转移与Pretrained音频网络学习深陷网络设计师。 为一个例子,演示如何使用深度学习分类的声音,看到的使用深度学习分类的声音(音频工具箱)。 |
选择培训选项
的trainingOptions
函数提供了多种选项来训练你的深入学习网络。
提示 | 更多的信息 |
---|---|
监控培训进展 | 打开培训发展情节,设置“阴谋” 选项trainingOptions 来“训练进步” 。 |
使用验证数据 | 指定验证数据,使用 请注意 如果您的验证数据集太小,不足够代表数据,然后报告指标可能不会帮助你。使用太大的验证数据集可能导致较慢的培训。 |
迁移学习,加快学习的新层和减缓学习的传输层 | 指定新层通过更高的学习速率的因素,例如, 减少最初的学习速率使用 当转移学习时,您不需要火车尽可能多的时代。减少时期使用的数量 学习如何交互网络准备转移学习使用深层网络设计师,看看转移学习与深层网络设计师。 |
洗你的数据每一时代 | 洗牌数据每一时代(一个完整的传递的数据),设置 请注意 对于序列数据,洗牌可以产生负面影响的准确性,因为它可以增加填充或截断数据。如果你有序列数据,然后整理数据序列长度可以帮助。欲了解更多,请看序列填充、截断和分裂。 |
尝试不同的优化 | 要指定不同的优化,使用 |
有关更多信息,请参见设置参数和卷积神经网络训练。
提高训练精度
如果你注意到在训练问题,然后再考虑这些可能的解决方案。万博 尤文图斯
问题 | 可能的解决方案 |
---|---|
nan或大型的损失峰值 | 减少最初的学习速率使用 如果减少学习速率不能帮助,那么试着用梯度剪裁。设置梯度阈值,使用 |
最后仍然是减少损失的训练 | 训练时间增加时代使用的数量“MaxEpochs” 选项trainingOptions 。 |
损失高原 | 如果意外的损失高原高值,然后在高原的学习速率下降。改变学习速率调度,使用 如果放弃学习速率不能帮助,那么这个模型可能underfitting。尝试增加参数的数量或层。你可以检查模型是否underfitting通过监测验证损失。 |
验证损失远远高于训练的损失 | 为了防止过度拟合,试试以下的一个或多个:
|
慢慢地减少损失 | 增加初始学习速率使用 对于图像数据,尝试包括批处理标准化网络层。有关更多信息,请参见 |
有关更多信息,请参见设置参数和卷积神经网络训练。
修复错误的训练
如果你的网络没有火车,然后考虑可能的解决方案。万博 尤文图斯
错误 | 描述 | 可能的解决方案 |
---|---|---|
内存不足错误当培训 | 可用的硬件无法存储当前mini-batch,网络权值,计算激活。 | 尝试减少mini-batch大小使用 如果减少mini-batch大小不工作,然后试着用一个小的网络,减少层数,或减少参数的个数或过滤层。 |
自定义层的错误 | 会有一个与自定义层的实现问题。 | 检查的有效性定义层和发现潜在的问题 如果测试失败时使用 |
培训抛出错误“CUDA_ERROR_UNKNOWN” |
有时,GPU抛出这个错误当它被用于计算和显示请求的操作系统。 | 尝试减少mini-batch大小使用 如果减少mini-batch大小不工作,然后在窗口®,试着调整超时检测和恢复(TDR)的设置。例如,改变 |
你可以分析深度学习网络使用analyzeNetwork
。的analyzeNetwork
函数显示一个交互式可视化的网络体系结构、网络检测错误和问题,并提供了详细的网络层的信息。使用网络分析仪来想象和理解网络架构,检查您已经定义了结构正确,培训之前发现问题。的问题,analyzeNetwork
检测包括失踪或断开连接层,不匹配或不正确的大小的输入层,层输入有误,无效的图结构。
准备和数据预处理
你可以通过数据预处理提高精度。
重量或平衡类
理想情况下,所有类都有一个相同数量的观察。然而,对于一些任务,类可以不平衡。例如,汽车的街景数据集往往有更多的天空,建筑,和道路比行人和骑自行车的像素像素,因为天空,建筑和道路覆盖更多的图像区域。如果不能正确处理,这种不平衡会对学习过程是不利的,因为学习是有偏见的主要类。
对于分类任务,您可以指定类权重使用“ClassWeights”
选择classificationLayer
。例如,看到的序列分类使用Inverse-Frequency类权重。对于语义分割任务,您可以指定类权重使用ClassWeights
(计算机视觉工具箱)的属性pixelClassificationLayer
(计算机视觉工具箱)。
或者,你可以通过做一个或多个平衡类如下:
从最频繁的类添加新的观测。
将观察从最常见的类。
组相似的类。例如,集团的类“车”和“卡车”到单独的类“车辆”。
图像数据进行预处理
关于预处理图像数据的更多信息,请参阅预处理图像深度学习。
任务 | 更多的信息 |
---|---|
调整图像 | 使用pretrained网络,必须调整图像的输入规模网络。调整图像,使用 auimds = augmentedImageDatastore (inputSize, imd); |
图像增强 | 为了避免过度拟合,使用图像转换。欲了解更多,请看列车网络的增强图像。 |
回归正常化的目标 | 正常化之前预测输入他们的网络。如果你规范化培训前的反应,那么你必须改变训练网络的预测得到预测的原始反应。 有关更多信息,请参见火车卷积神经网络回归。 |
预处理序列数据
关于处理LSTM网络的更多信息,明白了长期短期记忆网络。
任务 | 更多的信息 |
---|---|
标准化序列数据 | 规范化序列数据,首先计算一个部分的所有序列的平均值和标准偏差。然后,对于每个训练观察,减去均值,再除以标准差。 欲了解更多,请看标准化序列数据。 |
减少序列填充和截断 | 减少填充或丢弃的数据填充或删除序列时,试试排序数据序列长度。 欲了解更多,请看序列填充、截断和分裂。 |
为预测指定mini-batch大小和填充选项 | 当你与不同长度的序列进行预测,mini-batch大小会影响填料添加到输入数据的数量,从而导致不同的预测值。尝试使用不同的值,看看哪种最与你的网络。 要指定mini-batch大小和填充选项,可以使用 |
使用可用的硬件
指定执行环境,使用“ExecutionEnvironment”
选项trainingOptions
。
问题 | 更多的信息 |
---|---|
培训的CPU是缓慢的 | 如果培训太慢了一个CPU,尝试使用pretrained深入学习网络作为特征提取器和训练一个机器学习模型。例如,看到的使用Pretrained网络提取图像特征。 |
培训LSTM GPU是缓慢的 | CPU更适合训练LSTM网络使用mini-batches短序列。使用CPU、设置 |
软件不使用所有可用的gpu | 如果你访问一个机器与多个gpu,简单的设置“ExecutionEnvironment” 选项trainingOptions 来“multi-gpu” 。有关更多信息,请参见深度学习与MATLAB在多个gpu。 |
有关更多信息,请参见并行扩展深度学习,在gpu上,在云端。
修复错误mat文件的加载
如果你不能从MAT-file负载层或网络,得到一个警告的形式
警告:无法加载类的实例layerType异构数组。layerType的定义可能缺失或包含一个错误。默认的对象将被取代。警告:当加载一个类的对象“SeriesNetwork”:使用“向前”层nnet.cnn.layer.MissingLayer错误。函数把一个错误,不能被执行。
文件包含自定义层不包含自定义的路径——加载网络层,添加自定义图层文件以MATLAB®路径。
文件包含自定义层的包——加载网络使用层支持包,安装所需的支持包在命令行通过使用相万博1manbetx应的功能(例如,
resnet18
)或使用附加Explorer。文件包含自定义层从一个文档的例子并不在包含自定义的路径——加载网络层从文档例子,打开示例作为生活脚本,将层从示例文件夹复制到你的工作目录。
文件包含一层从工具箱,没有安装,访问层与其它工具箱,例如,计算机视觉工具箱或文本分析工具箱,安装相应的工具箱。
尝试提出解决方案后,重新加载MAT-file。万博 尤文图斯
另请参阅
trainingOptions
|checkLayer
|analyzeNetwork
|深层网络设计师