使用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基于twisted实现简单的web服务器
Sep 29 Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
Python实现识别手写数字 简易图片存储管理系统
Jan 29 Python
python+pyqt5实现24点小游戏
Jan 24 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
Python 过滤错误log并导出的实例
Dec 26 Python
flask框架蓝图和子域名配置详解
Jan 25 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
Apr 28 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数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
JS原型对象通俗"唱法"
2012/12/27 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
2020/09/28 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
浙大毕业生自荐信
2014/01/26 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
纪检监察立案决定书
2015/06/24 职场文书
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
Python获取字典中某个key的value
2022/04/13 Python