使用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利用hook技术破解https的实例代码
Mar 25 Python
Python学习小技巧总结
Jun 10 Python
对Python 语音识别框架详解
Dec 24 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
python重试装饰器的简单实现方法
Jan 31 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
Mar 24 Python
Python运行提示缺少模块问题解决方案
Apr 02 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
python二维图制作的实例代码
Dec 03 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
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
初识Node.js
2014/09/03 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
python unittest实现api自动化测试
2018/04/04 Python
详解Python如何生成词云的方法
2018/06/01 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
python 正确保留多位小数的实例
2018/07/16 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
python实现中文文本分句的例子
2019/07/15 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
Linux操作面试题
2015/02/11 面试题
质检员岗位职责
2013/12/17 职场文书
市场部规章制度
2014/01/24 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
租赁意向书范本
2014/04/01 职场文书
公司担保书范文
2014/05/21 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers