加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

100行Python代码,轻松搞定神经网络

发布时间:2019-05-06 12:59:32 所属栏目:优化 来源:eisenjulian 编译:周家乐、钱天培 用tensor
导读:副标题#e# 大数据文摘出品 来源:eisenjulian 编译:周家乐、钱天培 用tensorflow,pytorch这类深度学习库来写一个神经网络早就不稀奇了。 可是,你知道怎么用python和numpy来优雅地搭一个神经网络嘛? 现如今,有多种深度学习框架可供选择,他们带有自动微

接下来看看另一个常用的层,激活层。它们属于点式(pointwise)非线性函数。点式函数的 Jacobian矩阵是对角矩阵, 这意味着当乘以梯度时, 它是逐点相乘的。

  1. class ReLu(Layer): 
  2.   def forward(self, X): 
  3.     mask = X > 0 
  4.     return X * mask, lambda D: D * mask 

计算Sigmoid函数的梯度略微有一点难度,而它也是逐点计算的:

  1. class Sigmoid(Layer): 
  2.   def forward(self, X): 
  3.     S = 1 / (1 + np.exp(-X)) 
  4.     def backward(D): 
  5.       return D * S * (1 - S) 
  6.     return S, backward 

当我们按序构建很多层后,可以遍历它们并先后得到每一层的输出,我们可以把backward函数存在一个列表内,并在计算反向传播时使用,这样就可以直接得到相对于输入层的损失梯度。就是这么神奇:

  1. class Sequential(Layer): 
  2.   def __init__(self, *layers): 
  3.     super().__init__() 
  4.     self.layers = layers 
  5.     for layer in layers: 
  6.       self.parameters.extend(layer.parameters) 
  7.  
  8.   def forward(self, X): 
  9.     backprops = [] 
  10.     Y = X 
  11.     for layer in self.layers: 
  12.       Y, backprop = layer.forward(Y) 
  13.       backprops.append(backprop) 
  14.     def backward(D): 
  15.       for backprop in reversed(backprops): 
  16.         D = backprop(D) 
  17.       return D 
  18.     return Y, backward 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读