心电图分类(一维数组)实现类激活图CAM可视化

最近希望通过观察特征的重要性进行模型分析,通过下面这篇文章了解了神经网络当中存在一些可视化操作,Keras实现卷积神经网络(CNN)可视化,包括有:
主要的四种可视化模式:

  1. 卷积核输出的可视化,即可视化卷积操作后的结果,帮助理解卷积核的作用。
  2. 卷积核的可视化,对卷积核本身进行可视化,对卷积核学习到的行为进行解释。
  3. 类激活图可视化,通过热度图,了解图像分类问题中图像哪些部分起到了关键作用,同时可以定位图像中物体的位置。
  4. 特征可视化,与第一种方法类似,但是输出的不再是卷积层的激活值,而是使用反卷积与反池化来可视化输入图像的激活特征。

卷积核输出和卷积核可视化都比较简单,这里主要是想实现一下类激活图的可视化。
主要参考了这篇博客:keras CAM和Grad-cam原理简介与实现
两种类型的分类模型。feature extraction+Flatten+softmax和feature extraction+GAP+softmax,我使用的是第二种:
在这里插入图片描述

代码如下:

x = X_test[0]#这里是获取的测试集的某一个样本作为输入
x = np.expand_dims(x,axis=0)#扩展维度
model = load_model('multilabel_model_0907.h5',custom_objects={'acc_loss': acc_loss, 'f1': f1, 'acc': acc})#下载保存的模型
pred = model.predict(x)
class_idx = np.argmax(pred[0])

class_output = model.output[:,class_idx]
last_conv_layer = model.get_layer("multiply_11")#这里是最后一个特征提取操作
gap_weights = model.get_layer("average_pooling")#模型的GAP操作
tf.compat.v1.disable_eager_execution()
import tensorflow.keras.backend as K
import tensorflow as tf
grads = K.gradients(class_output,gap_weights.output)[0]
iterate = K.function([model.input],[grads,last_conv_layer.output[0]])
pooled_grads_value, conv_layer_output_value = iterate([x])
pooled_grads_value = np.squeeze(pooled_grads_value,axis=0)
for i in range(256):#最后一个特征提取层的卷积核数量
    conv_layer_output_value[:,i] *= pooled_grads_value[i]
heatmap = np.mean(conv_layer_output_value, axis=-1)
heatmap = np.maximum(heatmap,0)#relu激活。
heatmap /= np.max(heatmap)
import cv2
from PIL import Image
img = np.uint8(255*X_test[0])
heatmap = cv2.resize(heatmap,(img.shape[1],img.shape[0]))
heatmap = np.uint8(255*heatmap)
heatmap = cv2.applyColorMap(heatmap,cv2.COLORMAP_JET)
img = cv2.applyColorMap(img,cv2.COLORMAP_JET)#由蓝色到红色,越红关注度越高
superimposed_img = cv2.addWeighted(img,0.6,heatmap,0.4,0)
cv2.imwrite('heatmap.png',heatmap)
cv2.imwrite('img.png',img)
cv2.imwrite('Grad-cam.png',superimposed_img)

最终我得到的heatmap如下图:
在这里插入图片描述

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
PyTorch是一个非常流行的开源深度学习框架,可以用于许多不同型的任务,包括心电图(ECG)分类心电图分类是指根据患者的心电图数据来识别不同型的心脏疾病或异常。下面是使用PyTorch进行心电图分类的一般步骤: 1. 数据准备:收集和整理心电图数据集。此数据集应包括心脏健康的样本和患有不同心脏疾病的样本。确保数据集中的样本数足够,并进行标记以表示不同的别。 2. 数据预处理:将心电图数据转换为适合神经网络输入的格式。通常,这包括将信号进行标准化、滤波和降采样等预处理步骤。 3. 构建模型:使用PyTorch构建适合心电图分类的深度学习模型。可以选择使用卷积神经网络(CNN)来捕捉输入数据中的时域和频域特征。还可以结合使用循环神经网络(RNN)来处理时间序列数据。 4. 模型训练:将数据集分为训练集和验证集,使用训练集对构建的模型进行训练。通过定义适当的损失函数和优化器,使用反向传播算法更新模型的权重和偏置。 5. 模型评估:在训练过程中,使用验证集评估模型的性能,并根据需要进行调整和改进。评估指标可以包括准确率、精确率、召回率等。 6. 模型预测:在模型训练完成后,可以使用该模型对新的心电图数据进行分类预测。将新的数据输入训练好的模型,进行前向传播,得到分类结果。 总结来说,使用PyTorch进行心电图分类可以提供一个强大的工具来识别心脏疾病和异常。通过准备数据集、构建模型、训练和评估模型,以及进行预测,可以实现高效准确的心电图分类任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值