复值数据列车网络
这个例子展示了如何使用一维卷积神经网络预测复值波形的频率。
要将复值数据传递给神经网络,可以使用输入层将复值分解为实部和虚部,然后再将数据传递给网络中的后续层。当输入层以这种方式分割输入数据时,该层将分割的数据作为额外通道输出。这张图显示了复值数据如何通过卷积神经网络。
若要将复值数据分为实部和虚部作为网络的输入,请设置SplitComplexInputs
网络输入层的选项1
(真正的
).
本例使用复杂波形数据集训练序列到一回归网络,该数据集包含500个综合生成的具有两个通道的不同长度的复值波形。本例中训练的网络预测波形的频率。
加载序列数据
加载示例数据ComplexWaveformData.mat
.数据是numObservations
-by-1单元格序列数组,其中numObservations
是序列的个数。每个序列都是numChannels
——- - - - - -numTimeSteps
复数的数组,numChannels
序列的通道数和numTimeSteps
是序列中的时间步数。对应的目标在numObservations
——- - - - - -numResponses
波形频率的数值数组,其中numResponses
是目标的通道数。
负载ComplexWaveformData
查看观察数。
numObservations =元素个数(数据)
numObservations = 500
查看前几个序列的大小和相应的频率。
数据(1:4)
ans =4×1单元阵列{2×157 double} {2×112 double} {2×102 double} {2×146 double}
频率(1:4,:)
ans =4×15.6232 2.1981 4.6921 4.5805
查看序列的通道数。对于网络训练,每个序列必须有相同数量的通道。
{1} numChannels =大小(数据,1)
numChannels = 2
查看响应数(目标的通道数)。
numResponses =大小(频率,2)
numResponses = 1
在图中想象最初的几个序列。
displayLabels = [...“真正的一部分”+换行符+“通道”+字符串(1:numChannels),...“虚部”+换行符+“通道”+字符串(1:numChannels)];图tiledlayout (2, 2)为nexttile stackedplot([real(data{i}') imag(data{i}')],DisplayLabels= DisplayLabels) xlabel(“时间步”)标题(频率:“+频率(i))结束
为培训准备数据
为验证和测试预留数据。将数据划分为一个包含80%数据的训练集、一个包含10%数据的验证集和一个包含剩余10%数据的测试集。要对数据进行分区,请使用trainingPartitions
函数,作为支持文件附加到本示例中。要访问此文件,请将示例作为实时脚本打开。
[idxTrain,idxValidation,idxTest] = trainingPartitions(numObservations, [0.8 0.1 0.1]);XTrain =数据(idxTrain);XValidation =数据(idxValidation);XTest =数据(idxTest);TTrain =频率(idxTrain);TValidation =频率(idxValidation);tt =频率(idxTest);
为了帮助检查网络对于较短的训练序列是否有效,可以将最短序列的长度传递给网络的序列输入层。计算最短训练序列的长度。
为n = 1: numl (XTrain) sequenceLengths(n) = size(XTrain{n},2);结束最小长度= min (sequenceLengths)
最小长度= 76
定义1-D卷积网络架构
定义1-D卷积神经网络体系结构。
指定一个序列输入层,其输入大小与输入数据的特征数量匹配。
若要将输入数据分解为实部和虚部,请设置
SplitComplexInputs
输入层的选项1
(真正的
).要帮助检查网络对于较短的训练序列是否有效,请设置
最小长度
选择最短训练序列的长度。指定一维卷积、ReLU和层归一化层的两个块,其中卷积层的过滤器大小为5。分别为第一和第二卷积层指定32和64个过滤器。对于两个卷积层,左填充输入,使输出具有相同的长度(因果填充)。
为了将卷积层的输出减少到单个向量,可以使用1-D全局平均池化层。
要指定要预测的值的数量,请包含一个大小与响应数量匹配的完全连接层,然后是一个回归层。
filterSize = 5;numFilters = 32;层= [...sequenceInputLayer (numChannels SplitComplexInputs = true,最小长度=最小长度)convolution1dLayer (filterSize、numFilters、填充=“因果”reluLayer layerNormalizationLayer convolution1dLayer(filterSize,2*numFilters,Padding= .“因果”) reluLayer layerNormalizationLayer globalAveragePooling1dLayer fulllyconnectedlayer (numResponses) regressionLayer];
指定培训选项
指定培训选项。
使用亚当优化器进行训练。
训练250个时代。对于较大的数据集,您可能不需要训练那么多的时间来获得良好的拟合。
指定用于验证的序列和响应。
输出验证损耗最小的网络。
以图解的方式展示训练过程。
禁用详细输出。
选择= trainingOptions (“亚当”,...MaxEpochs = 250,...ValidationData = {XValidation, TValidation},...OutputNetwork =“best-validation-loss”,...情节=“训练进步”,...Verbose = false);
列车网络的
方法使用指定的训练选项训练网络trainNetwork
函数。
网= trainNetwork (XTrain、TTrain层,选择);
测试网络
利用测试数据进行预测。
欧美=预测(净、XTest SequencePaddingDirection =“左”);
在一个图中想象最初的几个预测。
displayLabels = [...“真正的一部分”+换行符+“通道”+字符串(1:numChannels),...“虚部”+换行符+“通道”+字符串(1:numChannels)];图tiledlayout (2, 2)为i = 1:4 nexttile s(i) = stackedplot([real(XTest{i}') imag(XTest{i}')], DisplayLabels= DisplayLabels) xlabel(“时间步”)标题(频率:“+频率(i))结束
在直方图中可视化均方误差。
图直方图(mean((TTest - YTest).^2,2))“错误”) ylabel (“预测”)
计算总体均方根误差。
rmse =√意味着(YTest-TTest)。^ 2))
rmse =单0.6642
将预测频率与目标频率绘制图。
图散射(欧美、tt、“+”);包含(“预测频率”) ylabel (“目标频率”)举行在m = min(频率);M = max(频率);xlim([m m]) ylim([m m]) plot([m m], [m m],”——“)
另请参阅
convolution1dLayer
|trainingOptions
|trainNetwork
|sequenceInputLayer
|regressionLayer
|预测