- · 《临床心电学杂志》投稿[01/26]
- · 《临床心电学杂志》期刊[01/26]
- · 临床心电学杂志版面费是[01/26]
临床心电学论文检测(动态心电图检查对评价心(2)
作者:网站采编关键词:
摘要:我说了很多,我对抑郁症有很深的感受。 我同情患有抑郁症的患者。 工作了10多年,接触了很多患者的抑郁情绪,也受到过很深的影响……只要你不放弃
我说了很多,我对抑郁症有很深的感受。 我同情患有抑郁症的患者。 工作了10多年,接触了很多患者的抑郁情绪,也受到过很深的影响……只要你不放弃,我们也不会放弃。 我会努力让你摆脱抑郁
病魔的折磨!加油!!!怎么学习深度学习?
深度学习,就是深层神经网络,仅此而已罢了,直接给你个基于深度学习的心音信号分类的例子。心音信号(PCG)是人体重要的生理信号,携带大量生理特征,但这些微弱信号的提取极易受到外界的干扰,关于心音信号处理相关的文章,可参考下面几篇博士论文,讲的非常详细,因此,不再赘述。
[1]陈尧. 心音心电信号处理的神经网络方法[D].四川大学,2021.
[2]李婷. 基于循环平稳信号理论的心音信号处理方法研究[D].大连理工大学,2015.
[3]韩威. 小样本心音分类方法研究[D].广东工业大学,2020.
首先进行心音信号2分类,即正常与异常分类,首先看一下本次试验用的GoogLeNet网络结构信息
看一下Layers结构
看下输入层信息
看一下两类PCG样本的时域波形
然后定义连续小波变换的滤波器组
fb = cwtfilterbank('SignalLength',signalLength,'VoicesPerOctave',12)
将生成的时频图像导入数据文件夹中
allImages = imageDatastore(fullfile(tempdir,dataDir),... 'IncludeSubfolders',true,'LabelSource','foldernames');
80%的样本用于训练,20%的样本用于测试
rng default [imgsTrain,imgsValidation] = splitEachLabel(allImages,0.8,'randomized'); disp(['Number of training images: ',num2str(numel(imgsTrain.Files))]); disp(['Number of validation images: ',num2str(numel(imgsValidation.Files))]);
Number of training images: 1673
Number of validation images: 419
看一下PCG信号CWT时频谱图的样子,首先看一下异常样本
再看一下正常常样本
设置GoogleNet网络的训练参数,采用sgdm优化算法,小批量尺寸MiniBatchSize=15,最大迭代次数MaxEpochs=20,初始学习率InitialLearnRate=1e-4。
options = trainingOptions('sgdm',... 'MiniBatchSize',15,... 'MaxEpochs',20,... 'InitialLearnRate',1e-4,... 'ValidationData',imgsValidation,... 'ValidationFrequency',10,... 'Verbose',false,... 'ExecutionEnvironment','gpu',... 'Plots','training-progress');
开始训练网络
trainedGN = trainNetwork(imgsTrain,lgraph_2,options);
进行网络测试
[YPred,probs] = classify(trainedGN,imgsValidation); accuracy = mean(YPred==imgsValidation.Labels); display(['GoogLeNet Accuracy: ',num2str(accuracy)])
GoogLeNet Accuracy: 0.89948,GoogLeNet的准确率达到了90%左右,不是很高,因为样本并不是很多。
看一下混淆矩阵
计算一下各个类别的分类指标
%"异常”类别分类指标 Recall = Matrice_confusione.NormalizedValues(1,1)/sum(Matrice_confusione.NormalizedValues(1,:)); Precision = Matrice_confusione.NormalizedValues(1,1)/sum(Matrice_confusione.NormalizedValues(:,1)); F1 = harmmean([Recall Precision]); fprintf('Recall = %2.3f\nPrecision = %2.3f\nF1 = %2.3f\n',100*Recall,100*Precision,100*F1); %"正常"类别分类指标 RecallNormal = Matrice_confusione.NormalizedValues(2,2)/sum(Matrice_confusione.NormalizedValues(2,:)); PrecisionNormal = Matrice_confusione.NormalizedValues(2,2)/sum(Matrice_confusione.NormalizedValues(:,2)); F1Normal = harmmean([RecallNormal PrecisionNormal]); fprintf('RecallNormal = %2.3f\nPrecisionNormal = %2.3f\nF1Normal = %2.3f\n',100*RecallNormal,100*PrecisionNormal,100*F1Normal);
Recall = 82.470 Precision = 86.250 F1 = 84.318 RecallNormal = 93.592 PrecisionNormal = 91.635 F1Normal = 92.603
因为本例只是个示范,所用的样本相对于GoogleNet结构并不多,所以分类准确率并不高。
下面进行心音信号5分类,即正常normal,主动脉瓣反流 AR,主动脉瓣狭窄AS,二尖瓣反流MR,二尖瓣狭窄MS五类,同样本例只是个示范,所用的样本较少,所以分类准确率并不高。看一下5类PCG样本的时域波形
然后定义连续小波变换的滤波器组
fb = cwtfilterbank('SignalLength',signalLength,'VoicesPerOctave',12)
看一下生成的CWT时频谱图
将生成的时频图像导入数据文件夹中
allImages = imageDatastore(fullfile(tempdir,dataDir),... 'IncludeSubfolders',true,'LabelSource','foldernames');
70%的样本用于训练,30%的样本用于测试
rng default [imgsTrain,imgsValidation] = splitEachLabel(allImages,0.7,'randomized'); disp(['Number of training images: ',num2str(numel(imgsTrain.Files))]); disp(['Number of validation images: ',num2str(numel(imgsValidation.Files))]);
文章来源:《临床心电学杂志》 网址: http://www.lcxdxzz.cn/zonghexinwen/2022/1212/1766.html