可视化技术总结

关键字 :Visualizing intermediate convnet outputs ,Deep Visulization Tools


lizhen
星期四, 06. 九月 2018 03:25下午 修改
---

卷积神经网络的可视化方法可以分为两种方式:

  1. 保存训练后的权重等个训练参数的value以后,** 即借助绘图工具可视化**,
  2. 借助深度学习的可视化的工具也能实现可视化. 比如tensorflow下面的tensorBorad; PyTorch下面的tensorBoradX, Matlab的Deep Visulization Toolbox, 借助绘图工具可视化

1. 借助绘图工具可视化

这个论坛的帖子一定要看
这篇帖子给出了绘制图片的方法,写的很不错,还是有很多地方还需要修改,比如: 保存数据的save()方法有待修改, 图片的显示过程应该是在训练完毕之后,对模型恢复的时候进行的,而不应该把训练代码和可视化代码放在一起等等.
tensorflow的计算过程都是以tensor的形式输出的, 需要想本法从tensor转换成np.ndarray类型, 然后再使用 openCV,pandas,matplotlib等绘图工具库来绘制图像.

将tensor-->np.ndarray只需调用sess.run(tensor)即可;
接下来是使用绘图工具绘制图片了,
plt提供了对矩阵的绘制绘制方法: plt.matshow()函数, 该函数可以可以将numpy的矩阵作为输入参数,并绘制出来. 简而言之. 就是可以把训练以后的tensor以图片的方式显示出来.

1.1 如何可视化特征图?

假如,以nmnist的数据为例;输入的tensor的大小是(1,28,28,64); 这属于tensorflow的基本输入格式(numbers, height,width,channels)

卷积以后会有64张特征图,大小是28*28;
第一张图片的特征图应该为:[0,:,:,1], 第二张特征图是[0,:,:,2],以此类推

每张特征图的显示方式如下:

print ("Size of 'conv2' is %s" % (conv2.shape,))
# 输出结果为:Size of 'conv2' is (1, 28, 28, 64)# 绘制每张特征图,迭代64次
for i in range(64):plt.matshow(conv2[0, :, :, i], cmap=plt.get_cmap('gray'))plt.title(str(i) + "th conv2") # 添加标题plt.colorbar() # 添加条码框plt.show() # 显示图片plt.save('路径') # 保存图片

1.2 如何可视化 kernel?

卷积核在很多深度学习框架中通常也是以tensor的形式存在,所以在显示的方式上并没有太大的区别;
对tensorflow来说, 获取权重值还需要通过上下文的session.run方法才能获得

# 可视化 weights
wc1 = sess.run(weights['wc1']) #
print ("Size of 'wc1' is %s" % (wc1.shape,))
# 绘制
for i in range(3):plt.matshow(wc1[:, :, 0, i], cmap=plt.get_cmap('gray'))plt.title(str(i) + "th conv filter")plt.colorbar()plt.show() 

2. 借助深度学习工具

A. Tensorflow

TensorFlow中的可视化方法是通过tensorBoard、tf.summary和tf.summary.FileWriter这三个模块相互合作来完成的。
tf.summary中提供了在训练过程中记录每次训练数据的函数,
tf.summary.FileWriter可以把所有tf.summary的记录保存到本地
tensorBoard 用来渲染记录数据,并用浏览器的方式查看图片

可以根据tensorflow 的官网文档写出来,再次不赘述, tensorflow也有详细的官方文档,见索引[11] TensorBoard: Visualizing Learning

借助tensorflow的可视化工具实现可视化,可以分为以下5步:

  1. 声明数据的变量,
  2. 使用tf.summary()记录变量
  3. 使用 tf.summary.merge_all()合并所有的图
  4. 使用tf.summary.FileWriter保存数据
  5. tensorBoard浏览记录

step 1. 指定绘制的变量名称:

指定变量名称的方式有两种:

(1) 使用tf.variable_scope()指定名称

(2) 在创建name变量的时候,传入name参数
具体使用方式如下:

(1) 使用tf.variable_scope()指定名称的方式:

with tf.variable_scope('conv1') as scope:# 变量的声明代码

(2) 在创建name变量的时候,传入name参数的方式:
在tensorflow中,可以为每一个操作和tensor设置名称

var = tf.get_variable(name, shape, initializer=initializer)
weight_decay = tf.multiply(x=tf.nn.l2_loss(var), y=wd, name='weight_loss')

Step 2. 记录变量:

为变量起名字以后, tensorflow会默认记录weight/biases的每次变化, 并在后期绘制成曲线图.;除此以外如果需要记录其他参数的变化, tf.summary.提供了histogram(), scalar(),image()用来记录变量

tf.summary.scalar()

tf.summary.scalar() 主要用于描绘画loss曲线和accuary曲线时会用到.
函数说明:
scalar(name, tensor, collections=None, family=None)
name: 给节点起名字, 所起的名字会作为图片的名称
tensor: 要记录的变量
使用方法:
python tf.summary.scalar('stddev/'+name,stddev)
效果图:

tf.summary.histogram

一般是用来显示训练过程中变量的分布情况
histogram(name, values, collections=None, family=None)
函数说明:
name: 给节点起名字, 所起的名字会作为图片的名称
tensor: 要记录的变量
使用方法:

tf.summary.histogram(var.op.name + '/gradients', grad)
tf.summary.histogram(tensor_name + '/activations', x)

效果图:

tf.summary.image

一般是对矩阵可视化, 可以可视化特征图和权重. 将【计算图】中的【图像数据】写入TensorFlow中的【日志文件】,以便为将来tensorboard的可视化做准备
tf.summary.image(name,tensor, max_outputs=3, collections=None, family=None) :
函数说明:
tensor的格式应该是[batch_size, height, width, channels],并且数据类型必须为uint8,即所有的像素值在0~255
此方法不仅可以绘制图像, 还可以绘制权重和特征图
使用方法:

101 tf.summary.image('images',images)
....
172     for i in range(64):
173         tf.summary.image('conv1-feature',tf.slice(conv1,[0,0,0,i],[-1,-1,-1,1]))
174         tf.summary.image('conv-kernal',tf.slice(kernel,[0,0,0,i],[-1,-1,-1,1]))

效果图:

step 4. 记录像数据

注意, 在sess.run()之前, 以上的操作仅仅是定义 . 并没执行.
在执行之前, 需要把所有的图合并在一起, 调用tf.summary.merge_all()可以实现.
再次注意, 这里需要在每次训练迭代的时候,通过sess.run()的方式调用.每调用一次,会把当前的数据记录下来.

summary_op = tf.summary.merge_all()for i in range(epochs):xxxxxxsess.run(summary_op)

step 5. 保存数据

这一步最为关键, 关系到数据是否能够记录并且保存下来

 summary_writer = tf.summary.FileWriter(FLAGS.train_dir,graph_def=sess.graph_def)...# 在训练过程中调用:
for step in xrange(FLAGS.max_steps):.... if step % 100 == 0:summary_str = sess.run(summary_op) # 记录数据summary_writer.add_summary(summary_str, step) # 保存绘图数据# Save the model checkpoint periodically.if step % 1000 == 0 or (step + 1) == FLAGS.max_steps: #保存训练数据checkpoint_path = os.path.join(FLAGS.train_dir, 'model.ckpt')saver.save(sess, checkpoint_path, global_step=step) # saver....

Step6. tensorborad渲染

待模型训练结束,可以通过tensorborad --logdir '<保存的路径>'就可以查看可视化后的数据. 更多呢详细参数通过 tensorborad --lhelp可以获得.

B keras

How convolutional neural networks see the world

问题集合
RuntimeError: Invalid DISPLAY variable

3参考文献

[1] tensorflowtutorials卷积神经网络可视化
[2] 卷积神经网络实战(可视化部分)——使用keras识别猫咪 (英文部分)
[3] 用TensorFlow可视化卷积层的方法
[4] Visualizing parts of Convolutional Neural Networks using Keras and Cats
[5] Visualizing CNN filters with keras
[6] Keras: visualizing the output of an intermediate layer
[7] pytorch-cnn-visualizations
[8] Deep Visualization:可视化并理解CNN
[9] Visualizing and Understanding Convolutional Networks
[10][Matplotlib imshow/matshow display values on plot](https://stackoverflow.com/questions/21712047/matplotlib-imshow-matshow-display-values-on-plot)
[11] TensorBoard: Visualizing Learning
[12] 【Tensorflow_DL_Note17】TensorFlow可视化学习4_tf.summary模块的详解
[13] 一个大牛的博客
接下来的安排:
借助深度学习工具重写梯度下降
Guided Back-propagation in TensorFlow

星期五, 10. 八月 2018 03:19下午

转载于:https://www.cnblogs.com/greentomlee/p/9599277.html

深度学习模型的可视化技术总结相关推荐

  1. 深度学习可解释性-可视化技术

    参考资料:https://www.zhihu.com/search?type=content&q=SmoothGrad CAM CAM是什么? CAM全称Class Activation Ma ...

  2. 【滴滴专场】深度学习模型优化技术揭秘

    滴滴拥有海量数据以及 AI 推理需求,GPU 在人脸识别.自动驾驶.地图导航等场景大量使用,滴滴云IFX团队针对斯坦福 DAWNBench 榜单的 ImageNet 模型也进行了深入优化,在 NVID ...

  3. 实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型

    翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCognition.ai 的创始人. Deep Cognition (深度认知) 建立的深度学习工作室,为很多准备部署深度学习框 ...

  4. 实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 109 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCogn

    实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 标签: 109 编辑 删除 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 ...

  5. 深度学习模型压缩技术概览

    背景介绍 目录 背景介绍 什么是模型压缩? 剪枝 非结构化剪枝 结构化剪枝 量化 低秩近似(Low-rank approximation) 知识蒸馏(Knowledge distillation) 神 ...

  6. 可视化深度学习模型的训练误差和验证误差

    可视化深度学习模型的训练误差和验证误差 #导入基础包和库 # Load libraries import numpy as np from keras.datasets import imdb fro ...

  7. 【深度学习】Tensorboard可视化模型训练过程和Colab使用

    [深度学习]Tensorboard可视化模型训练过程和Colab使用 文章目录 1 概述 2 手撸代码实现 3 Colab使用3.1 详细步骤3.2 Demo 4 总结 1 概述 在利用TensorF ...

  8. 深度学习模型部署技术方案

    深度学习模型部署技术方案 训练好的深度学习模型如何进行部署的相关技术方案 1 什么是模型部署? 2 数据科学项目整个开发流程 3 使用flask 将 Keras深度学习模型部署为Web应用程序 4 T ...

  9. 深度学习模型压缩与加速技术(三):低秩分解

    目录 总结 低秩分解 定义 特点 1.二元分解 2.多元分解 参考文献 深度学习模型的压缩和加速是指利用神经网络参数的冗余性和网络结构的冗余性精简模型,在不影响任务完成度的情况下,得到参数量更少.结构 ...

  10. 深度学习模型压缩与加速技术(二):参数量化

    目录 总结 参数量化 参数量化定义 参数量化特点 1.二值化 二值化权重 二值化权重与激活函数 2.三值化 3.聚类量化 4.混合位宽 手工固定 自主确定 训练技巧 参考文献 深度学习模型的压缩和加速 ...

最新文章

  1. 为给微芯片拍照,IBM小哥用乐高拼了个电动显微镜,搭载树莓派,360度无死角拍摄...
  2. Little Sub and Sequence
  3. latch.await java有什么作用_java相关:CountDownLatch源码解析之await()
  4. (42) Aeroo 模板实战
  5. 黑科技抢先尝(续) - Windows terminal中WSL Linux 终端的极简美化指南
  6. android关机位置定位,Android5.0关机充电动画位置
  7. Can’t Activate Reporting Services Service in SharePoint
  8. 【Hbase】HBase界面简介
  9. Gradient Descent(机器学习之梯度下降法)
  10. 钱包系列教程七】玩转 EOS 命令行钱包
  11. TortoiseSvn和Subclipse对应关系
  12. 硬件原理图 一键开关机电路
  13. Android游戏开发---碰撞检测
  14. CATIA达索三维建模软件的功能和核心技术是什么?
  15. MySql查询当前版本
  16. RK3568 Android11从入门到实战项目专栏目录及介绍
  17. puts()和gets()
  18. SAP 各大常用模块汇总介绍(一)
  19. 智慧海派跟鸿蒙系统,上海百余家文旅场馆点亮“海派夜经济”
  20. centos8代理上网_centos设置代理上网

热门文章

  1. 运动目标跟踪(十九)--TLD
  2. 光流(六)--L2范数Horn–Schunck 光流法及应用demo
  3. MCU——简易单片机按键驱动程序分析
  4. Hive 复杂数据类型之map
  5. Hbase table CRUD操作及scala编程
  6. SparkSQL统一数据的加载与落地
  7. 通过给目标函数增加一个正则项来防止其过拟合
  8. 搭建Discuz论坛的两种方式
  9. 小试牛刀之Kolla单节点部署
  10. linux 基础练习题、面试题(二)