Main Content

深度网络设计器快速入门

此示例说明如何使用深度网络设计器创建一个简单的循环神经网络以用于深度学习序列分类。

要训练深度神经网络以对序列数据进行分类,可以使用 LSTM 网络。LSTM 网络允许您将序列数据输入网络,并根据序列数据的各个时间步进行预测。

加载序列数据

WaveformData 加载示例数据。要访问此数据,请以实时脚本形式打开此示例。此数据包含四类波形:正弦波、方波、三角波和锯齿波。此示例训练 LSTM 神经网络来识别给定时间序列数据的波形类型。每个序列有三个通道,且长度不同。

load WaveformData 

在绘图中可视化一些序列。

numChannels = size(data{1},2);
classNames = categories(labels);

figure
tiledlayout(2,2)
for i = 1:4
    nexttile
    stackedplot(data{i},DisplayLabels="Channel "+string(1:numChannels))
    
    xlabel("Time Step")
    title("Class: " + string(labels(i)))
end

将数据划分为包含 80% 数据的训练集以及各包含 10% 数据的验证集和测试集。要对数据进行分区,请使用 trainingPartitions 函数。要访问此函数,请以实时脚本形式打开此示例。

numObservations = numel(data);
[idxTrain,idxValidation,idxTest] = trainingPartitions(numObservations,[0.8 0.1 0.1]);

XTrain = data(idxTrain);
TTrain = labels(idxTrain);

XValidation = data(idxValidation);
TValidation = labels(idxValidation);

XTest = data(idxTest);
TTest = labels(idxTest);

定义网络架构

要构建网络,请使用深度网络设计器。

deepNetworkDesigner

要创建序列网络,请在序列网络部分中的要标注的序列上暂停,然后点击打开。这会打开一个适合“序列到标签”分类问题的预置网络。

深度网络设计器显示该预置网络。

您可以轻松地将此序列网络用于 Waveform 数据集。

选择序列输入层 input,并将 InputSize 设置为 3 以匹配通道的数量。

选择全连接层 fc,并将 OutputSize 设置为 4 以匹配类的数量。

要检查网络是否准备好进行训练,请点击分析。深度学习网络分析器报告零错误或警告,因此,网络已准备就绪,可以开始进行训练。要导出网络,请点击导出。该 App 将网络保存在变量 net_1 中。

指定训练选项

指定训练选项。在选项中进行选择需要经验分析。

options = trainingOptions("adam", ...
    MaxEpochs=500, ...
    InitialLearnRate=0.0005, ...
    GradientThreshold=1, ...
    ValidationData={XValidation,TValidation}, ...
    Shuffle = "every-epoch", ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

训练神经网络

使用 trainnet 函数训练神经网络。由于目标是分类,因此指定交叉熵损失。

net = trainnet(XTrain,TTrain,net_1,"crossentropy",options);

测试神经网络

要测试神经网络,请对测试数据进行分类,并计算分类准确度。

使用 minibatchpredict 函数进行预测,并使用 scores2label 函数将分数转换为标签。

scores = minibatchpredict(net,XTest);
YTest = scores2label(scores,classNames);

计算分类准确度。准确度是正确预测的标签的百分比。

acc = mean(YTest == TTest)
acc = 0.8300

在混淆图中可视化预测。

figure
confusionchart(TTest,YTest)

另请参阅

相关主题