使用Tensorflow实现可视化中间层和卷积层


Posted in Python onJanuary 24, 2020

为了查看网络训练的效果或者便于调参、更改结构等,我们常常将训练网络过程中的loss、accurcy等参数。

除此之外,有时我们也想要查看训练好的网络中间层输出和卷积核上面表达了什么内容,这可以帮助我们思考CNN的内在机制、调整网络结构或者把这些可视化内容贴在论文当中辅助说明训练的效果等。

中间层和卷积核的可视化有多种方法,整理如下:

1. 以矩阵(matrix)格式手动输出图像:

用简单的LeNet网络训练MNIST数据集作为示例:

x = tf.placeholder(tf.float32, [None, 784]) 

x_image = tf.reshape(x, [-1,28,28,1])    
W_conv1 = weight_variable([5, 5, 1, 32]) # 第一个卷积层的32个卷积核  
b_conv1 = bias_variable([32])  
# 第一个卷积层:  
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool(h_conv1)  # 第一个池化层

训练结束后,第一个卷积层共有32个5*5大小的卷积核:W_conv1,要可视化第10个卷积核:

from PIL import Image
import numpy as np
#from mnist_try001 import W_conv1

img1 = (W_conv1.eval()) # 将张量转换为numpy数组
W_conv1_10 = img1[:,:,:,9] 

W_conv1_10 = np.asmatrix(W_conv1_10) # 将数组转换为矩阵格式
W_conv1_10_visual = Image.fromarray(W_conv1_10 * 255.0 / W_conv1_10.max()) # 像素值归一化,Image.fromarray方法的输入范围是[0~255]
W_conv1_10_visual.show()

2. 通过反卷积方式输出中间层和卷积核图像:

import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data

x = tf.placeholder(tf.float32, [None, 784])
mnist = input_data.read_data_sets('/TensorflowCode/MNIST_data', one_hot=True)

h_conv2 = tf.nn.relu(tf.nn.conv2d(h_pool1, W_conv2, strides=[1, 1, 1, 1], padding='SAME') + b_conv2) #14*14*64
# 可视化第二层输出的图像
input_image = mnist.train.images[100] # 输入一幅指定图像,mnist.train.images[100]尺寸为[784,],即1维:[1,784]
conv2 = sess.run(h_conv2, feed_dict={x:input_image}) # [64, 14, 14 ,1] 若前面网络中加入了dropout,这里的feed_dict中不要忘记加上keep_prob: 0.5
conv2 = sess.run(tf.reshape(conv2 , [64, 1, 14, 14]))
conv2 = np.sum(conv2,axis = 0) # 对中间层图像各通道求和,作为输出图像
h_conv1 = np.asmatrix(h_conv1) # 将conv2数组转换成矩阵格式
h_conv1 = Image.fromarray(h_conv1 * 255.0 / h_conv1.max()) # 矩阵数值归一化
h_conv1.show() # 输出14*14的灰度图像

可视化卷积核和上面的方法完全一样,把h_conv2改成卷积核就可以了(如W_conv1_10),可以同是输出多个卷积核。

中间层图像如下:(已经完全看不出是数字了)

使用Tensorflow实现可视化中间层和卷积层

或者用 matplotlib.pyplot代替上面的Image方法,可以直接输出彩色图像:

# 输出第一层的32个卷积核(5×5*32)
import matplotlib.pyplot as plt

input_image = mnist.train.images[100]
W_conv1 = sess.run(W_conv1, feed_dict={x:input_image})   
W_conv1 = sess.run(tf.reshape(conv1_16, [32, 1, 5, 5]))
fig1,ax1 = plt.subplots(nrows=1, ncols=32, figsize = (32,1))
for i in range(32):
  ax1[i].imshow( W_conv1[i][0])           
plt.title('W_conv1 32×5×5')
plt.show()

以上这篇使用Tensorflow实现可视化中间层和卷积层就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
详解Python的Django框架中的中间件
Jul 24 Python
浅析Python中else语句块的使用技巧
Jun 16 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
Python定时任务sched模块用法示例
Jul 16 Python
python中的协程深入理解
Jun 10 Python
python项目对接钉钉SDK的实现
Jul 15 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
使用Python的turtle模块画国旗
Sep 24 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 #Python
keras获得某一层或者某层权重的输出实例
Jan 24 #Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 #Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 #Python
基于keras 模型、结构、权重保存的实现
Jan 24 #Python
Python 文件数据读写的具体实现
Jan 24 #Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 #Python
You might like
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
PHP系统命令函数使用分析
2013/07/05 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
动态添加js事件实现代码
2009/03/12 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python操作MySQL简单实现方法
2015/01/26 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
实习护理工作自我评价
2013/09/25 职场文书
剪彩仪式主持词
2014/03/19 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
小学语文教学随笔
2015/08/14 职场文书
Flask response响应的具体使用
2021/07/15 Python
Python学习之包与模块详解
2022/03/19 Python