关于ide:一位外国小哥把整个-CNN-都给可视化了卷积池化清清楚楚网友美得不真实

5次阅读

共计 2282 个字符,预计需要花费 6 分钟才能阅读完成。

转自:量子位 

  做计算机视觉,离不开 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/Mach…\_convolution\_neural\_network\_visualization\_made/
https://mp.weixin.qq.com/s/tm…
https://vimeo.com/stefsietz
http://portfolio.stefansietze…
http://visuality.at/vis2/deta…\

开源前哨 日常分享热门、乏味和实用的开源我的项目。参加保护 10 万 + Star 的开源技术资源库,包含:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。

正文完
 0