使用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 相关文章推荐
几种实用的pythonic语法实例代码
Feb 24 Python
python基础教程项目四之新闻聚合
Apr 02 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
完美解决Python 2.7不能正常使用pip install的问题
Jun 12 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
python将图片转base64,实现前端显示
Jan 09 Python
tensorflow之并行读入数据详解
Feb 05 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 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目录导航文件代码
2006/10/09 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
javascript实现Table排序的方法
2015/05/15 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
毕业生找工作的求职信范文
2013/12/24 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
幼儿园小班评语
2014/04/18 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
2014国庆节标语口号
2014/09/19 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
总经理司机岗位职责
2015/04/10 职场文书
2015年工程部工作总结
2015/04/30 职场文书
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android