内容简介:(本文所使用的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. 单层神经网络
单层神经网络由一个层次中的多个神经元组成,总体来看,单层神经网络的结构是:一个输入层,一个隐含层,一个输出层。如下为结构示意图。
图中描述的是前向网络,但其反向传播网络的结构也是一样的。蓝色方框表示输入层,绿色圆圈表示隐含层,输出层没有绘制出来。图片来源于 2017/7/20 朱兴全教授学术讲座观点与总结第二讲:单个神经元/单层神经网络 。
也可以从下图中看出单层神经网络的基本结构:
那么从代码上怎么创建单层神经网络,并对其进行训练呢?
1.1 加载数据集
首先我们加载数据集,该数据集很简单,包含16行,四列,前两列是double型数据,构成了特征列,后两列是整数(0或1),构成了标签列。加载方式很简单,前面讲过多次,此处只把该数据集中特征列的分布情况绘制出来。如下
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变化图绘制出来可以得到:
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-构建并训练单层神经网络模型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 深度学习基础:单层神经网络之线性回归
- 优化Docker中的Spring Boot应用:单层镜像方法
- 神经网络 – 序列预测LSTM神经网络落后
- 神经网络历史以及浅析神经网络与感知机
- 【神经网络】11行Python代码实现的神经网络
- 常见的五种神经网络(三):循环神经网络(上篇)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。