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


链式法则用于计算损失函数对 W 和 b 的导数 。注意,为了简单起见 。我们只展示了假设网络只有 1 层的偏导数 。
这虽然很简陋,但是我们依然能得到想要的结果—损失函数对权值 W 的导数(斜率),因此我们可以相应的调整权值 。
现在我们将反向传播算法的函数添加到 Python 代码中
为了更深入的理解微积分原理和反向传播中的链式求导法则 , 我强烈推荐 3Blue1Brown 的如下教程:
Youtube:
整合并完成一个实例
既然我们已经有了包括前向传播和反向传播的完整 Python 代码,那么就将其应用到一个例子上看看它是如何工作的吧 。
神经网络可以通过学习得到函数的权重 。而我们仅靠观察是不太可能得到函数的权重的 。
让我们训练神经网络进行 1500 次迭代,看看会发生什么 。注意观察下面每次迭代的损失函数,我们可以清楚地看到损失函数单调递减到最小值 。这与我们之前介绍的梯度下降法一致 。
让我们看看经过 1500 次迭代后的神经网络的最终预测结果:
经过 1500 次迭代训练后的预测结果
我们成功了!我们应用前向和方向传播算法成功的训练了神经网络并且预测结果收敛于真实值 。
注意预测值和真实值之间存在细微的误差是允许的 。这样可以防止模型过拟合并且使得神经网络对于未知数据有着更强的泛化能力 。
下一步是什么?
幸运的是我们的学习之旅还没有结束,仍然有很多关于神经网络和深度学习的内容需要学习 。例如:
? 除了 Sigmoid 以外,还可以用哪些激活函数
? 在训练网络的时候应用学习率
? 在面对图像分类任务的时候使用卷积神经网络
我很快会写更多关于这个主题的内容,敬请期待!
最后的想法
我自己也从零开始写了很多神经网络的代码
虽然可以使用诸如 Tensorflow 和 Keras 这样的深度学习框架方便的搭建深层网络而不需要完全理解其内部工作原理 。但是我觉得对于有追求的数据科学家来说,理解内部原理是非常有益的 。
这种练习对我自己来说已成成为重要的时间投入,希望也能对你有所帮助
怎样用python构建一个卷积神经网络用keras框架较为方便
首先安装anaconda,然后通过pip安装keras
以下转自wphh的博客 。
#coding:utf-8
'''
GPU run command:
THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python cnn.py
CPU run command:
python cnn.py
2016.06.06更新:
这份代码是keras开发初期写的,当时keras还没有现在这么流行,文档也还没那么丰富,所以我当时写了一些简单的教程 。
现在keras的API也发生了一些的变化,建议及推荐直接上keras.io看更加详细的教程 。
'''
#导入各种用到的模块组件
from __future__ import absolute_import
from __future__ import print_function
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.advanced_activations import PReLU
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.optimizers import SGD, Adadelta, Adagrad
from keras.utils import np_utils, generic_utils
from six.moves import range
from data import load_data
import random
import numpy as np
np.random.seed(1024)# for reproducibility
#加载数据
data, label = load_data()
#打乱数据
index = [i for i in range(len(data))]
random.shuffle(index)
data = https://www.04ip.com/post/data[index]
label = label[index]
print(data.shape[0], ' samples')

推荐阅读