keras 特征图可视化实例(中间层)


Posted in Python onJanuary 24, 2020

鉴于最近一段时间一直在折腾的CNN网络效果不太理想,主要目标是为了检测出图像中的一些关键点,可以参考人脸的关键点检测算法。

但是由于从数据集的制作是自己完成的,所以数据集质量可能有待商榷,训练效果不好的原因可能也是因为数据集没有制作好(标点实在是太累了)。

于是想看看自己做的数据集在进入到网络后那些中间的隐藏层到底发生了哪些变化。

今天主要是用已经训练好的mnist模型来提前测试一下,这里的mnist模型的准确度已经达到了98%左右。

使用的比较简单的一个模型:

def simple_cnn():
 input_data = Input(shape=(28, 28, 1))
 x = Conv2D(64, kernel_size=3, padding='same', activation='relu', name='conv1')(input_data)
 x = MaxPooling2D(pool_size=2, strides=2, name='maxpool1')(x)
 x = Conv2D(32, kernel_size=3, padding='same', activation='relu', name='conv2')(x)
 x = MaxPooling2D(pool_size=2, strides=2, name='maxpool2')(x)
 x = Dropout(0.25)(x)
 # 获得最后一层卷积层的输出
 # 添加自己的全连接
 x = Flatten(name='flatten')(x)
 x = Dense(128, activation='relu', name='fc1')(x)
 x = Dropout(0.25)(x)
 x = Dense(10, activation='softmax', name='fc2')(x)
 model = Model(inputs=input_data, outputs=x)

此模型已经训练好了,跑了10个epoch,验证集0.33

keras 特征图可视化实例(中间层)

这里的效果还是很好的,┓( ´∀` )┏

下面在网上搞了张手写数字

keras 特征图可视化实例(中间层)

使用网络进行预测,这里就先给出如何可视化第一层的卷积层的输出吧,哇哈哈

代码:

input_data = Input(shape=(28, 28, 1))
 x = Conv2D(64, kernel_size=3, padding='same', activation='relu', name='conv1')(input_data)
 x = MaxPooling2D(pool_size=2, strides=2, name='maxpool1')(x)
 x = Conv2D(32, kernel_size=3, padding='same', activation='relu', name='conv2')(x)
 x = MaxPooling2D(pool_size=2, strides=2, name='maxpool2')(x)
 x = Dropout(0.25)(x)
 x = Flatten(name='flatten')(x)
 x = Dense(128, activation='relu', name='fc1')(x)
 x = Dropout(0.25)(x)
 x = Dense(10, activation='softmax', name='fc2')(x)
 model = Model(inputs=input_data, outputs=x)
 
 model.load_weights('final_model_mnist_2019_1_28.h5')
 
 raw_img = cv2.imread('test.png')
 test_img = load_img('test.png', color_mode='grayscale', target_size=(28, 28))
 test_img = np.array(test_img)
 test_img = np.expand_dims(test_img, axis=0)
 test_img = np.expand_dims(test_img, axis=3)
 
 conv1_layer = Model(inputs=input_data, outputs=model.get_layer(index=1).output)
 
 conv1_output = conv1_layer.predict(test_img)
 
 for i in range(64):
  show_img = conv1_output[:, :, :, i]
  print(show_img.shape)
  show_img.shape = [28,28]
  cv2.imshow('img', show_img)
  cv2.waitKey(0)

核心方法就是通过加载模型后,新建Model,将输出部分换为你想要查看的网络层数即可,当然get_layer()包括了name和index两个参数。最后通过遍历当前卷积层的所有特征映射,将每一个都展示出来。就可以了。

keras 特征图可视化实例(中间层)

以上这篇keras 特征图可视化实例(中间层)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python调用cmd复制文件代码分享
Dec 27 Python
一些Python中的二维数组的操作方法
May 02 Python
python文件操作相关知识点总结整理
Feb 22 Python
浅谈Python的垃圾回收机制
Dec 17 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
和孩子一起学习python之变量命名规则
May 27 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
Python GUI布局尺寸适配方法
Oct 11 Python
Python对列表的操作知识点详解
Aug 20 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
jupyter lab文件导出/下载方式
Apr 22 Python
基于keras输出中间层结果的2种实现方式
Jan 24 #Python
tensorflow 保存模型和取出中间权重例子
Jan 24 #Python
tensorflow 模型权重导出实例
Jan 24 #Python
在Tensorflow中查看权重的实现
Jan 24 #Python
tensorflow求导和梯度计算实例
Jan 23 #Python
Tensorflow的梯度异步更新示例
Jan 23 #Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 #Python
You might like
用PHP实现WEB动态网页静态
2006/10/09 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
jquery获取input表单值的代码
2010/04/19 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
django 修改server端口号的方法
2018/05/14 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python设置随机种子实例讲解
2019/09/12 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
创业计划书撰写原则
2014/01/25 职场文书
市场部管理制度
2014/02/02 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
借款协议书范本
2014/04/22 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
大学生毕业评语
2014/12/31 职场文书
golang中字符串MD5生成方式总结
2021/07/04 Golang
Elasticsearch 批量操作
2022/04/19 Python