如何用9行Python代码编写一个简单的神经网络?
BP神经网络——Python简单实现三层神经网络(Numpy)
瞓我们将在Python中创建一 雠个踌NeuralNetwork类,以嚟训练神经篪元砥以给出准确的预测。该课程还将砥具有其篪他帮助程序功能 雠。
如何用9行Python代码编写一个简单的神经网络?
如何用9行Python代码编写一个简单的神经网络?
如如何何峯用9行Python代码编写一个简单的神经网络魍?
1. 应用Sig镬moid函数
我们将使用 Sigm懋oid函数 (它绘制一条“ S”形代码曲线)作为神经网络的激活函数。袤
2竑. 训练模型
这疝是我们将教神经胄网络做出准 骤确预测的阶段。每饬个输入将具有权重(正或负)。
这意味着篪具有大量正权重呪或大量负权代码重的的输入将对腌结果输出产生更大的影响。神经网络
我们初是将每个权酬重一个分配给一个随一个机数。
本文参考翻译于此网站 —篪— 原文
如何用9行Python代码编写荭一个简晷易雠神经网络
学神经网络习人工智能时黐,我牰给 媸自己定了一个目标--Python用Pyt锕hon写一个简伬单的神经网络 砺。为了确保真 瞓得理解它,我要求自己不使用夿任何神经网络库,从头写起。 侴多亏了Andrew绉 Trask写得一篇黐精彩的博客,我做到了!下面贴出一个那九行代码袤:
在这篇文章中瘛,我将解释我是如何做得,以便你可以写出你自己的。我将会提供Python一个长点的丒但是更完的美的源代 媸码。
首先,神经网络是什么?人脑由几千亿由突触相互连接的细胞(神经元)组成。突触传入足够的兴奋就会引起神经元的兴奋。这个过9行程被称魍为“思考”。
我们可以在计算机上写一个神经网络来模拟这个啻过程。不需要在生物分梼子水平模拟紬人脑,只需模拟更高层级的规牰则。我们使用矩阵(二维数据表格歯)这一数学工具,并 砺且鳝为了简单明了,只模拟一个驺有3个输入和一编写个输出褫的神经元。
我俦们将炿训简单练神经元解决下面的问题。褫前四个例子被称作训练集。你发现规闳律了吗?‘?’是0还是1?
你可能发现了,输出总是等于输入中左藿列的值。所以‘?’应该是1。
训练过程
但是如何使我们的神经元回答正搒确呢?赋予每个输入一个权重,可以是一个篪正的或负的数字。编写拥有较大正(何用或负)殠权重吜的输菗入将决定神经元的输出。首先设置每个权敕重的初始值为一个随机数字,然后开㤘始俦训练过程:
取一个训练样本的输入,使用权重调整它们,紬通过一个特殊的公式计算神经元的输出。
计算误,Python畴即神经元的输出与训练样本中的期待输出之间的值。神经网络
根据误略微地调整权重。
重复这个过如何程1万次蜯薨。
终权重殠将呪会变为符合训练集丒的一个解。如果使用神经元考虑这种规律的一个新情形,嗤它将会给出一个很棒Python的预怞测。啻
这个过程就是back propaga薨tion。
计算神经元输出的梼公懤式
你可能会想荭,计算神经元何用输出的公式是什么?如何首先,俦计算神经元输伬入的加权和,即
接嚟着使之规范化,结果在0,1之间。为此喌使用一个数学函数亜--Sigmoid函数:晷
S的ig亜moid函数的图形是一条“S”状的曲线。 骤
把驺个方程代入第二个,计算神经元输出的魑敕偢终公式为:瘛
你可能注意到了,为了简单,我们没有引入兴奋阈值。
调整权重的鸠公式
我们在训练时不断调整权咮重。但是怎么调整呢?可以使用“Error Weighted Derivative”公式:
为什么使胄用这个公式?首先,我们想使调整和误腌的大小成比锕例。其次,乘以输踌入(0或1),如果输入是0,权夿重就不会调代码整。后,乘以Sigm幚oid曲线的斜率(图何用4)。为懤了理解后一条,考虑这些篪:
我鸠们使用Si羴gmoid曲线墀计算神经元的输出
如果输出楱是一个大的正(或负神经网络)数,这意味着神经楱元采用这种(或另一种)方式
从图四豁可以看魉出,在较大数值处砾,Sigmoid曲线斜率螭小
如果神经豁元认为当前权重是正确的,就不会对它进行很大调整绉。乘以Sigmoid籀曲一个线斜率便炿可以实现这编写一点搒
Sigmoid曲线的蜯斜率闳可以通过咮求导得到:
把第二个等式代入个等式里,得到调整权重的终公式:
当然有简单其他公式,它们可以使神经元学习得更快,但是竑这个公式藿的优点是非常9行简单。
构造Python代码镑
虽然我嗤们没有使用神经网吜敕畴络库,但是将导入P墀yt螭hon数学库numpy里幚的4个方编写法。分别是:
exp魑--自然指数
array--创建矩阵
dot--进行矩阵乘法
random--产生随机数
比如, 我们可以使用arra峯y()方法表示前面展示的训练集:
“.T”方法用于羴矩阵代码转置(行简单变列)。㤘所以,计算机这样存储数字:
我觉得我们可以开始构建更优美的源代码了。给出这喌个源代码后9行,我会 侴做一个总偢结。
我对砾每一行源代码都添加了注释来鸱解释所有内容。注意在每次迭代的时,我们简单镑同时处理锕所有训练集数据。如何所以变量都是矩阵(二锕维魉数据表格)。下面是一个用镬Python写坻地完整的示鳝敕例代码。
我们做到了!我们用歯P酬ython构建了一个简单的神经网络!
首先神鸱经网络对俦自己赋籀予坻随机权重,然后使用训练集训练自己。疝接着 峁,它考虑一种新的情形[1菗, 0, 0怞]并且预9行测了0.99993704。正确是1。非常接近!
传统计算机程序通常 峁不会学饬习。而神经网络却能自己何用学习,懋适应并对新情形做出反应,这是多么神奇,就像雠人类一样。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。