100行Python代码,轻松搞定神经网络(3)
发布时间:2019-05-05 23:07 所属栏目:21 来源:大数据文摘
导读:接下来看看另一个常用的层,激活层。它们属于点式(pointwise)非线性函数。点式函数的 Jacobian矩阵是对角矩阵, 这意味着当乘以梯度时, 它是逐点相乘的。 classReLu(Layer): defforward(self,X): mask=X0 returnX*ma
接下来看看另一个常用的层,激活层。它们属于点式(pointwise)非线性函数。点式函数的 Jacobian矩阵是对角矩阵, 这意味着当乘以梯度时, 它是逐点相乘的。
计算Sigmoid函数的梯度略微有一点难度,而它也是逐点计算的:
当我们按序构建很多层后,可以遍历它们并先后得到每一层的输出,我们可以把backward函数存在一个列表内,并在计算反向传播时使用,这样就可以直接得到相对于输入层的损失梯度。就是这么神奇:
正如我们前面提到的,我们将需要定义批样本的损失函数和梯度。一个典型的例子是MSE,它被常用在回归问题里,我们可以这样实现它:
就差一点了!现在,我们定义了两种层,以及合并它们的方法,下面如何训练呢?我们可以使用类似于scikit-learn或者Keras中的API。
这就行了!如果你跟随着我的思路,你可能就会发现其实有几行代码是可以被省掉的。 这代码能用不? (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读