sequenceInputLayer
在深度学习中的作用sequenceInputLayer
是 MATLAB 中用于处理序列数据的一个层,它专门用于接收输入序列并在神经网络的前端进行数据的预处理。该层通常用于处理时间序列数据、文本数据、或者图像序列数据,能够处理一维到三维的数据输入。
输入序列:
数据标准化:
sequenceInputLayer
提供了多种数据标准化选项,如 zerocenter
(中心化),zscore
(标准化),rescale-symmetric
(对称缩放),rescale-zero-one
(0到1之间的缩放)等。你可以根据需求选择适当的标准化方式。支持图像序列:
inputSize
:这是序列数据的大小。它可以是:
[h, c]
,其中 h
是图像的高度,c
是通道数。[h, w, c]
,其中 h
是图像的高度,w
是图像的宽度,c
是通道数。[h, w, d, c]
,其中 h
、w
、d
是图像的维度,c
是通道数。MinLength
:输入数据的最小序列长度。训练或预测时,如果输入数据的时间步长少于此值,软件会报错。
Normalization
:指定在每次数据前向传播时要应用的数据标准化方法。常见选项包括:
zerocenter
:减去均值。zscore
:减去均值并除以标准差。rescale-symmetric
:将输入数据的范围缩放到 [-1, 1]
。rescale-zero-one
:将输入数据的范围缩放到 [0, 1]
。SplitComplexInputs
:是否将输入数据分为实部和虚部。对于复杂数据,可以设置为 true
,将输入数据分为实部和虚部。
创建一个简单的序列输入层:
layer = sequenceInputLayer(12);
这个层接受一个大小为 12 的输入序列。
在 LSTM 网络中使用序列输入层:
inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [
sequenceInputLayer(inputSize)
lstmLayer(numHiddenUnits, 'OutputMode', 'last')
fullyConnectedLayer(numClasses)
softmaxLayer];
这个例子展示了一个基于 LSTM 的序列分类网络,sequenceInputLayer
用来接收输入的序列数据。
创建适用于图像序列的输入层:
layer = sequenceInputLayer([224 224 3], 'Name', 'seq1');
这个层用于接收一系列 224x224 RGB 图像的输入,适用于处理视频或连续图像帧的任务。
sequenceInputLayer
可以支持复杂值输入,允许将实部和虚部分开处理。sequenceInputLayer
,开始支持序列数据的处理。总的来说,sequenceInputLayer
是一个非常灵活的层,适用于各种序列数据的输入,可以广泛应用于时序预测、自然语言处理、视频分析等任务中。
convolution1dLayer
在深度学习中的作用convolution1dLayer
是 MATLAB 中用于进行 1D 卷积运算的层。它将卷积滤波器应用于 1D 输入数据,执行卷积操作,从而提取特征或模式。该层广泛应用于处理序列数据、时间序列数据、音频信号等一维数据。
卷积操作:
convolution1dLayer
会将滤波器在输入数据上滑动,并计算滤波器与输入数据的点积,随后加上一个偏置项。应用场景:
支持多个输入格式:
SCB
(空间、通道、批次)和 CBT
(通道、批次、时间)等。扩展卷积:
dilationFactor
参数允许使用扩张卷积,这是一种常用的技术,可以扩大感受野(即卷积核能够看到的数据区域),而不增加参数数量。layer = convolution1dLayer(filterSize, numFilters)
filterSize
:滤波器的宽度,指定为正整数。numFilters
:滤波器的数量,指定为正整数,决定了输出的特征图数量。Stride
:卷积的步幅(即每次滑动的步长),默认为 1。DilationFactor
:扩张卷积因子,默认为 1。它用于增大卷积核之间的间距,从而增大感受野。Padding
:输入数据的填充,支持不同的填充策略,如 same
(使输出大小与输入相同)和 causal
(用于时间序列数据的因果卷积,保证当前时刻只依赖于历史数据)。PaddingValue
:填充时使用的值,可以设置为数值或指定填充方式,如 replicate
、symmetric
。NumChannels
:输入通道的数量,默认是自动推断。创建一个 1D 卷积层:
layer = convolution1dLayer(11, 96);
这个例子创建了一个宽度为 11 的卷积滤波器,共 96 个滤波器。
创建包含 1D 卷积层的网络:
layers = [
sequenceInputLayer(3, MinLength=20)
layer
reluLayer
globalMaxPooling1dLayer
fullyConnectedLayer(10)
softmaxLayer
];
该例子展示了一个包括 1D 卷积层的简单神经网络,适用于处理序列输入数据。
convolution1dLayer
,专为一维数据处理设计。扩张卷积:通过增加 dilationFactor
,可以在不增加计算量的情况下扩大感受野,这在需要捕捉长范围依赖关系的任务中非常有用。
填充策略:通过选择不同的填充方式(如 causal
),可以确保卷积操作在时序数据中的顺序依赖性不会被打乱,适用于时间序列预测等任务。
convolution1dLayer
是处理一维数据的强大工具,能够帮助提取数据的局部特征,尤其适合用于序列数据处理和模式识别任务。
layerNormalizationLayer
layerNormalizationLayer
是一种层归一化层,主要用于对神经网络的输入进行归一化处理。在神经网络中,尤其是递归神经网络(RNN)和多层感知机(MLP)中使用 layerNormalizationLayer
可以加速训练过程,并减少对网络初始化的敏感性。
与批量归一化(batch normalization)不同,层归一化是对每个输入样本独立进行归一化,即它是在每个样本的维度上进行操作,而批量归一化是在整个批次的维度上进行操作。这使得 layerNormalizationLayer
特别适用于序列数据或某些类型的递归神经网络(例如 LSTM 或 GRU)。
layerNormalizationLayer
在输入数据上进行的归一化计算可分为两步:
归一化:
[
\hat{x_i} = \frac{x_i - \mu_L}{\sqrt{\sigma_L^2 + \epsilon}}
]
缩放和平移:
归一化后的输出将会使用学习的缩放因子(( \gamma ))和偏移量(( \beta ))进行进一步处理:
[
y_i = \gamma \hat{x_i} + \beta
]
每个样本独立归一化:
layerNormalizationLayer
会对每个输入样本独立地计算均值和方差,然后进行归一化。学习的参数:
数值稳定性:
layer = layerNormalizationLayer
创建一个默认的 layerNormalizationLayer
。
使用名称-值对设置可选属性:
layer = layerNormalizationLayer('Name', 'layernorm', 'Epsilon', 1e-5)
Epsilon
:加到方差上的常数,默认为 ( 1e-5 ),用于确保计算的稳定性。
NumChannels
:输入数据的通道数。设置为 "auto"
时,会在训练时自动确定通道数。
OperationDimension
:指定要进行归一化的维度。它有多个选项:
"auto"
:自动选择维度进行归一化(对于特征、序列、1D 图像等数据,通常是在通道维度进行归一化)。"channel-only"
:仅在通道维度进行归一化。"spatial-channel"
:在空间维度和通道维度上进行归一化。"batch-excluded"
:在所有维度上进行归一化,但排除批次维度。Scale
和 Offset
:这两个是可学习的参数。Scale
是缩放因子(( \gamma )),Offset
是偏移量(( \beta ))。它们将用于缩放和移位归一化后的输入数据。
ScaleInitializer
和 OffsetInitializer
:指定缩放因子和偏移量的初始化方式。可以选择如 'ones'
、'zeros'
、'narrow-normal'
(均值为0,标准差为0.01的正态分布)等初始化方式。
layers = [
imageInputLayer([32 32 3])
convolution2dLayer(3,16,'Padding',1)
layerNormalizationLayer
reluLayer
maxPooling2dLayer(2,'Stride',2)
convolution2dLayer(3,32,'Padding',1)
layerNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
];
在这个示例中,使用了两次 layerNormalizationLayer
,每次都放在卷积层之后,有助于加速训练,并改善训练过程中的稳定性。
ScaleLearnRateFactor
和 OffsetLearnRateFactor
:这些参数用于控制缩放因子和偏移量的学习速率因子。默认情况下,它们的值为1,但你可以通过设置它们来调整每个层的学习速率。
L2 正则化:ScaleL2Factor
和 OffsetL2Factor
分别控制缩放因子和偏移量的 L2 正则化因子,默认情况下,它们的值为1。
layerNormalizationLayer
,使得用户能够在神经网络中执行层归一化操作。OperationDimension
属性,使得用户能够选择具体的归一化维度。此外,还支持 1-D 图像序列数据和通道维度的归一化。layerNormalizationLayer
是深度学习中的一个重要工具,尤其在递归神经网络(如 LSTM)中,它能够有效地提升训练速度,稳定性,并减少对网络初始化的敏感性。在处理时序数据、特征数据或图像序列时,层归一化尤其有用。通过学习可调整的缩放因子和偏移量,layerNormalizationLayer
提供了更大的灵活性,使得神经网络能够更好地适应复杂的输入数据。
reluLayer
— ReLU 激活层ReLU (Rectified Linear Unit) 层是一种常见的激活函数层,广泛用于深度学习模型中,特别是在卷积神经网络 (CNN) 和多层感知机 (MLP) 中。它的作用是对输入的每个元素执行阈值运算,对于每个小于零的输入值,将其设置为零。该操作可以表示为:
[
f(x) =
\begin{cases}
x, & \text{if } x \geq 0 \
0, & \text{if } x < 0
\end{cases}
]
这意味着所有负值会被“修正”为零,而正值保持不变。ReLU 层的主要优点是简单且计算高效,通常能够帮助加速神经网络的训练并缓解梯度消失问题。
你可以使用以下语法来创建一个 ReLU 激活层:
layer = reluLayer
如果你想为该层指定名称,可以使用:
layer = reluLayer('Name', 'relu1')
在这个例子中,我们为层指定了名称 "relu1"
。
Name
:指定层的名称。默认为空字符串 ""
。你可以在创建时通过 Name
参数为其指定名称。
char
或 string
NumInputs
:表示输入的数量,默认值为 1。ReLU 层只接受一个输入。
double
InputNames
:输入的名称,默认为 {'in'}
,表示 ReLU 层只接受一个输入。
cell
NumOutputs
:输出的数量,默认值为 1,表示该层输出一个结果。
double
OutputNames
:输出的名称,默认为 {'out'}
,表示该层只有一个输出。
cell
reluLayer
% 创建一个具有 ReLU 激活层的简单网络
layers = [
imageInputLayer([28 28 1]) % 输入图像层
convolution2dLayer(5,20) % 卷积层,20 个 5x5 的卷积核
reluLayer % ReLU 激活层
maxPooling2dLayer(2, 'Stride', 2) % 最大池化层,池化大小为 2x2
fullyConnectedLayer(10) % 全连接层,输出 10 个类别
softmaxLayer % Softmax 层,转换为概率分布
];
在此示例中,ReLU 层用于卷积层和池化层之间,用于引入非线性特性,帮助网络学习更复杂的模式。
reluLayer
,使得用户能够在神经网络中使用 ReLU 激活函数。reluLayer
是深度学习中常用的一种激活层,其主要功能是对输入进行阈值处理,将负值设为零,正值保持不变。它广泛应用于卷积神经网络和其他深度学习模型中,是一个简单且高效的非线性激活函数,能够帮助神经网络更好地学习复杂的特征。