永发信息网

如何用9行Python代码编写一个简易神经网络

答案:2  悬赏:70  手机版
解决时间 2021-03-22 01:55
如何用9行Python代码编写一个简易神经网络
最佳答案
学习人工智能时,我给自己定了一个目标--用Python写一个简单的神经网络。为了确保真得理解它,我要求自己不使用任何神经网络库,从头写起。多亏了Andrew Trask写得一篇精彩的博客,我做到了!下面贴出那九行代码:



  在这篇文章中,我将解释我是如何做得,以便你可以写出你自己的。我将会提供一个长点的但是更完美的源代码。

  首先,神经网络是什么?人脑由几千亿由突触相互连接的细胞(神经元)组成。突触传入足够的兴奋就会引起神经元的兴奋。这个过程被称为“思考”。



  我们可以在计算机上写一个神经网络来模拟这个过程。不需要在生物分子水平模拟人脑,只需模拟更高层级的规则。我们使用矩阵(二维数据表格)这一数学工具,并且为了简单明了,只模拟一个有3个输入和一个输出的神经元。

  我们将训练神经元解决下面的问题。前四个例子被称作训练集。你发现规律了吗?‘?’是0还是1?



  你可能发现了,输出总是等于输入中最左列的值。所以‘?’应该是1。

  训练过程

  但是如何使我们的神经元回答正确呢?赋予每个输入一个权重,可以是一个正的或负的数字。拥有较大正(或负)权重的输入将决定神经元的输出。首先设置每个权重的初始值为一个随机数字,然后开始训练过程:

  取一个训练样本的输入,使用权重调整它们,通过一个特殊的公式计算神经元的输出。

  计算误差,即神经元的输出与训练样本中的期待输出之间的差值。

  根据误差略微地调整权重。

  重复这个过程1万次。



  最终权重将会变为符合训练集的一个最优解。如果使用神经元考虑这种规律的一个新情形,它将会给出一个很棒的预测。

  这个过程就是back propagation。

  计算神经元输出的公式

  你可能会想,计算神经元输出的公式是什么?首先,计算神经元输入的加权和,即



  接着使之规范化,结果在0,1之间。为此使用一个数学函数--Sigmoid函数:



  Sigmoid函数的图形是一条“S”状的曲线。



  把第一个方程代入第二个,计算神经元输出的最终公式为:



  你可能注意到了,为了简单,我们没有引入最低兴奋阈值。

  调整权重的公式

  我们在训练时不断调整权重。但是怎么调整呢?可以使用“Error Weighted Derivative”公式:



  为什么使用这个公式?首先,我们想使调整和误差的大小成比例。其次,乘以输入(0或1),如果输入是0,权重就不会调整。最后,乘以Sigmoid曲线的斜率(图4)。为了理解最后一条,考虑这些:

  我们使用Sigmoid曲线计算神经元的输出

  如果输出是一个大的正(或负)数,这意味着神经元采用这种(或另一种)方式

  从图四可以看出,在较大数值处,Sigmoid曲线斜率小

  如果神经元认为当前权重是正确的,就不会对它进行很大调整。乘以Sigmoid曲线斜率便可以实现这一点

  Sigmoid曲线的斜率可以通过求导得到:



  把第二个等式代入第一个等式里,得到调整权重的最终公式:



  当然有其他公式,它们可以使神经元学习得更快,但是这个公式的优点是非常简单。

  构造Python代码

  虽然我们没有使用神经网络库,但是将导入Python数学库numpy里的4个方法。分别是:

  exp--自然指数

  array--创建矩阵

  dot--进行矩阵乘法

  random--产生随机数

  比如, 我们可以使用array()方法表示前面展示的训练集:



  “.T”方法用于矩阵转置(行变列)。所以,计算机这样存储数字:



  我觉得我们可以开始构建更优美的源代码了。给出这个源代码后,我会做一个总结。

  我对每一行源代码都添加了注释来解释所有内容。注意在每次迭代时,我们同时处理所有训练集数据。所以变量都是矩阵(二维数据表格)。下面是一个用Python写地完整的示例代码。

  我们做到了!我们用Python构建了一个简单的神经网络!

  首先神经网络对自己赋予随机权重,然后使用训练集训练自己。接着,它考虑一种新的情形[1, 0, 0]并且预测了0.99993704。正确答案是1。非常接近!

  传统计算机程序通常不会学习。而神经网络却能自己学习,适应并对新情形做出反应,这是多么神奇,就像人类一样。
全部回答
python是一款应用非常广泛的脚本程序语言,谷歌公司的网页就是用python编写。python在生物信息、统计、网页制作、计算等多个领域都体现出了强大的功能。python和其他脚本语言如java、r、perl 一样,都可以直接在命令行里运行脚本程序。工具/原料 python;cmd命令行;windows操作系统 方法/步骤 1、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下兼容,体验较差。 2、打开文本编辑器,推荐editplus,notepad等,将文件保存成 .py格式,editplus和notepad支持识别python语法。 脚本第一行一定要写上 #!usr/bin/python 表示该脚本文件是可执行python脚本 如果python目录不在usr/bin目录下,则替换成当前python执行程序的目录。 3、编写完脚本之后注意调试、可以直接用editplus调试。调试方法可自行百度。脚本写完之后,打开cmd命令行,前提是python 已经被加入到环境变量中,如果没有加入到环境变量,请百度 4、在cmd命令行中,输入 “python” + “空格”,即 ”python “;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大陆手机卡在香港 澳门地方使用。
为什么1.56这样的小数是有限小数,1.54678这
七年级上册英语节节高答案
专升本算不算同等学力,自考本科算同等学力吗
S240/沪陕高速公路(路口)地址在什么地方,想
武定县青幼儿园地址在什么地方,想过去办事
豫rq370挂车
用好奇和就是写一句话,用但是造句?
精通所有学科可能吗?
英特尔E6600和英特尔G540哪个更好 说说理由
绝地求生浴袍套问题
闻名的闻的意思是什么,闻名的闻指的是什么
明豪保健中心怎么去啊,有知道地址的么
刚定了宝马320过几天去提车,我如何判断车子
上直下卷的发型
推荐资讯
英皇足浴会所地址在什么地方,想过去办事
单选题“贫雇农得地开心,中农有利放心,富农
贵阳普通牌照一天进城几个地方这么罚款
毕业生给老师的赠言,李未的校长寄语
祝家私厨在哪里啊,我有事要去这个地方
您好,我们这家公司账目很乱,之前换过多个会
白色描述语录,新手入坑无人机的话,推荐哪一
万州厨林岔街子烤鱼地址在什么地方,想过去办
伊利冷饮总经销一部地址在哪,我要去那里办事
找规律填数80,40,20,( ),( )。:
随着现代高层建筑的迅速发展,电梯已成为人们
—Sir, can I pass the examinations this t
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?