定义自定义训练循环、损失函数和网络

您所在的位置:网站首页 matlab神经网络图分析 定义自定义训练循环、损失函数和网络

定义自定义训练循环、损失函数和网络

2024-07-16 07:02:26| 来源: 网络整理| 查看: 265

定义自定义训练循环、损失函数和网络

对于大多数深度学习任务,您可以使用预训练神经网络,并使其适应您自己的数据。有关说明如何使用迁移学习来重新训练卷积神经网络以对一组新图像进行分类的示例,请参阅Retrain Neural Network to Classify New Images。您也可以使用 trainnet 和 trainingOptions 函数从头创建和训练神经网络。

如果 trainingOptions 函数没有提供您的任务所需的训练选项,则您可以使用自动微分创建自定义训练循环。要了解详细信息,请参阅Train Network Using Custom Training Loop。

如果 trainnet 函数没有提供您的任务所需的损失函数,您可以将 trainnet 的自定义损失函数指定为函数句柄。对于需要比预测值和目标值更多输入的损失函数(例如,需要访问神经网络或额外输入的损失函数),请使用自定义训练循环来训练模型。要了解详细信息,请参阅Train Network Using Custom Training Loop。

如果 Deep Learning Toolbox™ 没有提供您的任务所需的层,则您可以创建一个自定义层。要了解详细信息,请参阅定义自定义深度学习层。对于无法指定为由层组成的网络的模型,可以将模型定义为函数。要了解详细信息,请参阅Train Network Using Model Function。

有关对哪项任务使用哪种训练方法的详细信息,请参阅Train Deep Learning Model in MATLAB。

定义自定义损失函数

trainnet 函数提供了多个用于训练的内置损失函数。例如,您可以通过将 "crossentropy" 和 "mse" 分别指定为损失函数参量,以指定分类的交叉熵损失和回归的均方误差损失。

如果 trainnet 函数没有提供您的任务所需的损失函数,您可以将 trainnet 的自定义损失函数指定为函数句柄。该函数必须具有语法 loss = f(Y,T),其中 Y 和 T 分别是预测值和目标值。

为了帮助创建自定义损失函数,您可以使用下表中的深度学习函数。您还可以将这些函数作为函数句柄直接传递给 trainnet 函数。

函数描述softmaxsoftmax 激活运算将 softmax 函数应用于输入数据的通道维度。sigmoidsigmoid 激活运算将 sigmoid 函数应用于输入数据。crossentropy交叉熵运算计算单标签和多标签分类任务的网络预测值和目标值之间的交叉熵损失。l1lossL1 损失运算计算在给定网络预测值和目标值情况下的 L1 损失。当 Reduction 选项为 "sum" 且 NormalizationFactor 选项为 "batch-size" 时,计算出的值称为均值绝对误差 (MAE)。l2lossL2 损失运算计算在给定网络预测值和目标值情况下的 L2 损失(基于 L2 范数的平方)。当 Reduction 选项为 "sum" 且 NormalizationFactor 选项为 "batch-size" 时,计算出的值称为均方误差 (MSE)。huberHuber 运算计算回归任务的网络预测值和目标值之间的 Huber 损失。当 'TransitionPoint' 选项为 1 时,这也称为平滑 L1 损失。mse半均方误差运算计算回归任务的网络预测值和目标值之间的半均方误差损失。ctcCTC 运算计算未对齐序列之间的连接时序分类 (CTC) 损失。

对于需要比预测值和目标值更多输入的损失函数(例如,需要访问神经网络或额外输入的损失函数),请使用自定义训练循环来训练模型。有关详细信息,请参阅定义自定义训练循环损失函数。有关示例,请参阅Train Network Using Custom Training Loop。

为自定义训练循环定义深度学习模型

对于大多数任务,您可以使用 trainingOptions 和 trainnet 函数来控制训练算法的细节。如果 trainingOptions 函数没有为您的任务提供所需的选项(例如,自定义学习率调度),则您可以定义您自己的自定义训练循环。

将模型定义为神经网络

对于可以指定为层数组或层神经网络的模型,请将模型指定为 dlnetwork 对象。例如,要为自定义训练循环定义简单的 LSTM 神经网络,请使用:

layers = [ sequenceInputLayer(3) lstmLayer(100,OutputMode="last") fullyConnectedLayer(4) softmaxLayer]; net = dlnetwork(layers);

要使用自定义训练循环来训练神经网络,必须初始化网络。要初始化神经网络,请使用 initialize 函数。

net = initialize(net);

有关如何使用自定义学习率调度来训练网络的示例,请参阅Train Network Using Custom Training Loop。

将模型定义为函数

对于无法使用数组或层网络创建的架构,您可以将模型定义为 [Y1,...,YM] = model(parameters,X1,...,XN) 形式的函数,其中 parameters 包含网络参数,X1,...,XN 对应于 N 个模型输入的输入数据,Y1,...,YM 对应于 M 个模型输出。要训练定义为函数的深度学习模型,请使用自定义训练循环。有关示例,请参阅Train Network Using Model Function。

将深度学习模型定义为函数时,必须手动初始化可学习参数。有关详细信息,请参阅Initialize Learnable Parameters for Model Function。

如果您将自定义网络定义为函数,则模型函数必须支持自动微分。您可以使用下表中的深度学习运算。此处列出的函数只是一部分。有关支持 dlarray 输入的函数的完整列表,请参阅List of Functions with dlarray Support。

函数描述attentionattention 运算专门使用加权乘法运算来处理输入部分。avgpool平均池化运算通过将输入划分为若干池化区域并计算每个区域的平均值来执行下采样。batchnorm批量归一化运算独立地对每个通道的所有观测值的输入数据进行归一化。为了加快卷积神经网络的训练并降低对网络初始化的敏感度,请在卷积和非线性运算之间使用批量归一化,如 relu。crossentropy交叉熵运算计算单标签和多标签分类任务的网络预测值和目标值之间的交叉熵损失。crosschannelnorm跨通道归一化运算使用不同通道中的局部响应来归一化每个激活。跨通道归一化通常遵循 relu 运算。跨通道归一化也称为局部响应归一化。ctcCTC 运算计算未对齐序列之间的连接时序分类 (CTC) 损失。dlconv卷积运算对输入数据应用滑动滤波器。使用 dlconv 函数进行深度学习卷积、分组卷积和按通道可分离卷积。dlode45神经常微分方程 (ODE) 运算返回指定的 ODE 的解。dltranspconv转置卷积运算对特征图进行上采样。embed嵌入运算将数值索引转换为数值向量,其中索引对应于离散数据。使用嵌入将离散数据(如分类值或单词)映射到数值向量。fullyconnect全连接运算将输入乘以权重矩阵,然后添加偏置向量。gelu高斯误差线性单元 (GELU) 激活运算根据高斯分布下的概率对输入进行加权。groupnorm组归一化运算独立地对每个观测的通道分组子集的输入数据进行归一化。为了加快卷积神经网络的训练并降低对网络初始化的敏感度,请在卷积和非线性运算之间使用组归一化,如 relu。gru门控循环单元 (GRU) 运算允许网络学习时间序列和序列数据中时间步之间的相关性。huberHuber 运算计算回归任务的网络预测值和目标值之间的 Huber 损失。当 'TransitionPoint' 选项为 1 时,这也称为平滑 L1 损失。instancenorm实例归一化运算独立地对每个观测的每个通道的输入数据进行归一化。为了改进训练卷积神经网络的收敛性并降低对网络超参数的敏感度,请在卷积和非线性运算之间使用实例归一化,如 relu。l1lossL1 损失运算计算在给定网络预测值和目标值情况下的 L1 损失。当 Reduction 选项为 "sum" 且 NormalizationFactor 选项为 "batch-size" 时,计算出的值称为均值绝对误差 (MAE)。l2lossL2 损失运算计算在给定网络预测值和目标值情况下的 L2 损失(基于 L2 范数的平方)。当 Reduction 选项为 "sum" 且 NormalizationFactor 选项为 "batch-size" 时,计算出的值称为均方误差 (MSE)。layernorm层归一化运算独立地对每个观测的所有通道的输入数据进行归一化。为了加快循环和多层感知器神经网络的训练并降低对网络初始化的敏感度,请在可学习运算后使用层归一化,例如 LSTM 和全连接运算。leakyrelu泄漏修正线性单元 (ReLU) 激活运算执行非线性阈值运算,其中任何小于零的输入值都会乘以一个固定缩放因子。lstm长短期记忆 (LSTM) 运算允许网络学习时间序列和序列数据中时间步之间的长期相关性。maxpool最大池化运算通过将输入划分为若干池化区域并计算每个区域的最大值来执行下采样。maxunpool最大去池化运算通过上采样和填充零对最大池化运算的输出进行去池化。mse半均方误差运算计算回归任务的网络预测值和目标值之间的半均方误差损失。onehotdecode

one-hot 解码运算将概率向量(例如分类网络的输出)解码为分类标签。

输入 A 可以是 dlarray。如果 A 已格式化,函数将忽略数据格式。

relu修正线性单元 (ReLU) 激活运算执行非线性阈值运算,其中任何小于零的输入值都设置为零。sigmoidsigmoid 激活运算将 sigmoid 函数应用于输入数据。softmaxsoftmax 激活运算将 softmax 函数应用于输入数据的通道维度。定义自定义训练循环损失函数

训练深度神经模型是一项优化任务。通过将深度学习模型视为函数 f(X;θ)(其中 X 是模型输入,而 θ 是可学习参数集),您可以优化 θ,以便根据训练数据最小化某些损失值。例如,优化可学习参数 θ,以便对于给定的输入 X 和对应的目标值 T,它们可以最小化预测值 Y=f(X;θ) 和 T 之间的误差。

要使用自定义训练循环来训练深度学习模型,可以使用基于梯度下降的方法来最小化损失。例如,您可以迭代方式更新模型的可学习参数以使损失最小化。例如,您可以使用 lbfgsupdate、adamupdate、rmspropupdate 和 sgdmupdate 函数更新可学习参数,这些函数需要可学习参数关于损失的梯度。要计算这些梯度,您可以使用自动微分。创建一个自定义损失函数,该函数接受模型和训练数据,并返回损失和损失关于可学习参数的梯度。

对于指定为 dlnetwork 对象的模型,创建 [loss,gradients] = modelLoss(net,X,T) 形式的函数,其中 net 是网络,X 是网络输入,T 包含目标,loss 和 gradients 分别是返回的损失和梯度。您也可以向梯度函数传递额外的参量(例如,当损失函数需要额外的信息时),或返回额外的参量(例如,已更新的网络状态)。

对于指定为函数的模型,创建 [loss,gradients] = modelLoss(parameters,X,T) 形式的函数,其中 parameters 包含可学习参数,X 是模型输入,T 包含目标,loss 和 gradients 分别是返回的损失和梯度。您也可以向梯度函数传递额外的参量(例如,当损失函数需要额外的信息时),或返回额外的参量(例如,已更新的模型状态)。

要计算 modelLoss 函数中的梯度,请使用 dlgradient 函数。

要了解有关为自定义训练循环定义模型损失函数的详细信息,请参阅Define Model Loss Function for Custom Training Loop。

有关如何训练可通过自定义损失函数来生成图像的生成对抗网络 (GAN) 的示例,请参阅训练生成对抗网络 (GAN)。

使用自动微分更新可学习参数

要使用自动微分计算模型损失函数,请使用 dlfeval 函数,该函数可以对启用了自动微分的函数进行计算。对于 dlfeval 的第一个输入,传递指定为函数句柄的模型损失函数。对于以下输入,传递模型损失函数所需的变量。对于 dlfeval 函数的输出,指定与模型损失函数相同的输出。

要更新可学习参数,您可以使用以下函数。

函数描述adamupdate使用自适应矩估计 (Adam) 更新参数rmspropupdate使用均方根传播 (RMSProp) 更新参数sgdmupdate使用带动量的随机梯度下降 (SGDM) 更新参数lbfgsupdate使用限制内存量的 BFGS (L-BFGS) 更新参数dlupdate使用自定义函数更新参数

例如,要使用 SGDM 更新可学习参数,请在自定义训练循环的每次迭代中使用:

[loss,gradients] = dlfeval(@modelLoss,net,X,T); [net,velocity] = sgdmupdate(net,gradients,velocity,learnRate,momentum); 另请参阅

dlarray | dlgradient | dlfeval | dlnetwork

相关主题训练生成对抗网络 (GAN)Train Network Using Custom Training LoopSpecify Training Options in Custom Training LoopDefine Model Loss Function for Custom Training LoopUpdate Batch Normalization Statistics in Custom Training LoopUpdate Batch Normalization Statistics Using Model FunctionMake Predictions Using dlnetwork ObjectMake Predictions Using Model FunctionTrain Network Using Model FunctionInitialize Learnable Parameters for Model FunctionTrain Deep Learning Model in MATLAB定义自定义深度学习层List of Functions with dlarray SupportAutomatic Differentiation BackgroundUse Automatic Differentiation In Deep Learning Toolbox


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭