点上方蓝字计算机视觉联盟获取更多干货

在右上方 ··· 设为星标 ★,与你不见不散

仅作学术分享,不代表本公众号立场,侵权联系删除

转载于:量子位

AI博士笔记系列推荐

周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接

做计算机视觉,离不开CNN。

可是,卷积、池化、Softmax……究竟长啥样,是怎样相互连接在一起的?

对着代码凭空想象,多少让人有点头皮微凉。于是,有人干脆用Unity给它完整3D可视化了出来。

还不光是有个架子,训练过程也都呈现得明明白白。

比如随着epoch(迭代次数)的变化,训练过程中各层出现的实时变化。

为了能更清楚地展示网络细节,用户还可以在其中自由地折叠、扩展每个层。

比如将特征图在线性布局和网格布局之间转换。

折叠卷积层的特征图输出。

对全连接层进行边绑定(edge bunding)等等。

这样的可视化图像,可以通过加载TensorFlow的检查点来构建。

也可以在Unity编辑器中设计。

是不是有点鹅妹子嘤那感觉了?

最近,这个项目又在社交媒体上火了起来。

网友们纷纷表示:

“要是能在训练的时候看到这个过程,再长时间我也能忍啊。”

“求开源。”

该项目的作者,是一位来自维也纳的3D特效师。

据他介绍,之所以创建这样一个CNN可视化工具,是因为他自己初学神经网络时,经常觉得很难理解卷积层之间是如何相互连接,又如何与不同类型的层连接的。

而该工具的主要功能包括,卷积、最大池化和完全连接层的可视化表示,以及各种能实现更清晰可视化的简化机制等等。

总而言之,就是想让初学者通过最直观的方式,来get到CNN的重点。

如何用Unity搞出一个3D网络

在正式上手Unity前,作者先在Houdini软件中,搭建了一个可视化的3D网络原型。

也就是说,先给Unity版3D网络提供一个搭建思路,提前准备好实现展示卷积计算的方法、特征图的形状、边绑定的效果等问题。

它的节点编辑器长这样:

然后,就可以在Unity上搭建3D神经网络了。

首先,需要预设好神经网络的“形状”。

由于之前并没有用过Unity,作者先学习了着色器和过程式几何相关的知识。

这里面,作者发现了一些局限性,他采用的是Unity为着色器开发的语言Shaderlab,这个语言无法使用着色变化,只有对语义进行预定义的变量,才能让它在顶点、几何和像素着色器之间传递。

而且,它无法任意分配顶点属性,只有位置、颜色、UV等预定义属性。(可能这也是3D网络无法实时改变颜色的原因之一)

在研究了一些实例化(instancing)相关的概念后,作者计划采用几何着色器的方法生成神经网络的连线。其中起点和终点被传递到顶点着色器,并直接转发到几何着色器。

这些线,最多可以由120个顶点组成,因为Unity允许的几何着色器能创建的变量的标量浮点数为1024。

设计后的网络形状,大致长这样:

然后,就是从模型的TensorFlow代码中,生成对应的3D神经网络图像。

其中,Tensorflow-native.ckpt格式的文件,需要存储重构模型图所需的数据、二进制的权重读取和激活值,以及特定层的名字。

以Cifar10-greyscale数据集为例,需要编写一个检查点(checkpoint)文件,以及设置随即初始化的权重。

在那之后,需要加载这些检查点文件、启动TensorFlow会话,输入训练示例,以便查询每一层的激活函数。

然后编写一个json文件,存储每一层的形状、名称、权重和激活函数,便于读取。然后使用权重值,将颜色数据分配给各层的Unity Mesh。

最终搞出来的效果,还是不错的:

作者还录了个开发视频,在文末可以找到地址。

相关研究还不少

事实上,此前已经有不少学者,进行过神经网络可视化的研究。

例如,去年5月,一位中国博士就可视化了卷积神经网络,将每一层的变化都展示得非常清楚,只需要点击对应的神经元,就能看见它的“操作”。

这是用TensorFlow.js加载的一个10层预训练模型,相当于在浏览器上就能跑CNN模型,也可以实时交互,显示神经元的变化。

不过,这还是个2D的项目。

目前,也已经有人像上面那个神经网络模型一样,做出了3D的可视化神经网络:

这个项目,同样用到了边绑定、光线追踪等技术,与特征提取、微调和归一化相结合,将神经网络可视化。

这项项目希望能借由这些技术,来估计神经网络中不同部分的重要性。

为此,作者将神经网络的每一部分都用不同的颜色来表示,根据节点和节点在网络中的重要性,来预测它们之间的关联性。

大致的处理过程是这样的:

如果对于这类3D神经网络可视化感兴趣,可以在文末找到对应的开源项目地址。

作者介绍

Stefan Sietzen,现居维也纳,此前曾是个3D视觉方向的自由职业者。

目前,他在维也纳工业大学读硕,对视觉计算(visual computing)非常感兴趣,这个3D神经网络,就是他在硕士期间做的项目之一。

开发过程:
https://vimeo.com/stefsietz

已开源的3D神经网络项目:
https://github.com/julrog/nn_vis

参考链接:
https://www.reddit.com/r/MachineLearning/comments/leq2kf/d_convolution_neural_network_visualization_made/
https://mp.weixin.qq.com/s/tmx59J75wuRii4RuOT8TTg
https://vimeo.com/stefsietz
http://portfolio.stefansietzen.at/
http://visuality.at/vis2/detail.html

end

我是王博Kings,一名985AI博士,在Github上开源了机器学习、深度学习等一系列手推笔记,获得了不少同学的支持。

这是我的私人微信,还有少量坑位,可与相关学者研究人员交流学习 

目前开设有人工智能、机器学习、计算机视觉、自动驾驶(含SLAM)、Python、求职面经、综合交流群扫描添加CV联盟微信拉你进群,备注:CV联盟

王博Kings 的公众号,欢迎关注,干货多多

王博Kings的系列手推笔记(附高清PDF下载)

博士笔记 | 周志华《机器学习》手推笔记第一章思维导图

博士笔记 | 周志华《机器学习》手推笔记第二章“模型评估与选择”

博士笔记 | 周志华《机器学习》手推笔记第三章“线性模型”

博士笔记 | 周志华《机器学习》手推笔记第四章“决策树”

博士笔记 | 周志华《机器学习》手推笔记第五章“神经网络”

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(上)

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(下)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(上)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(下)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(上)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(下)

博士笔记 | 周志华《机器学习》手推笔记第九章聚类

博士笔记 | 周志华《机器学习》手推笔记第十章降维与度量学习

博士笔记 | 周志华《机器学习》手推笔记第十一章特征选择与稀疏学习

博士笔记 | 周志华《机器学习》手推笔记第十二章计算学习理论(上)

博士笔记 | 周志华《机器学习》手推笔记第十二章计算学习理论(下)

博士笔记 | 周志华《机器学习》手推笔记第十三章半监督学习

博士笔记 | 周志华《机器学习》手推笔记第十四章概率图模型

点个在看支持一下吧

卷积神经网络CNN如何训练?相关推荐

  1. python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  2. 基于FPGA的一维卷积神经网络CNN的实现(三)训练网络搭建及参数导出(附代码)

    训练网络搭建 环境:Pytorch,Pycham,Matlab. 说明:该网络反向传播是通过软件方式生成,FPGA内部不进行反向传播计算. 该节通过Python获取训练数据集,并通过Pytorch框架 ...

  3. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  4. 卷积神经网络(CNN)的简单实现(MNIST)

    卷积神经网络(CNN)的基础介绍见http://blog.csdn.net/fengbingchun/article/details/50529500,这里主要以代码实现为主. CNN是一个多层的神经 ...

  5. 卷积神经网络(CNN)实现CIFAR100类别分类

    卷积神经网络(CNN)实现CIFAR100类别分类 1. CIFAR100数据集介绍 这个数据集就像CIFAR-10,除了它有100个类,每个类包含600个图像.,每类各有500个训练图像和100个测 ...

  6. 卷积神经网络(CNN)简介

    卷积神经网络(CNN)简介 多层的线性网络和单层的线性网络没有区别,而且线性模型的能够解决的问题也是有限的 1. 更复杂抽象的数据 一个单隐含层有更多的神经元,就能捕捉更多的特征.而且有更多隐层,意味 ...

  7. 论文解析:人脸检测中级联卷积神经网络的联合训练

    论文解析:人脸检测中级联卷积神经网络的联合训练 商汤科技解析CVPR2016论文:人脸检测中级联卷积神经网络的联合训练 width="250" height="250&q ...

  8. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP

    原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron  python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...

  9. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

最新文章

  1. 从2D到3D 开发者讲述“街霸V”的美术秘笈
  2. ERP customizing extraction - how extraction function module is determined
  3. codeforces gym-101741 Elevator 动态规划、单调队列
  4. 面向对象之反射、包装、(定制)
  5. 当使用easyui时,表单的onchange事件失效
  6. linq与数据库之添加
  7. python灰产_Python进行目录的对比
  8. 学了java然后深入_JAVA8学习——从源码角度深入Stream流(学习过程)
  9. Atitit.常见的异常分类 目录 1. 双元分类法 1 1.1. 按照语言分 java js c# php等 1 1.2. 通用常见异常vs 特定异常 1 1.3. Runtime ex vs c
  10. 2014手机号码归属地数据库
  11. RGB格式图片转YUV图片
  12. SpringBoot在使用测试的时候是否需要@RunWith?
  13. 贵有恒,何必三更起五更睡;最无益,只怕一日曝十日寒。
  14. Floating-Point overflow and underflow
  15. Metrics-server
  16. 【微信开发】---- 公众号支付
  17. 闲鱼无货源赚钱的核心玩法?
  18. Android问题:java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法
  19. 一行代码实现音频变速不变调
  20. Linux内核Thermal框架详解十一、Thermal Governor(1)

热门文章

  1. java图片转换为数据流_OpenCV 读取数据流图片
  2. jsp 定义java类_在JSP中定义一个类
  3. ubuntu 14.04 apache php mysql_Ubuntu 14.04 升级PHP 和 Apache
  4. java符号引用 直接引用_java虚拟机的符号引用和直接引用
  5. 属性定义为 not null unique_Spring Data with MySQL (实体定义)
  6. 感恩工作平台心得体会_珍惜工作,感恩企业,从而追求更美好的人生
  7. 将iso镜像包设置成yum源_Centos7 Nginx搭建局域网yum仓库详细步骤,转发
  8. Ubuntu修改默认源为国内
  9. 计算机组成800H是多大,73计算机组成原理模拟题三(2019年)更新北理工20春答案...
  10. linux系统怎么安装cas,CAS 在Linux中安装与配置