鱼C论坛

 找回密码
 立即注册
查看: 40220|回复: 286

[作品展示] python小练习(062):python20行代码实现多层神经网络的机器学习(一)

  [复制链接]
发表于 2017-1-23 16:13:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jerryxjr1220 于 2017-3-23 14:54 编辑

现在神经网络、机器学习、深度学习逐渐成为未来计算机发展的大趋势。

今天就通过一个很简单的小例子,浅谈一下如何用python实现多层神经网络的机器学习。

神经网络(Neural Networks)属于 机器学习(Machine Learning)的一种。

深层神经网络(Deep Neural Networks)也只是 深层学习(Deep Learning) 的一种。

"深度学习"是为了让层数较多的多层神经网络可以训练,能够work而演化出来的一系列的 新的结构和新的方法。

好吧,太复杂的概念大家可以google,这里举个简单的例子说明:

例如,
有一组输入:X = 1,2,3,4,5,6,7,8,9,10
有一组输出:Y = 10,20,30,40,50,60,70,80,90,100
求解:Y = k*X + b 中的 k 和 b 为何值时,函数拟合最好。
当然,这是非常简单的题目,用脚趾头想都能知道这个函数当然应该是 Y = 10 * X + 0,即 k = 10, b = 0.

那么用神经网络学习应该如何实现呢?

卖个关子。

我们先看结果吧:
当学习次数为100时,程序输出:
k=9.999852648623337 b=0.0007369339496443169

当学习次数为10000时,程序输出:
k=9.999866463857986 b=0.0007360277038955244

当学习次数为1000000时,程序输出:
k=9.999935468934599 b=0.0003552889884596963

可以看到随着学习次数的增加,输出值会无限接近标准值(但是永远也打不到标准值,因为机器学习的特点就是根据偏差值不断调整自身参数,以不断减小误差,但是误差是永远存在的。)

下面详细解释程序代码:
首先,我们要定义一个函数,这个函数的作用是能够把输入值转化为一个0~1之间的数,并且当输入值与0的差值越大,输出越接近1,输入值越接近0时,输入值也越接近于0. 这个函数的作用就是用来调整机器本身参数,使结果更加接近于标准值。
那么,我们这个函数F(x)= (e^x -1) / (e^x + 1) 就符合这样的要求,其中x>=0(取绝对值)。
def F(x):
    return (math.exp(abs(x))-1)/(math.exp(abs(x))+1)

然后当然要把X和Y以列表的形式放入以便机器学习使用。
X = list(range(1,11))
Y = list(range(10,110,10))

由于有k和b 2个未知数,我们设定一个二层的神经网络。
把X作为第一层输入,k*X作为第一层的输出
把k*X作为第二层输入,k*X+b作为第二层的输出

利用k*X与Y-b计算第一层的偏差值error1,代入F(error1)计算权重,然后把这个权重值*error1作为k值的调整值
同样,利用k*X+b与Y计算第二层的偏差值error2,代入F(error2)计算权重,再把这个权重值*error2作为b值的调整值

然后,不断反复迭代这个过程,使得k和b不断接近标准值。
这个过程就是这样。

20行源代码如下:
游客,如果您要查看本帖隐藏内容请回复


既然说到了,神经网络那不提google的开源大作tensorflow就实在说不过去了,所以我决定还是要把这段加上。
同样20行左右的代码(去掉注释),完成同样的工作,而且tensorflow是一个非常完善的库,可以用来做非常多的机器学习的项目。
直接上代码,注释都写好了:
游客,如果您要查看本帖隐藏内容请回复


输出:
Step     k                         b                         error
0 [[ 4.0464325]] [ 4.64299202] 5.73681
30 [[ 9.25678635]] [ 0.40823561] 0.0502534
60 [[ 9.91544819]] [ 0.04644302] 0.000650405
90 [[ 9.99038124]] [ 0.00528351] 8.41773e-06
120 [[ 9.99890614]] [ 0.00060082] 1.08852e-07
150 [[ 9.99987507]] [  6.87018037e-05] 1.41737e-09
180 [[ 9.99998474]] [  8.32974911e-06] 2.0752e-11
210 [[ 9.99999619]] [  2.02655792e-06] 1.39467e-12
240 [[ 9.99999619]] [  2.02655792e-06] 1.39467e-12
270 [[ 9.99999619]] [  2.02655792e-06] 1.39467e-12
300 [[ 9.99999619]] [  2.02655792e-06] 1.39467e-12

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-23 16:57:55 | 显示全部楼层
高深
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-23 22:43:03 | 显示全部楼层
完全看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-1-23 23:03:26 | 显示全部楼层
我准备分几次和大家探讨基于神经网络的机器学习,今天是第一篇:基础篇,后面还会更新更复杂的利用神经网络的机器学习拟合高幂次函数,看看后面几天是否有空再写一下深度学习在预测数据方面的运用(比如气象云图的走势、股票均线的走势、彩票号码的预测等等都可以利用神经网络学习的方法实现)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-1-24 22:32:51 From FishC Mobile | 显示全部楼层
过来学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-29 12:03:56 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-1 10:06:19 | 显示全部楼层
干活阿!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-1 11:25:53 | 显示全部楼层
看一下!支持楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-1 12:50:29 | 显示全部楼层
学习学习再学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-3 21:04:28 | 显示全部楼层
感恩楼主!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-21 18:06:04 | 显示全部楼层
新手初来乍到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-22 09:06:07 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-23 23:49:01 | 显示全部楼层
麻辣空间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-23 14:57:37 | 显示全部楼层
增加了目前非常流行的google开源神经网络项目tensorflow的演示,同样20行的代码完成同样的工作,而且tensorflow是功能非常完备的第三方库,可以做更多的项目。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-23 15:46:58 | 显示全部楼层
好高深啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-23 20:13:44 | 显示全部楼层
这个有点高级。。
有没有机器学习玩游戏的例子??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-23 20:19:09 | 显示全部楼层
ft3312591 发表于 2017-3-23 20:13
这个有点高级。。
有没有机器学习玩游戏的例子??

我至少已经写了4、5个带AI的游戏程序了吧,参考我的python小练习系列吧,带AI的2048小游戏,带AI的贪食蛇、带AI的黑白棋、带AI的井字棋等等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-24 09:15:12 | 显示全部楼层
学习学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 10:08:20 | 显示全部楼层
学习一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-12 22:26:14 | 显示全部楼层
考试要考,跑来这里学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 00:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表