【火炉炼AI】深度学习002-构建并训练单层神经网络模型

栏目: 数据库 · 发布时间: 5年前

内容简介:(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )前面我们介绍了神经网络的基本结构单元-感知器,现在我们再升一级,看看神经网络的基本结构和训练方法。单层神经网络由一个层次中的多个神经元组成,总体来看,单层神经网络的结构是:一个输入层,一个隐含层,一个输出层。如下为结构示意图。

(本文所使用的 Python 库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

前面我们介绍了神经网络的基本结构单元-感知器,现在我们再升一级,看看神经网络的基本结构和训练方法。

1. 单层神经网络

单层神经网络由一个层次中的多个神经元组成,总体来看,单层神经网络的结构是:一个输入层,一个隐含层,一个输出层。如下为结构示意图。

【火炉炼AI】深度学习002-构建并训练单层神经网络模型

图中描述的是前向网络,但其反向传播网络的结构也是一样的。蓝色方框表示输入层,绿色圆圈表示隐含层,输出层没有绘制出来。图片来源于 2017/7/20 朱兴全教授学术讲座观点与总结第二讲:单个神经元/单层神经网络

也可以从下图中看出单层神经网络的基本结构:

【火炉炼AI】深度学习002-构建并训练单层神经网络模型

那么从代码上怎么创建单层神经网络,并对其进行训练呢?

1.1 加载数据集

首先我们加载数据集,该数据集很简单,包含16行,四列,前两列是double型数据,构成了特征列,后两列是整数(0或1),构成了标签列。加载方式很简单,前面讲过多次,此处只把该数据集中特征列的分布情况绘制出来。如下

【火炉炼AI】深度学习002-构建并训练单层神经网络模型

1.2 建立模型并训练

数据集准备完成后, 就需要构建单层神经网络模型,并对其进行训练。

# 构建单层NN模型,该模型的隐含层含有两个感知器
import neurolab as nl
x_min, x_max = dataset_X[:,0].min(), dataset_X[:,0].max()
y_min, y_max = dataset_X[:,1].min(), dataset_X[:,1].max()
single_layer_net = nl.net.newp([[x_min, x_max], [y_min, y_max]], 2) # 隐含层含有两个神经元
# 所以本单层NN模型含有两个输入神经元,两个隐含层神经元,两个输出神经元
cost = single_layer_net.train(dataset_X, dataset_y, epochs=50, show=2, lr=0.01)
# 训练该单层NN模型,50个回合,每2个回合显示一下训练结果,学习速率为0.01
复制代码

-------------------------------------输---------出--------------------------------

Epoch: 2; Error: 7.5; Epoch: 4; Error: 7.0; Epoch: 6; Error: 4.0; Epoch: 8; Error: 4.0; Epoch: 10; Error: 4.0; Epoch: 12; Error: 4.0; Epoch: 14; Error: 4.0; Epoch: 16; Error: 4.0; Epoch: 18; Error: 4.0; Epoch: 20; Error: 4.0; Epoch: 22; Error: 4.0; Epoch: 24; Error: 4.0; Epoch: 26; Error: 4.0; Epoch: 28; Error: 4.0; Epoch: 30; Error: 4.0; Epoch: 32; Error: 4.0; Epoch: 34; Error: 4.0; Epoch: 36; Error: 4.0; Epoch: 38; Error: 4.0; Epoch: 40; Error: 4.0; Epoch: 42; Error: 4.0; Epoch: 44; Error: 4.0; Epoch: 46; Error: 4.0; Epoch: 48; Error: 4.0; Epoch: 50; Error: 4.0; The maximum number of train epochs is reached

--------------------------------------------完-------------------------------------

可以看出在第6个回合时,cost就达到最低,并不再变化,表示已经收敛,再提高训练回合数也用处不大。将Error变化图绘制出来可以得到:

【火炉炼AI】深度学习002-构建并训练单层神经网络模型

1.3 使用训练好的模型来预测新样本

训练后的模型肯定是要用它来预测新样本,期望它能对从来没有见过的新样本也能得到理想的结果。

预测的代码为:

# 用训练好的模型来预测新样本
new_samples=np.array([[0.3, 4.5],
                      [4.5, 0.5],
                      [4.3, 8]])
print(single_layer_net.sim(new_samples))
复制代码

-------------------------------------输---------出--------------------------------

[[0. 0.] [1. 0.] [1. 1.]]

--------------------------------------------完-------------------------------------

单单从结果上来看,我们成功的构建了单层NN模型并对其进行训练,通过训练后的模型来成功预测了新样本,一般的,一个深度学习模型流程就是这样的。

单层神经网络模型虽然结构简单,训练很快,比较适合一些简单问题,对于复杂一些的问题,这个模型就会力不从心,并且,有时我们的优化方法并不一定能够找到所希望的优化参数,也找不到所需要的拟合函数,由于模型比较简单,难以学习到复杂的内在机理,很容易产生欠拟合。

########################小**********结###############################

1,单层神经网络模型结构简单,训练耗时短,能够解决的问题也相对比较简单,对于比较复杂的问题会出现欠拟合,故而应用上受到一定限制,目前直接使用单层神经网络模型的情况非常少。

#################################################################

注:本部分代码已经全部上传到( 我的github )上,欢迎下载。

参考资料:

1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译


以上所述就是小编给大家介绍的《【火炉炼AI】深度学习002-构建并训练单层神经网络模型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法:C语言实现

算法:C语言实现

塞奇威克 / 霍红卫 / 机械工业出版社 / 2009-10 / 79.00元

《算法:C语言实现(第1-4部分)基础知识、数据结构、排序及搜索(原书第3版)》细腻讲解计算机算法的C语言实现。全书分为四部分,共16章。包括基本算法分析原理,基本数据结构、抽象数据结构、递归和树等数据结构知识,选择排序、插入排序、冒泡排序、希尔排序、快速排序方法、归并和归并排序方法、优先队列与堆排序方法、基数排序方法以及特殊用途的排序方法,并比较了各种排序方法的性能特征,在进一步讲解符号表、树等......一起来看看 《算法:C语言实现》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码