使用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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 Python
在Python中实现贪婪排名算法的教程
Apr 17 Python
python去除所有html标签的方法
May 05 Python
wxPython中listbox用法实例详解
Jun 01 Python
Python之列表的插入&替换修改方法
Jun 28 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
Sep 06 Python
Python设计密码强度校验程序
Jul 30 Python
python Yaml、Json、Dict之间的转化
Oct 19 Python
Python 数据分析之逐块读取文本的实现
Dec 14 Python
python中mongodb包操作数据库
Apr 19 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
Symfony查询方法实例小结
2017/06/28 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
python如何实时获取tcpdump输出
2020/09/16 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
专科应届生求职信
2013/11/24 职场文书
管道维修工岗位职责
2013/12/27 职场文书
会计工作心得体会
2014/01/13 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
借款协议书
2014/09/16 职场文书
红白喜事主持词
2015/07/06 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python