使用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实现堆排序的方法详解
May 03 Python
python函数的5种参数详解
Feb 24 Python
Sublime开发python程序的示例代码
Jan 24 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
Aug 17 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
python实现身份证实名认证的方法实例
Nov 08 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
查看已安装tensorflow版本的方法示例
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
php 启动时报错的简单解决方法
2014/01/27 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
js实现图片实时时钟
2020/01/15 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
python unichr函数知识点总结
2020/12/16 Python
python实现马丁策略的实例详解
2021/01/15 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
西部世纪面试题
2014/12/05 面试题
银行求职信范文
2014/05/26 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
高考学习决心书
2015/02/04 职场文书
项目投资意向书范本
2015/05/09 职场文书
举起手来观后感
2015/06/09 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers