使用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实现封装得到virustotal扫描结果
Oct 05 Python
Python contextlib模块使用示例
Feb 18 Python
Python中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
浅析Python中signal包的使用
Nov 13 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
详解Python3 pickle模块用法
Sep 16 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
Django中的DateTimeField和DateField实现
Feb 24 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操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
Python实现单词翻译功能
2017/06/06 Python
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
思想政治自我鉴定
2013/10/06 职场文书
护理专业应届毕业生推荐信
2013/11/15 职场文书
饭店工作计划书
2014/01/10 职场文书
学生手册家长评语
2014/02/10 职场文书
就业协议书怎么填
2014/04/11 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
2014小学年度工作总结
2014/12/20 职场文书
捐款感谢信
2015/01/20 职场文书
离婚案件被告代理词
2015/05/23 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
Python开发五子棋小游戏
2022/05/02 Python