从零开始学人工智能(3)--Python · 神经网络(二)· 层

浏览: 644

作者:射命丸咲    Python 与 机器学习 爱好者

知乎专栏:https://zhuanlan.zhihu.com/carefree0910-pyml 

最终成品的 GitHub 地址:

https://github.com/carefree0910/MachineLearning/tree/master/NN

本章用到的 GitHub 地址:

https://github.com/carefree0910/MachineLearning/blob/master/Zhihu/NN/Layers.py

这一章主要讲核心结构 层(Layer)的实现

那么思想我们都有了,关键就是怎么把它翻译成代码。为使观众老爷们不会一步迈得太大,我们先不考虑和卷积神经网络(CNN)以及各种附加层(Dropout、Normalize 等)的兼容问题、而只考虑普通的神经网络。

我们上一章说了、我们关键要把所有层的爸爸定义好,所以我们要先考虑一个层的基本功能应该有哪些:

  1. 形状。这个挺直观,因为为了能够和上一层与下一层水乳交融(喂),层与层之间的形状要彼此契合(喂喂喂)

  2. 没了。

确实如果只用实现最简单的神经网络的话,定义一个形状足矣。所以代码也很清晰了:

class Layer(metaclass=ABCMeta):
   def __init__(self, shape):
       self.shape = shape

接下来就可以直接实现 Duang 的部分了!鼓掌!!(喂

def activate(self, x, w, bias):
   return self._activate(tf.matmul(x, w) + bias)

这里面涉及许多东西,我们一个个来看它们的数学内涵(至于数学内涵是什么意思以及为什么要这么做请参见这篇文章:https://zhuanlan.zhihu.com/p/24482386):

  1. w:上一层与当前层之间的权重

  2. bias:当前层的偏置量

  3. tf.matmul:这里面 tf 是 tensorflow 的缩写(今后同理),matmul 是“矩阵乘法”的意思。也就是说,这个函数相当于做了个矩阵乘法 并返回其结果

细心的观众老爷可能会注意到这里面藏了一个叫 self._activate 的函数;事实上,这正是 Duang 的核心所在,我们来看看它在爸爸里面是怎么定义的:

@abstractmethoddef _activate(self, x):
   pass

和你想的一样吗?

注意我前面说过,爸爸是不干活的,只有他生的孩儿才干活;所以爸爸理应将这个 Duang 的部分交给他孩儿自己去 Duang

可以说到这为止,一个最简单的爸爸就定义完了。我们最后让他生一个儿子看看:

class Sigmoid(Layer):
   def _activate(self, x, predict):
       return tf.nn.sigmoid(x)

tf.nn.sigmoid 是 tensorflow 自带的 Sigmoid 激活函数。相当方便不是吗科科科!

不过可能有比较厉害的观众老爷会发现:你这个东西不是没定义梯度下降的过程吗!没错,这正是 tensorflow 的厉害之处,它会帮你处理所有梯度下降相关的问题。

有些观众老爷可能会有所不满……没关系!!为了让每个观众老爷都满意,我自己写了一套完整的梯度下降算法,包括各种 Optimizers 像 Adams 啊 RMSProp 啊之类的都有!

不过那个就是比较深的内容了,大概会作为附加章节给出……毕竟是自己实现的,比 cpu 版的 tensorflow 要慢两三倍,比 gpu 版的……咳咳咳……

以上,大概讲述了如何最简洁快速地定义 层(Layer)这个类;接下来我们会定义一个最简单的 神经网络(NN)类、也就是上一章说的框架来封装这个 Layer 类、并看看我们的初步结果如何

希望观众老爷们能喜欢~


公众号后台回复关键词学习

回复 人工智能          揭开人工智能的神秘面纱

回复 贝叶斯算法      贝叶斯算法与新闻分类

回复 机器学习          R&Python机器学习

回复 阿里数据          阿里数据系列课程

回复 Python             Python机器学习案例实战

回复 Spark               征服Spark第一季

回复 kaggle             机器学习kaggle案例

回复 大数据             大数据系列视频

回复 数据分析          数据分析人员的转型

回复 数据挖掘          数据挖掘与人工智能

回复 机器学习          R&Python机器学习

回复 阿里数据          阿里数据系列课程

回复 R                      R&Python机器学习入门

推荐 0
本文由 人工智能爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册