主要内容

使用LIME研究谱图分类

这个例子展示了如何使用局部可解释的模型不可知论解释(LIME)来研究经过训练的深度卷积神经网络对谱图分类的鲁棒性。LIME是一种可视化技术,用于显示观测的哪些部分对网络的分类决策有贡献。本示例使用imageLIME要了解频谱图数据中的哪些功能对于分类最重要。

在这个例子中,你创建并训练一个神经网络来对四种模拟时间序列数据进行分类:

  • 单一频率的正弦波

  • 三个正弦波的叠加

  • 时间序列的广泛高斯峰

  • 时间序列中的高斯脉冲

为了使这个问题更加现实,时间序列包括增加的混杂信号:恒定的低频背景正弦曲线和大量的高频噪声。嘈杂的时间序列数据是一个具有挑战性的序列分类问题。您可以通过首先将时间序列数据转换为时频频谱图来揭示时间序列数据中的底层特征来接近问题。然后,您可以将频谱图输入到图像分类网络中。

生成波形和谱图

为四类生成时间序列数据。此示例使用辅助功能generateSpectrogramData生成时间序列和相应的频谱图数据。在此示例中使用的辅助函数附加为支持文件。金宝app

numObsPerClass = 500;类=分类([“SingleFrequency”“ThreeFrequency”“高斯”“脉冲”]);numClasses =长度(类);[noisyTimeSeries、谱图、标签]= generateSpectrogramData (numObsPerClass、类);

计算频谱图图像的大小和观察次数。

输入=尺寸(频谱图,[1 2]);numobs = size(谱图,4);

图生成的数据

绘制带有噪声的时间序列数据的子集。由于噪声具有与信号相当的振幅,因此数据在时域中出现噪声。这个特性使分类成为一个具有挑战性的问题。

图numplot = 12;i=1:numPlots subplot(3,4,i) plot(noisyTimeSeries(i,:))) title(labels(i))结束

绘制噪声数据的时频谱图,与时间序列图相同。横轴是时间,垂直轴是频率。

数字i = 1:12子图(3,4,i)imshow(谱图(:,:,1,i))保持COLOROMAP.parula标题(标签(i))持有离开结束

每个类的功能都清晰可见,展示为什么从时域转换为频谱图图像可能对此类型的问题有益。例如,SingleFrequency类具有基频的单个峰值,可见作为频谱图中的水平栏。为三个频率类,三个频率可见。

所有类别显示在低频(图像顶部附近)的微弱频段,对应于背景正弦曲线。

分割数据

使用splitlabels功能将数据划分为培训数据和验证数据。将80%的数据用于培训,20%用于验证。

splitIndices = splitlabels(标签,0.8);trainLabels =标签(splitIndices {1});trainSpectrograms =色(:,:,:,splitIndices {1});valLabels =标签(splitIndices {2});valSpectrograms =色(:,:,:,splitIndices {2});

定义神经网络结构

创建一个卷积神经网络块的卷积,批处理归一化,和ReLU层。

dropoutprob = 0.2;numfilters = 8;图层= [ImageInputLayer(InputSize)Convolution2dlayer(3,NumFilters,'填充''相同的'maxPooling2dLayer(3,“步”2,'填充''相同的')卷积2dlayer(3,2 * numfilters,'填充''相同的')BatchnormalizationLayer Convolution2Dlayer(3,4 * NumFilters,'填充''相同的')BatchnormalizationLayer Rublayer GlobalMaxPooling2Dlayer Dropouter(DropoutProb)全连接列(NumClasses)SoftmaxLayer ClassificationLayer];

定义培训的选项

使用SGDM Optimizer定义培训选项。通过设置逐个时代播放数据'洗牌'选择'每个时代'.通过设置来监测培训进度“阴谋”选择“训练进步”.要抑制verbose输出,请设置'verbose'错误的

选项=培训选项('sgdm'...'洗牌''每个时代'...“阴谋”“训练进步”...'verbose',错误的,...'vightationdata',{valspectrogregs,vallabels});

列车网络的

训练网络对谱图图像进行分类。

net = trainnetwork(火车标准,trainlabels,图层,选项);

准确性

使用培训的网络对验证观察分类。

predlabels =分类(Net,ValspectRogre);

通过绘制混淆矩阵来研究网络性能confusionchart

图杂志(Vallabels,Predlabels,'正常化''行标准化'

该网络可以准确地对验证谱图进行分类,大多数类别的准确率接近100%。

调查网络预测

使用imageLIME函数来理解图像数据中哪些特征对分类最重要。

石灰技术将图像分成几个特征,并通过随机包括或排除特征来产生合成观察。排除特征中的每个像素被替换为平均图像像素的值。该网络对这些合成观察进行分类,并利用所预测类的结果分数以及特征的存在或不存在,作为训练回归问题的响应和预测因子 - 在此示例中,在该示例中,回归树。回归树尝试在单个观察中近似网络的行​​为。它了解哪些功能很重要,显着影响课程得分。

定义自定义分割图

默认情况下,imageLIME使用SuperPixel分段将图像划分为特征。此选项适用于自然图像,但对频谱图数据不太有效。您可以通过设置来指定自定义分段映射“分割”数字 - 值参数到数字阵列与图像相同的大小,其中每个元素是对应于像素所在的特征索引的整数。

对于谱图数据,谱图图像在y维(频率)比x维(时间)有更精细的特征。生成一个240段的分割地图,在一个40 × 6网格,以提供更高的频率分辨率。将网格上采样到图像的大小imresize.功能,指定ups采样方法'最近'

featureidx = 1:240;semunationMap = RESHAPE(FeatureDX,6,40)';semunationmap = imresize(semonationmap,输入,'最近');

计算石灰地图

绘制频谱图并计算每个类的两个观察的石灰映射。

obsToShowPerClass = 2;j = 1: obsToShowPerClass图i=1:length(classes) idx = find(valLabels == classes(i),obsToShowPerClass);%读取测试图像和标签。testspectrogge = valspectrogregs(::::,idx(j));testlabel = vallabels(Idx(j));%计算石灰重要地图。地图= imageLIME(净、testSpectrogram testLabel,...“NumSamples”, 4096,...“分割”, segmentationMap);%将地图重新​​分配到图像的大小。mapRescale = uint8(255 *重新调节(地图));%绘制石灰图旁边的频谱图图像。subplot(2,2,i) imshow(imtile({testSpectrogram,mapRescale})) title(string(testLabel)) colormap . subplot(2,2,i) imshow(imtile({testSpectrogram,mapRescale})parula结束结束

石灰图表明,对于大多数类,网络专注于分类的相关特征。例如,对于SingleFrequency类,网络专注于与正弦波的功率谱相对应的频率,而不是伪装背景细节或噪声。

SingleFrequency类,网络使用频率进行分类。为脉冲高斯此外,网络还关注声谱图的正确频率部分。对于这三类,网络不会被所有光谱图顶部可见的背景频率所混淆。这个信息对区分这些类没有帮助(因为它存在于所有类中),所以网络忽略它。相比之下,对于三个频率类,恒定的背景频率与网络的分类决策相关。对于此类,网络不会忽略此频率,但将其视为与三个实际频率相似。

imageLIME结果表明,网络在时频谱图中使用峰值正确地使用峰值,并且对于所有类别的虚假背景正弦曲线并不混淆三个频率类,网络不区分信号和低频背景中的三个频率。

另请参阅

||(信号处理工具箱)

相关话题