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

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

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

前面我们讲解过单层神经网络模型,发现它结构简单,难以解决一些实际的比较复杂的问题,故而现在发展出了深度神经网络模型。

深度神经网络的深度主要表现在隐含层的层数上,前面的单层神经网络只有一个隐含层,而深度神经网络使用>=2个隐含层。其基本结构为:

image

图中有两个隐含层,分别是酱色的圆圈(有4个神经元)和绿色的圆圈(有2个神经元),所以这个深度神经网络的结构就是3-4-2结构。图片来源于2017/7/20 朱兴全教授学术讲座观点与总结第二讲:单个神经元/单层神经网络

对于一些很复杂的深度神经网络,隐含层的个数可能有几百上千个,比如ResNet网络结构的等,其训练过程也更复杂,耗时更长。那么这些模型就非常地“深”了。

使用更深层的神经网络,可以得到更好的表达效果,这可以直观地理解为:在每一个网络层中,输入特征的特点被一步步的抽象出来;下一层网络直接使用上一层抽象的特征进行进一步的线性组合或非线性组合,从而一步一步地得到输出。


1. 构建并训练深度神经网络模型

1.1 准备数据集

本次使用自己生成的一些数据,如下生成代码:

# 准备数据集
# 此处自己生成一些原始的数据点
dataset_X=np.linspace(-10,10,100)
dataset_y=2*np.square(dataset_X)+7 # 即label是feature的平方*2,偏置是7
dataset_y /=np.linalg.norm(dataset_y) # 归一化处理
dataset_X=dataset_X[:,np.newaxis]

该数据集的数据分布为:

image

1.2 构建并训练模型

直接上代码:

# 构建并训练模型
import neurolab as nl
x_min, x_max = dataset_X[:,0].min(), dataset_X[:,0].max()
multilayer_net = nl.net.newff([[x_min, x_max]], [10, 10, 1])
# 模型结构:隐含层有两层,每层有10个神经元,输出层一层。
multilayer_net.trainf = nl.train.train_gd # 设置训练算法为梯度下降
dataset_y=dataset_y[:,np.newaxis]
error = multilayer_net.train(dataset_X, dataset_y, epochs=800, show=100, goal=0.01)

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

Epoch: 100; Error: 2.933891201182385;
Epoch: 200; Error: 0.032819979078409965;
Epoch: 300; Error: 0.040183833367277225;
The goal of learning is reached

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

看来,虽然我们设置要800个循环,但是到达目标0.01时,便自动退出。可以画图看一下error的走势

image

1.3 用训练好的模型来预测新数据

此处我们没有新数据,假设原始的dataset_X是新数据,那么可以预测出这些新数据的结果,并比较一下真实值和预测值之间的差异,可以比较直观的看出模型的预测效果

# 用训练好的模型来预测
predict_y=multilayer_net.sim(dataset_X)
plt.scatter(dataset_X,dataset_y,label='dataset')
plt.scatter(dataset_X,predict_y,label='predicted')
plt.legend()
plt.title('Comparison of Truth and Predicted')
image

可以看出模型的预测值和真实值大致相同,至少表明模型在训练集上表现比较好。

关于深度神经网络的更具体内容,可以参考博文 神经网络浅讲:从神经元到深度学习.

其实,要解决复杂的问题,不一定要增加模型的深度(即增加隐含层数,但每一层的神经元个数比较少,即模型结构是深而瘦的),还可以增加模型的宽度(即一个或少数几个隐含层,但是增加隐含层的神经元个数,即模型结构是浅而肥的),那么哪一种比较好?

image

在文章干货|神经网络最容易被忽视的基础知识一中提到:虽然有研究表明,浅而肥的网络结构也能拟合任何函数,但它需要非常的“肥胖”,可能一个隐含层需要成千上万个神经元,这样会导致模型中参数的数量极大地增加。如下比较图:

image

从上图可以看出:当准确率差不多的时候,参数的数量却相差数倍。这也说明我们一般用深层的神经网络而不是浅层“肥胖”的网络。

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

1,深度神经网络的构建和训练已经有成熟的框架来实现,比如Keras,Tensorflow,PyTorch等,用起来更加的简单,此处仅仅用来解释内部结构和进行简单的建模训练。

2,为了解决更加复杂的问题,一般我们选用深而瘦的模型结构,不选用浅而肥的模型,因为这种模型的参数数量非常大,训练耗时长。

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


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

参考资料:

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容