主要内容

复值数据列车网络

这个例子展示了如何使用一维卷积神经网络预测复值波形的频率。

要将复值数据传递给神经网络,可以使用输入层将复值分解为实部和虚部,然后再将数据传递给网络中的后续层。当输入层以这种方式分割输入数据时,该层将分割的数据作为额外通道输出。这张图显示了复值数据如何通过卷积神经网络。

若要将复值数据分为实部和虚部作为网络的输入,请设置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],”——“

另请参阅

|||||

相关的话题

Baidu
map