使用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使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
Python正则表达式如何进行字符串替换实例
Dec 28 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
python使用requests模块实现爬取电影天堂最新电影信息
Apr 03 Python
python解析xml简单示例
Jun 21 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
Python+Redis实现布隆过滤器
Dec 08 Python
Django中FilePathField字段的用法
May 21 Python
深入理解python多线程编程
Apr 18 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
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
判断控件是否已加载完成的代码
2010/02/24 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
详解Python中的静态方法与类成员方法
2017/02/28 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
八年级语文教学反思
2014/02/11 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
民事答辩状格式范文
2015/05/21 职场文书
初中生活随笔
2015/08/15 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
小学英语课教学反思
2016/02/15 职场文书
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Python内置数据结构列表与元组示例详解
2021/08/04 Python
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers