卷积神经网络CNN如何训练?
点上方蓝字计算机视觉联盟获取更多干货
在右上方 ··· 设为星标 ★,与你不见不散
仅作学术分享,不代表本公众号立场,侵权联系删除
转载于:量子位
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如何训练?相关推荐
- python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 基于FPGA的一维卷积神经网络CNN的实现(三)训练网络搭建及参数导出(附代码)
训练网络搭建 环境:Pytorch,Pycham,Matlab. 说明:该网络反向传播是通过软件方式生成,FPGA内部不进行反向传播计算. 该节通过Python获取训练数据集,并通过Pytorch框架 ...
- 卷积神经网络(CNN,ConvNet)
卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...
- 卷积神经网络(CNN)的简单实现(MNIST)
卷积神经网络(CNN)的基础介绍见http://blog.csdn.net/fengbingchun/article/details/50529500,这里主要以代码实现为主. CNN是一个多层的神经 ...
- 卷积神经网络(CNN)实现CIFAR100类别分类
卷积神经网络(CNN)实现CIFAR100类别分类 1. CIFAR100数据集介绍 这个数据集就像CIFAR-10,除了它有100个类,每个类包含600个图像.,每类各有500个训练图像和100个测 ...
- 卷积神经网络(CNN)简介
卷积神经网络(CNN)简介 多层的线性网络和单层的线性网络没有区别,而且线性模型的能够解决的问题也是有限的 1. 更复杂抽象的数据 一个单隐含层有更多的神经元,就能捕捉更多的特征.而且有更多隐层,意味 ...
- 论文解析:人脸检测中级联卷积神经网络的联合训练
论文解析:人脸检测中级联卷积神经网络的联合训练 商汤科技解析CVPR2016论文:人脸检测中级联卷积神经网络的联合训练 width="250" height="250&q ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR
原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression python源代码(GitHub下载 CSDN免费下载) ...
最新文章
- 从2D到3D 开发者讲述“街霸V”的美术秘笈
- ERP customizing extraction - how extraction function module is determined
- codeforces gym-101741 Elevator 动态规划、单调队列
- 面向对象之反射、包装、(定制)
- 当使用easyui时,表单的onchange事件失效
- linq与数据库之添加
- python灰产_Python进行目录的对比
- 学了java然后深入_JAVA8学习——从源码角度深入Stream流(学习过程)
- Atitit.常见的异常分类 目录 1. 双元分类法	1 1.1. 按照语言分 java js c# php等	1 1.2. 通用常见异常vs 特定异常	1 1.3. Runtime ex vs c
- 2014手机号码归属地数据库
- RGB格式图片转YUV图片
- SpringBoot在使用测试的时候是否需要@RunWith?
- 贵有恒,何必三更起五更睡;最无益,只怕一日曝十日寒。
- Floating-Point overflow and underflow
- Metrics-server
- 【微信开发】---- 公众号支付
- 闲鱼无货源赚钱的核心玩法?
- Android问题:java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法
- 一行代码实现音频变速不变调
- Linux内核Thermal框架详解十一、Thermal Governor(1)
热门文章
- java图片转换为数据流_OpenCV 读取数据流图片
- jsp 定义java类_在JSP中定义一个类
- ubuntu 14.04 apache php mysql_Ubuntu 14.04 升级PHP 和 Apache
- java符号引用 直接引用_java虚拟机的符号引用和直接引用
- 属性定义为 not null unique_Spring Data with MySQL (实体定义)
- 感恩工作平台心得体会_珍惜工作,感恩企业,从而追求更美好的人生
- 将iso镜像包设置成yum源_Centos7 Nginx搭建局域网yum仓库详细步骤,转发
- Ubuntu修改默认源为国内
- 计算机组成800H是多大,73计算机组成原理模拟题三(2019年)更新北理工20春答案...
- linux系统怎么安装cas,CAS 在Linux中安装与配置