用Python 进行深度学习

摘要: 深度学习背后的主要缘由是人工智能应该从人脑中汲取灵感。本文就用一个小例子无死角的介绍一下深度学习!算法

人脑模拟编程

    深度学习背后的主要缘由是人工智能应该从人脑中汲取灵感。此观点引出了“神经网络”这一术语。人脑中包含数十亿个神经元,它们之间有数万个链接。不少状况下,深度学习算法和人脑类似,由于人脑和深度学习模型都拥有大量的编译单元(神经元),这些编译单元(神经元)在独立的状况下都不太智能,可是当他们相互做用时就会变得智能。后端

    我认为人们须要了解到深度学习正在使得不少幕后的事物变得更好。深度学习已经应用于谷歌搜索和图像搜索,你能够经过它搜索像“拥抱”这样的词语以得到相应的图像。-杰弗里·辛顿网络

神经元架构

    神经网络的基本构建模块是人工神经元,它模仿了人类大脑的神经元。这些神经元是简单、强大的计算单元,拥有加权输入信号而且使用激活函数产生输出信号。这些神经元分布在神经网络的几个层中。函数

inputs 输入 outputs 输出 weights 权值 activation 激活性能

人工神经网络的工做原理是什么?学习

    深度学习由人工神经网络构成,该网络模拟了人脑中相似的网络。当数据穿过这我的工网络时,每一层都会处理这个数据的一方面,过滤掉异常值,辨认出熟悉的实体,并产生最终输出。人工智能

输入层:该层由神经元组成,这些神经元只接收输入信息并将它传递到其余层。输入层的图层数应等于数据集里的属性或要素的数量。输出层:输出层具备预测性,其主要取决于你所构建的模型类型。隐含层:隐含层处于输入层和输出层之间,以模型类型为基础。隐含层包含大量的神经元。处于隐含层的神经元会先转化输入信息,再将它们传递出去。随着网络受训练,权重获得更新,从而使其更具前瞻性。spa

神经元的权重

    权重是指两个神经元之间的链接的强度或幅度。你若是熟悉线性回归的话,能够将输入的权重类比为咱们在回归方程中用的系数。权重一般被初始化为小的随机数值,好比数值0-1。

前馈深度网络

前馈监督神经网络曾是第一个也是最成功的学习算法。该网络也可被称为深度网络、多层感知机(MLP)或简单神经网络,而且阐明了具备单一隐含层的原始架构。每一个神经元经过某个权重和另外一个神经元相关联。

    该网络处理向前处理输入信息,激活神经元,最终产生输出值。在此网络中,这称为前向传递。

input layer 输入层   hidden layer 输出层  output layer 输出层

激活函数

激活函数就是求和加权的输入到神经元的输出的映射。之因此称之为激活函数或传递函数是由于它控制着激活神经元的初始值和输出信号的强度。

用数学表示为:

    咱们有许多激活函数,其中使用最多的是整流线性单元函数、双曲正切函数和solfPlus函数。

激活函数的速查表以下:

反向传播

    在网络中,咱们将预测值与预期输出值相比较,并使用函数计算其偏差。而后,这个偏差会传回这个网络,每次传回一个层,权重也会根绝其致使的偏差值进行更新。这个聪明的数学法是反向传播算法。这个步骤会在训练数据的全部样本中反复进行,整个训练数据集的网络更新一轮称为一个时期。一个网络可受训练数10、数百或数千个时期。

prediction error 预测偏差

代价函数和梯度降低

    代价函数度量了神经网络对给定的训练输入和预期输出“有多好”。该函数可能取决于权重、误差等属性。

    代价函数是单值的,并非一个向量,由于它从总体上评估神经网络的性能。在运用梯度降低最优算法时,权重在每一个时期后都会获得增量式地更新。

兼容代价函数

用数学表述为差值平方和:

target 目标值 output 输出值

    权重更新的大小和方向是由在代价梯度的反向上采起步骤计算出的。

其中η 是学习率

    其中Δw是包含每一个权重系数w的权重更新的向量,其计算方式以下:

target 目标值 output 输出值

图表中会考虑到单系数的代价函数

initial weight 初始权重 gradient 梯度 global cost minimum 代价极小值

    在导数达到最小偏差值以前,咱们会一直计算梯度降低,而且每一个步骤都会取决于斜率(梯度)的陡度。

多层感知器(前向传播)

    这类网络由多层神经元组成,一般这些神经元之前馈方式(向前传播)相互链接。一层中的每一个神经元能够直接链接后续层的神经元。在许多应用中,这些网络的单元会采用S型函数或整流线性单元(整流线性激活)函数做为激活函数

   如今想一想看要找出处理次数这个问题,给定的帐户和家庭成员做为输入

    要解决这个问题,首先,咱们须要先建立一个前向传播神经网络。咱们的输入层将是家庭成员和帐户的数量,隐含层数为1, 输出层将是处理次数。

    将图中输入层到输出层的给定权重做为输入:家庭成员数为二、帐户数为3。

如今将经过如下步骤使用前向传播来计算隐含层(i,j)和输出层(k)的值。

步骤:

1, 乘法-添加方法。

2, 点积(输入*权重)。

3,一次一个数据点的前向传播。

4, 输出是该数据点的预测。

i的值将从相链接的神经元所对应的输入值和权重中计算出来。

i = (2 * 1) + (3 * 1)    → i = 5

一样地,j = (2 * -1) + (3 * 1)   → j = 1

K = (5 * 2) + (1 * -1)   → k = 9

Python中的多层感知器问题的解决

激活函数的使用

    为了使神经网络达到其最大预测能力,咱们须要在隐含层应用一个激活函数,以捕捉非线性。咱们经过将值代入方程式的方式来在输入层和输出层应用激活函数。

这里咱们使用整流线性激活(ReLU):

用Keras开发第一个神经网络

关于Keras:

    Keras是一个高级神经网络的应用程序编程接口,由Python编写,可以搭建在TensorFlow,CNTK,或Theano上。

    使用PIP在设备上安装Keras,而且运行下列指令。

在keras执行深度学习程序的步骤

1,加载数据;

2,建立模型;

3,编译模型;

4,拟合模型;

5,评估模型;

开发Keras模型

   全链接层用Dense表示。咱们能够指定层中神经元的数量做为第一参数,指定初始化方法为第二参数,即初始化参数,而且用激活参数肯定激活函数。既然模型已经建立,咱们就能够编译它。咱们在底层库(也称为后端)用高效数字库编译模型,底层库能够用Theano或TensorFlow。目前为止,咱们已经完成了建立模型和编译模型,为进行有效计算作好了准备。如今能够在PIMA数据上运行模型了。咱们能够在模型上调用拟合函数f(),以在数据上训练或拟合模型。

咱们先从KERAS中的程序开始,

神经网络一直训练到150个时期,并返回精确值。

做者:【方向】

原文连接

相关文章
相关标签/搜索