python更改激活函数 python中的激活函数( 三 )


在使用神经网络之前对输入数据进行缩放是一个很好的做法 。这可能涉及标准化变量,使其具有零均值和单位方差,或者将每个值归一化为0到1 。如果不对许多问题进行数据缩放,神经网络的权重可能会增大 , 从而使网络不稳定并增加泛化误差 。无论是否在网络中使用 ReLU,这种缩放输入的良好实践都适用 。
ReLU 的输出在正域上是无界的 。这意味着在某些情况下,输出可以继续增长 。因此 , 使用某种形式的权重正则化可能是一个比较好的方法,比如 l1或 l2向量范数 。这对于提高模型的稀疏表示(例如使用 l 1正则化)和降低泛化误差都是一个很好的方法。
.
从零开始用Python构建神经网络从零开始用Python构建神经网络
动机:为了更加深入python更改激活函数的理解深度学习python更改激活函数,python更改激活函数我们将使用 python 语言从头搭建一个神经网络,而不是使用像 Tensorflow 那样的封装好的框架 。我认为理解神经网络的内部工作原理,对数据科学家来说至关重要 。
这篇文章的内容是我的所学 , 希望也能对你有所帮助 。
神经网络是什么?
介绍神经网络的文章大多数都会将它和大脑进行类比 。如果你没有深入研究过大脑与神经网络的类比,那么将神经网络解释为一种将给定输入映射为期望输出的数学关系会更容易理解 。
神经网络包括以下组成部分
? 一个输入层,x
? 任意数量的隐藏层
? 一个输出层,?
? 每层之间有一组权值和偏置 , W and b
? 为隐藏层选择一种激活函数,σ 。在教程中我们使用 Sigmoid 激活函数
下图展示了 2 层神经网络的结构(注意:我们在计算网络层数时通常排除输入层)
2 层神经网络的结构
用 Python 可以很容易的构建神经网络类
训练神经网络
这个网络的输出 ? 为:
你可能会注意到,在上面的等式中,输出 ? 是 W 和 b 函数 。
因此 W 和 b 的值影响预测的准确率. 所以根据输入数据对 W 和 b 调优的过程就被成为训练神经网络 。
每步训练迭代包含以下两个部分:
? 计算预测结果 ?,这一步称为前向传播
? 更新 W 和 b,,这一步成为反向传播
下面的顺序图展示了这个过程:
前向传播
正如我们在上图中看到的,前向传播只是简单的计算 。对于一个基本的 2 层网络来说,它的输出是这样的:
我们在 NeuralNetwork 类中增加一个计算前向传播的函数 。为了简单起见我们假设偏置 b 为0:
但是我们还需要一个方法来评估预测结果的好坏(即预测值和真实值的误差) 。这就要用到损失函数 。
损失函数
常用的损失函数有很多种,根据模型的需求来选择 。在本教程中,我们使用误差平方和作为损失函数 。
误差平方和是求每个预测值和真实值之间的误差再求和 , 这个误差是他们的差值求平方以便我们观察误差的绝对值 。
训练的目标是找到一组 W 和 b,使得损失函数最好?。布丛げ庵岛驼媸抵抵涞木嗬胱钚?。
反向传播
我们已经度量出了预测的误差(损失),现在需要找到一种方法来传播误差,并以此更新权值和偏置 。
为了知道如何适当的调整权值和偏置,我们需要知道损失函数对权值 W 和偏置 b 的导数 。
回想微积分中的概念 , 函数的导数就是函数的斜率 。
梯度下降法
如果我们已经求出了导数,我们就可以通过增加或减少导数值来更新权值 W 和偏置 b(参考上图) 。这种方式被称为梯度下降法 。
但是我们不能直接计算损失函数对权值和偏置的导数 , 因为在损失函数的等式中并没有显式的包含他们 。因此,我们需要运用链式求导发在来帮助计算导数 。

推荐阅读