专栏名称: Python程序员
最专业的Python社区,有每日推送,免费电子书,真人辅导,资源下载,各类工具。我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动
目录
相关文章推荐
Python爱好者社区  ·  多模态,杀疯了 ·  22 小时前  
Python开发者  ·  o3-mini 碾压 DeepSeek ... ·  4 天前  
Python爱好者社区  ·  推荐我的抖音变现俱乐部! ·  3 天前  
Python爱好者社区  ·  120道Python面试题.pdf ... ·  6 天前  
Python爱好者社区  ·  吴恩达,yyds ·  5 天前  
51好读  ›  专栏  ›  Python程序员

近距离图解「CNN」训练,美的不行了!

Python程序员  · 公众号  · Python  · 2021-02-11 08:10

正文





量子位 报道 | 公众号 QbitAI


卷积、池化、Softmax……究竟长啥样,是怎样相互连接在一起的? 于是,有人干脆用Unity给它完整3D可视化了出来。

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

为了能更清楚地展示网络细节,用户还可以在其中自由地折叠、扩展每个层。 比如将特征图在线性布局和网格布局之间转换。

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

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

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

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

该项目的作者,是一位来自维也纳的3D特效师。 之所以创建这样一个CNN可视化工具,是因为他自己初学神经网络时,经常觉得很难理解卷积层之间是如何相互连接,又如何与不同类型的层连接的。 而该工具的主要功能包括,卷积、最大池化和完全连接层的可视化表示,以及各种能实现更清晰可视化的简化机制等等。

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

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

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

它的节点编辑器长这样:

首先,需要预设好神经网络的“形状”。 由于之前 并没有用过Unity,作者先学习了着色器和过程式几何相关的知识。 这里面,作者发现了一些局限性,他采用的是Unity为着色器开发的语言Shaderlab,这个语言无法使用着色变化,只有对语义进行预定义的变量,才能让它在顶点、几何和像素着色器之间传递。

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

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

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

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

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







请到「今天看啥」查看全文