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将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
使用Python制作获取网站目录的图形化程序
May 04 Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
详解用python计算阶乘的几种方法
Aug 14 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Tensorflow累加的实现案例
Feb 05 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
Python如何将字符串转换为日期
Jul 31 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
mysq GBKl乱码
2006/11/28 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
关于php中一些字符串总结
2016/05/05 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
python删除文件示例分享
2014/01/28 Python
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
Python调用.NET库的方法步骤
2019/12/27 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
美国玩具公司:U.S.Toy
2018/05/19 全球购物
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
大学生学业生涯规划
2014/01/05 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
活动总结新闻稿
2014/08/30 职场文书
Android Studio 计算器开发
2022/05/20 Java/Android
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS