30行代码,带你分分钟创建神经网络!(附工具&教程)

简介:

image

本文含大量代码,如需原文请从文末来源链接获取。

自己搭建神经网络太复杂?

image

使用Synaptic.js(https://synaptic.juancazala.com/#/ )创建和训练神经网络。
利用这款工具,我们可以在浏览器中用Node.js进行深度学习。
今天我们要讲的例子是一个非常简单的神经网络,我们将用它来学习逻辑异或方程(XOR equation)。
同时,我也在Scrimba上创建了一个交互式屏幕录像。你也可以通过观看视频来学习本教程。(https://scrimba.com/casts/cast-1980
在开始编程之前,让我们先快速浏览神经网络的一些基本概念。

image

神经网络的第一个模块,是神经元。
神经元类似一个函数,你输入一些值,它就会输出返回值。
神经元有各种不同的类型。我们的神经网络将用到sigmoid神经元(https://en.wikipedia.org/wiki/Sigmoid_function ),它能将任何输入的给定值压缩至0到1之间。
下图中的圆圈就代表一个sigmoid神经元。它的输入值是5,输出值是1。箭头则代表的是神经元的突触,用来连接神经网络中其它层的神经元。

image

为什么会有一个红色的数字5呢?它是连接到神经元的三个突触(左边3个箭头)的值之和。
在最左边,我们看到有两个值与所谓的偏差值进行了加法运算。数值1和0是绿色的,而偏差值-2是棕色的。
首先,两个输入值与他们的权重分别相乘,权重就是蓝色数字7和3。
然后,我们把上述运算结果和偏差值加起来,所得的结果是5,对应红色数字。这个红色数字就是我们人工神经元的输入值。

image

由于我们的神经元是sigmoid神经元,它会将任何值压缩到0到1的区间范围内,所以输出值被压缩到1。
如果将这些神经元的网络连接起来,就形成了一个神经网络。通过神经元间的突触连接,从输入到输出进行正向传播。如下图所示:

image

神经网络的目标是训练其泛化能力,例如识别手写的数字或者垃圾邮件。做到好的泛化重要的是通过神经网络找到合适的权重和偏差值,如上述例子中的蓝色和棕色数字。
当训练神经网络时,我们只需要加载大量示例数据,如手写的数字,然后让神经网络来预测正确的数字。
在每次预测后,你需要计算预测的偏差程度,然后调整权重和偏差值使得神经网络在下一次运算中可以预测的更加准确,这种学习过程被称为反向传播。如此重复上千次,你的神经网络很快会精于泛化。
本教程不包括反向传播的工作原理介绍,但是我找到了3个好的教程帮助大家理解:
分步介绍反向传播案例-作者:Matt Mazur
https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/
神经网路骇客指南-作者:Andrej Karpathy
http://karpathy.github.io/neuralnets/
神经网络和深度学习-作者:Michael Nielsen
http://neuralnetworksanddeeplearning.com/chap1.html

image

现在,你应该已经对神经网络有了基础概念,那就让我们进入代码部分吧。

1.创建神经网络层

在synaptic中我们使用new layer()函数来创建。函数中传递的数字表示的是每一层会有多少个神经元。

image

接下来我们将这些层进行连接并实例化一个神经网络,代码如下,

image

这是一个2-3-1结构的神经网络,可视化表示如下:

image

2.训练神经网络

image

我们共进行了20,000次的训练,每一次都进行四次正向传播和反向传播运算,分别传递四个可能的输入到神经网络:[0,0] [0,1] [1,0] [1,1]。
我们从myNetwork.activate([0,0])激活函数开始,[0,0]是神经网络的输入值,这个过程是正向传播,也被称为激活网络。在每一次正向传播后我们需要做一次反向传播,从而更新神经网络的权重和偏差值。

image

learningRate是一个常数,用来告诉神经网络每次应该对权重值进行多大程度的调整。第二个参数0表示的是当输入为[0,0]时,正确的输出参数是0.
然后,神经网络将预测值和真实值进行对比,来判断预测是否正确。
它将比较的结果作为调整权重和偏差值的基础,以便下次的预测可以更加准确。
在执行这个过程20,000次后,我们可以通过传递四个可能的值输入到激活网络,从而判断目前神经网络的预测情况:

image

如果我们将这些值四舍五入到最近的整数,就将得到异或方程的正确结果。万岁!

image
image

原文发布时间为:2017-09-21
本文作者:Per Haiald Borgen
本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

相关文章
|
2天前
|
存储 安全 物联网
浅析Kismet:无线网络监测与分析工具
Kismet是一款开源的无线网络监测和入侵检测系统(IDS),支持Wi-Fi、Bluetooth、ZigBee等协议,具备被动监听、实时数据分析、地理定位等功能。广泛应用于安全审计、网络优化和频谱管理。本文介绍其安装配置、基本操作及高级应用技巧,帮助用户掌握这一强大的无线网络安全工具。
24 9
浅析Kismet:无线网络监测与分析工具
|
1月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
71 32
|
1月前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。ACL 可应用于路由器、防火墙等设备,通过设定规则控制访问。其类型包括标准、扩展、基于时间和基于用户的ACL,广泛用于企业网络和互联网安全中,以增强安全性、实现精细管理和灵活调整。然而,ACL 也存在管理复杂和可能影响性能的局限性。未来,ACL 将趋向智能化和自动化,与其他安全技术结合,提供更全面的安全保障。
100 4
|
1月前
|
存储 数据可视化 API
重磅干货,免费三方网络验证[用户系统+CDK]全套API接口分享教程。
本套网络验证系统提供全面的API接口,支持用户注册、登录、数据查询与修改、留言板管理等功能,适用于不想自建用户系统的APP开发者。系统还包含CDK管理功能,如生成、使用、查询和删除CDK等。支持高自定义性,包括20个自定义字段,满足不同需求。详细接口参数及示例请参考官方文档。
|
1月前
|
存储 网络协议 定位技术
OSPF路由汇总:优化网络的强大工具
OSPF路由汇总:优化网络的强大工具
65 1
|
1月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
147 5
|
2月前
|
网络协议 安全 Linux
网络工具ping的使用方式
【10月更文挑战第19天】网络工具ping的使用方式
123 6
|
2月前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
3月前
|
网络协议 开发者 Python
网络编程小白秒变大咖!Python Socket基础与进阶教程,轻松上手无压力!
在网络技术飞速发展的今天,掌握网络编程已成为开发者的重要技能。本文以Python为工具,带你从Socket编程基础逐步深入至进阶领域。首先介绍Socket的概念及TCP/UDP协议,接着演示如何用Python创建、绑定、监听Socket,实现数据收发;最后通过构建简单的聊天服务器,巩固所学知识。让初学者也能迅速上手,成为网络编程高手。
83 1
|
4月前
|
域名解析 运维 监控
网络故障排查的常用工具与方法:技术深度解析
【8月更文挑战第20天】网络故障排查是一项复杂而重要的工作,需要网络管理员具备扎实的网络知识、丰富的实践经验和灵活的问题解决能力。通过掌握常用工具和方法,遵循科学的排查流程,可以显著提高故障排查的效率和准确性。希望本文能为读者在网络故障排查方面提供有益的参考和启示。

热门文章

最新文章