卷积神经网络看见了什么
NVIDIA DLI 深度学习入门培训 | 特设三场!!
4月28日/5月19日/5月26日一天密集式学习 快速带你入门阅读全文>
正文共1859个字,2张图,预计阅读时间5分钟。
这是众多卷积神经网络可视化方法之一,方法来自于论文《Learning Deep Features for Discriminative Localization》,论文译文在[翻译]Learning Deep Features for Discriminative Localization。
这篇文章的核心思想是提出了一种叫Class Activation Mapping(类激活图)的方法,可以通过它将CNN在分类时“看”到的东西可视化出来。它的原理是:CNN的卷积层包含大量位置信息,使其具有良好的定位能力,但是全连接层使这种能力丧失,如果只保留最后一个用于分类的全连接层(特指softmax),把其余全连接层替换成全局平均池化层(Global Average Pooling)层,就可以保留这中定位能力,把最后一个softmax层各个单元的权重与最后一个卷积层的输出相乘(求加权总和),绘制热成像图,得到的结果就是一个类激活图。
举个例子,假设图片经过最后一个卷积层的shape为(14,14,512),第一维和第二维代表宽高,第三维代表卷积层深度,softmax层的shape为(512,10),第一维代表unit数,第二维代表分类数,想得到某一个类的类激活图,就用通过最后一个卷积层的矩阵乘以sotfmax某类的矩阵,即(14,14,512)的矩阵乘以(512,1)的矩阵,得到(14,14,1)的矩阵,也就是那个类的类激活图,下面是类激活图:
司机驾驶状态分类
论文中提到最后一个卷积层输出的分辨率越高,定位能力越强,得到的CAM图越好。对应的处理方法就是不仅要砍掉全连接层,还要砍掉一些卷积层,使分辨率控制在14左右。下面是论文中图,与上图最大差别就是有红色,原因可能是分辨率问题,也可能单纯是颜色表示问题,还需要进一步实验确定,但是并不影响可视化,分类准确率也在90%以上。
狗分类
其实到这里很自然会有一个疑问:砍掉那么多层,准确率会不会降低?
答案是肯定的,但不会降低很多,可以通过微调来保持网络准确率。
下面是大家最关心的代码部分,我使用的基于TensorFlow的Keras,所以颜色通道在最后,使用其他框架的同学调一下就好,过段时间会放到Github仓库
def visualize_class_activation_map(model, img_path, target_class):
'''
参数:
model:模型
img_path:图片路径
target_class:目标类型
'''
origin_img = get_im_cv2([img_path], 224, 224, 3) # 这是一个自定义读取图片函数
class_weights = model.layers[-1].get_weights()[0] # 取最后一个softmax层的权重
final_conv_layer = model.layers[17] # 这是最后一个卷积层的索引
get_output = K.function([model.layers[0].input],[final_conv_layer.output, model.layers[-1].output])
[conv_outputs, predictions] = get_output([origin_img])
conv_outputs = conv_outputs[0, :, :, :]
cam = np.zeros(dtype=np.float32, shape=(14, 14))
for i, w in enumerate(class_weights[:, target_class]):
cam += conv_outputs[:, :, i] * w
cam = cv2.resize(cam, (224, 224))
cam = 100 * cam
plt.imshow(origin_img[0])
plt.imshow(cam, alpha=0.8, interpolation='nearest')
plt.show()
原文链接:https://www.jianshu.com/p/641a6fc97117
查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:
www.leadai.org
请关注人工智能LeadAI公众号,查看更多专业文章
大家都在看
LSTM模型在问答系统中的应用
基于TensorFlow的神经网络解决用户流失概览问题
最全常见算法工程师面试题目整理(一)
最全常见算法工程师面试题目整理(二)
TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络
装饰器 | Python高级编程
今天不如来复习下Python基础
卷积神经网络看见了什么相关推荐
- 卷积神经网络之卷积计算、作用与思想 深度学习
博客:blog.shinelee.me | 博客园 | CSDN 卷积运算与相关运算 在计算机视觉领域,卷积核.滤波器通常为较小尺寸的矩阵,比如3×33×3.从这个角度看,多层卷积是在进行逐层映射,整 ...
- 卷积神经网络通俗解读
转载自:https://blog.csdn.net/dong_lxkm/article/details/80575207 一.前言 最近一直在研究深度学习,联想起之前所学,感叹数学是一门朴素而神奇的科 ...
- NLP进阶之(七)膨胀卷积神经网络
NLP进阶之(七)膨胀卷积神经网络 1. Dilated Convolutions 膨胀卷积神经网络 1.2 动态理解 1.2.2 转置卷积动画 1.2.3 理解 2. Dilated Convolu ...
- 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)
卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习) 分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. A ...
- 3层-CNN卷积神经网络预测MNIST数字
3层-CNN卷积神经网络预测MNIST数字 本文创建一个简单的三层卷积网络来预测 MNIST 数字.这个深层网络由两个带有 ReLU 和 maxpool 的卷积层以及两个全连接层组成. MNIST 由 ...
- 卷积神经网络(CNN,ConvNet)
卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...
- 使用卷积神经网络的自动心电图诊断
使用卷积神经网络的自动心电图诊断 Automatic ECG Diagnosis Using Convolutional Neural Network https://www.mdpi.com/207 ...
- 情感分析:基于卷积神经网络
情感分析:基于卷积神经网络 Sentiment Analysis: Using Convolutional Neural Networks 探讨了如何用二维卷积神经网络来处理二维图像数据.在以往的语言 ...
- 卷积神经网络(CNN)原理
学习目标 目标 了解卷积神经网络的构成 记忆卷积的原理以及计算过程 了解池化的作用以及计算过程 应用 无 3.2.1 卷积神经网络的组成 定义 卷积神经网络由一个或多个卷积层.池化层以及全连接层等组成 ...
- 一维卷积filter_从零开始学Pytorch(七)之卷积神经网络
卷积神经网络基础 我们介绍卷积神经网络的卷积层和池化层,并解释填充.步幅.输入通道和输出通道的含义. import torch from torch.autograd import Variable ...
最新文章
- 云原生架构演进与企业上云
- mysql 的默认数据库mysql为什么在 workbench下看不到?
- python套接字socket的作用_【学习笔记】python实现的套接字socket
- UA SIE545 优化理论基础1 凸分析1 线性流形与超平面
- 南通大学python期末考试试卷答案_南通大学2015-2016年1学期《软工》作业点评总结...
- 最新html取消dynsrc属性无效,HTML属性标签2
- CDays–5 习题二(利用Python科学计算特性,使用常用计算符)及相关内容解析。...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-6.微信扫码登录回调本地域名映射工具Ngrock...
- List集合排序的两种方法
- Java从入门到放弃第1天
- 深度学习图像分割:U-Net 体系结构
- 4.1网络层功能概述
- python读取文件时的相对路径
- 最近写收缩标题栏遇到的一个问题 requestLayout() improperly called by android.support.design.widget.CollapsingToolba
- 机器学习必看书籍推荐
- Mongodb常用查询
- python xls 转化 xlsx
- ulipad 无法安装使用、无法调试、64位版本问题 ImportError: No module named comtypes 整体解决方案!
- 妈蛋,这玩意还真不得不会!
- 数据驱动决策:BI在零售业的数据化管理
热门文章
- java前沿技术_互联网百强企业架构师告诉你,Java应该这么学!云和数据超全面Java中级程序员学习路线图重磅发布!...
- matlab改变矩阵的元素,Matlab中元素不变情况下改变矩阵形态——reshape()
- php点击按钮跳转页面heeader,php - 通过FPDF生成后插入水印并打印PDF - SO中文参考 - www.soinside.com...
- LaTeX中添加\usepackage{subfigure}一直报错的解决办法,亲测
- Objective-C 之category
- linux需要你的不懈努力
- BigPipe 大的页面分割成一个一个管道
- Listview的OnScrollListener的滑动监听实现分页加载
- 对象调用方法方法及其call调用
- 程序员挑战高薪,你必须会的十大面试题《一》