首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二.theano实现回归神经网络分析

从本篇文章开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。第一篇文章主要讲解神经网络基础概念,同时讲解Theano库的安装过程及基础用法,主要结合 "莫烦大神" 的视频介绍,后面随着深入会讲解具体的项目及应用。基础性文章,希望对您有所帮助,也建议大家一步步跟着学习,同时文章中存在错误或不足之处,还请海涵~

一. 定义神经网络Layer类

如下图所示,通过该神经网络识别动物猫或狗,共包括输入层(Input Layer)、隐藏层3层(Hidden Layer)和输出层(Output Layer)。其中每一个神经元都有一个激励函数,被激励的神经元传递的信息最有价值,它也决定最后的输出结果,经过海量数据的训练,最终神经网络将可以用于识别猫或狗。

神经网络激励函数参考:

http://deeplearning.net/software/theano/library/tensor/nnet/nnet.html

激励函数相当于一个过滤器或激励器,它把特有的信息或特征激活,常见的激活函数包括softplus、sigmoid、relu、softmax、elu、tanh等。对于隐藏层,我们可以使用relu、tanh、softplus等非线性关系;对于分类问题,我们可以使用sigmoid(值越小越接近于0,值越大越接近于1)、softmax函数,对每个类求概率,最后以最大的概率作为结果;对于回归问题,可以使用线性函数(linear function)来实验。

神经网络首先需要添加神经层,将层(Layer)定义成类,通过类来添加神经层。神经层是相互链接,并且是全连接,从第一层输入层传入到隐藏层,最后传输至输出层。假设接下来需要定义两层内容:

L1 = Layer(inputs, in_size=1, out_size=10, activation_function)

参数包括输入值,输入节点数,输出节点数和激励函数

L2 = Layer(L1.outputs, 10, 1, None)

参数中L1的输出作为输入值,L1的输出10个节点作为输入节点,输出节点1个,激励函数为None。

定义类的代码如下,包括权重和bias,其中参数为随机变量更有利于我们后面的更新,乱序更能促进神经网络的学习。

二. 回归神经网络实现

接下来开始跟着莫烦大声实现了第一个神经网络代码,步骤如下:

1.制造虚拟数据

通过numpy.linspace生成300个随机点进行训练,形成y=x^2-0.5的虚拟数据。代码如下:

生产的一元二次随机散点图如下图所示:

图1 散点图结果

2.增加神经层

定义输入x和y,注意其dtype类型为64位浮点型,整个代码前后类型需要保持一致。同时定义了L1层和L2层:

L1 = Layer(x, 1, 10, T.nnet.relu)

输入为x,1维的data,神经元10个,relu非线性激励函数

L2 = Layer(L1.outputs, 10, 1, None)

输入为L1输出值, L2的in_size为L1的神经元10,假设L2输出为最终output

3.计算误差与梯度下降更新

定义cost变量计算误差,即预测值与真实值的差别;再定义梯度下降变量,其误差越大,降低趋势越大,通过梯度下降让预测值更接近真实值。代码中通过theano.function()函数更新神经网络的四个参数,计算公式如下啊:

L1.W, L1.W-learnging_rate*gW1:

(原始的权重-学习效率*下降幅度)并且更新为L1.W,通过该方法将L1.W、L1.b、L2.W、L2.b更新。

4.预测结果

最后是预测结果,训练时会给出x和y求cost,而预测时只给出输入x,用来做预测。最后每隔50步输出err,如果err不断减小,说明神经网络在学到东西,因为预测值与真实值误差在不断减小。

最后输出误差结果,可以看到在不断减小,通过不断更新权重和bias,神经网络在不断学习。

三. 回归神经网络可视化

最后补充神经网络不断学习的拟合图形,从最早不合理的图形到后面基本拟合,同时cost误差也在不断减小,说明神经网络的真实值和预测值在不断更新接近,神经网络正常运行。结果如下:

图2 第一次拟合结果

图3 第二次拟合结果

图4 最后一次拟合结果

基础性文章,希望对您有所帮助,推荐大家阅读莫烦大神的学习视频,也建议大家一步步跟着学习,同时文章中存在错误或不足之处,还请海涵~

(By:Eastmount 2018-05-21 下午4点http://blog.csdn.net/eastmount/)

杨秀璋

本科:北京理工大学-软件学院

硕士:北京理工大学-软件学院

工作:贵州财经大学-信息学院

副业:博客写者、程序员

爱好:教学、科研、项目、分享

人生格言:无知·乐观·谦逊·低调·生活,很幸运能成为一名教师,更幸运的是能从事家乡那边的教育事业,尽力而为。

自幼受贵州大山的熏陶,养成了诚实质朴的性格。经过寒窗苦读,考入BIT,为完成自己的教师梦,放弃IT、航天等工作,成为贵财一名大学教师,并想把自己所学所感真心传授给自己的学生,帮助更多陌生人。

贵州纵美路迢迢,

为负劳心此一遭。

收得破书三四本,

也堪将去教尔曹。

新书:

《Python网络数据爬取及分析从入门到精通(爬取篇)》 《Python网络数据爬取及分析从入门到精通(分析篇)》

本文作者新书上架

·END·

统计学家

统计学·机器学习·人工智能

您的转发支持我们继续前进!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180710A06Y0C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券