作者:射命丸咲 Python 与 机器学习 爱好者
知乎专栏:https://zhuanlan.zhihu.com/carefree0910-pyml
个人网站:http://www.carefree0910.com
========== 写在前面的话 ==========
本章我尝试了一种新的叙述方式:把细节都放在了这个 repo (https://github.com/carefree0910/MLPractices)中,这意味着我不会在这里给出具体的代码;同时我设计了一些练习并提供了参考答案(有点像 cs231n 的 assignment 那种形式),所以如果观众老爷们想了解实现细节的话、是需要下载(或者 fork)这个 repo 并使用某个 IDE(比如 PyCharm)来进行相关实验的……
如果觉得这些都无所谓并愿意看的话,我会觉得很开心的 _(:з」∠)_
另外如果觉得这个形式不好或者没有必要的话也请尽情指出,毕竟这种形式对我而言其实超累的,要进行各种抽象 _(:з」∠)_
========== 分割线的说 ==========
正如上一章所说,这一部分我是受了 Tensorflow Playground 的启发后做出来的。它可能称不上很实用,但个人认为它能帮助我们理解神经网络(NN)并让我们熟悉 cv2 的基本操作
本章会使用我个人用 Numpy 写的 NN 框架进行实验,但即使对其完全不了解也不会对食用本文造成困难;不过如果有观众老爷确实想了解的话,可以参见这里 (http://www.carefree0910.com/posts/d94622d/) ( σ'ω')σ
先展示一下结果(动图也可以猛戳这里(https://raw.githubusercontent.com/carefree0910/Resources/641e8228/NN.gif)观看):
然后理一下我们要做的事:
看上去似乎很复杂的样子,但又正如上一章所说,我们只需要四个最基本的元素:字、线、圆、方就行,所以真的实现起来就会发现并不困难。为了让观众老爷们更有实感,我努力做了一些抽象并设计了一些练习,观众老爷可以尝试把相应部分进行实现并在自己的电脑上跑跑效果。repo(可能会持续更新)可以在这里下载(或者 fork)到,下面就说下怎么利用这个 repo
在这个 repo 的 NN/Practices/NNVis.py 中有本章所有需要补完的代码,参考答案则都可以在 NN/Answers/NNVis.py 中找到,测试则可以在 NN/Tests/NNVis.py 中进行;为了更有条理,我把任务分成了四份:
获取每条线的颜色(对应于 get_colors 函数)
获取每条线的粗细(对应于 get_line_info 函数)
画出整张 NN 的可视化图(对应于 draw_detail_network 函数),这部分的任务又分为了三份:画个圈、写个字、连条线(……)
把 cv2 默认的 BGR 图像转换成 imageio 需要的 RGB 图像(对应于 bgr2rgb 函数)
其中第三点的实现有些绕,这里稍微说明一下。首先要明确 draw_detail_network 函数接收的主要参数是什么:
原始二维数据集的最小、最大值(它们能帮助我们定出可视化的范围)
NN 中的各个 Layer(它们能通过 shape 属性告诉我们每一层的神经元个数)
NN 中的各个权值矩阵(线的颜色、粗细都是根据权值来定出的)
获取各层激活值的方法(从而能获得各个神经元的激活情况)
有了这些之后,我们只需:
根据激活值获取 Neuron graphs,所谓 Neuron graph 就是上图中那一个个小正方形,Neuron graphs 就是装这些小正方形的数组
根据 Neuron graphs 渲染 Canvas、亦即就是把每个 Neuron graph 放到 Canvas 上合适的地方
在把 Neuron graph(那些小正方形)画好之后,只需再进行如下三步即可完成可视化:
把最上面代表输入的两个圈画出来
把每个 Layer 的名字放在左边
用合适的线把 Neuron graph 连起来
整个流程不难但繁,详情可参见 repo
希望观众老爷们能够喜欢~
公众号后台回复关键词学习
回复 人工智能 揭开人工智能的神秘面纱
回复 贝叶斯算法 贝叶斯算法与新闻分类
回复 机器学习 R&Python机器学习
回复 阿里数据 阿里数据系列课程
回复 Python Python机器学习案例实战
回复 Spark 征服Spark第一季
回复 kaggle 机器学习kaggle案例
回复 大数据 大数据系列视频
回复 数据分析 数据分析人员的转型
回复 数据挖掘 数据挖掘与人工智能
回复 机器学习 R&Python机器学习
回复 阿里数据 阿里数据系列课程
回复 R R&Python机器学习入门