Andrew Y. Ng式ResNet在MIT-BIH上的Inter-Patient分类实现(3)

网络搭建

       正如我们前面所说的,原文中所使用的网络并没有什么特别新奇之处,与经典的ResNet-34架构很类似。不过这里的网络使用了更大的,长度为16的一维卷积核,而原ResNet用于二维图像分类,则倾向于使用尺寸为3×3的小卷积核。个人认为这种尺寸上的不同主要还是源于ECG信号和图像数据的本质不同。一般直接输入网络的图像分辨率较低,哪怕在感受野最小时,3×3的区域也很有可能包含了具有意义的变化;而对于ECG这样的低频,低采样率信号来说,任何位置3个采样点的区域很难构成一个有特定意义的波形变化,且极易受噪声干扰,这对特征学习带来了很大的消极影响,严重时甚至可能导致学习无效。使用大的卷积核可以有效缓解这一问题。当然使用小的卷积核,但构建更深的网络也有利于感受野扩大,但在我的平时实践中发现这么做的效果并不好,可能是因为这种方式对于ECG信号来说不够直接,小卷积核过于关注高频噪声带来的扰动,而忽略整体上的变化。在代码上我对原版本进行了一些修改,使得其更适合于当下的应用,网络配置参数存放于Config.py,网络本身结构的搭建存放于net.py(基于keras)。详细请参照github。

来自Hannun A Y, Rajpurkar P, Haghpanahi M, et al. Cardiologist-level arrhythmia detection and classification in ambulatory electrocardiograms using a deep neural network[J]. Nature medicine, 2019, 25(1): 65.

       还有一个问题就是关于网络的参数量。按照原文的配置,整个网络有1000多万的参数,若有足够的数据喂给网络,而且有足够的算力,这当然没什么问题。只是,由于我们手里并没有这么多数据,强行上大网络容易过拟合,当然还有就是我等贫穷之人没那么强的GPU加速(随便买GPU搭服务器玩的土豪请自动忽略)……这里我将其裁剪为了类似ResNet-18的架构,卷积核尺寸扩大一倍达到32,特征图数目由12起跳,将参数量缩减到了100多万;另外加入了更强的正则化,dropout丢弃概率由0.2改为0.5,每一层权重都加上l2正则。优化器也做了改动,由原来的Adam改变为SGD + Momentum,学习率初始值0.1,并在后续采用staircase式变化。更详细的参数可见Config.py和net.py。

       另外一点需要注意的是,原文中的任务其实并非我们所想象的那种传统的分类,而是对片段每256个点就会输出一个结果,不过这个就需要数据有更为详细的,各类信号持续时间的具体标注。很可惜这个我们也没有,这里只能将其改变为传统的分类形式。

        网络搭建好,数据准备好后,运行train.py就可以大炼丹了,运行test.py测试性能。

 

Github:https://github.com/Aiwiscal/MIT_Scheme

喜欢请点赞和github给star哦~~~~

发布了30 篇原创文章 · 获赞 205 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_15746879/article/details/88698887
今日推荐