作者:Michael J.Garbade

翻译:陈之炎

校对:丁楠雅

本文共2000字,建议阅读9分钟。
本文将为你演示如何创建一个神经网络,带你深入了解神经网络的工作方式。

了解神经网络工作方式的最佳途径莫过于亲自创建一个神经网络,本文将演示如何做到这一点。

神经网络(NN)又称人工神经网络(ANN),是机器学习领域中基于生物神经网络概念的学习算法的一个子集。

拥有五年以上经验的德国机器学习专家Andrey Bulezyuk声称:“神经网络正在彻底改变机器学习,因为它们能够在广泛的学科和行业中为抽象对象高效建模。”

人工神经网络基本上由以下组件组成:

  • 输入层:接收并传递数据

  • 隐藏层

  • 输出层

  • 各层之间的权重

  • 每个隐藏层都有一个激活函数。在这个简单的神经网络Python教程中,我们将使用Sigmoid激活函数。

神经网络有多种类型。在本项目中,我们将创建前馈或感知神经网络。这种类型的ANN直接将数据从前向后传递。

前馈神经元的训练往往需要反向传播,它为网络提供了相应的输入和输出集。当输入数据被传送到神经元时,经过处理后,产生一个输出。

下面的图表显示了一个简单的神经网络的结构:

了解神经网络如何工作的最佳方法是学习如何从头开始构建神经网络(而不是采用任何库)。

在本文中,我们将演示如何利用Python编程语言创建一个简单的神经网络。

问题


如下是一个展示问题的表格。

我们将提供一个新的数据集,利用它训练神经网络,从而能够预测正确的输出值。

正如上表所示,输出值总是等于输入部分中的第一个值。因此,我们期望输出的值为1。

让我们看看是否可以使用Python代码来得出相同的结果(你可以在本文末尾仔细阅读这个项目的代码,然后再继续阅读本文)。

创建一个NeuralNetwork类


我们将用Python创建一个NeuralNetwork类来训练神经元,以期给出准确的预测。这个类还会有其他的帮助函数。

即使我们不会在这个简单的神经网络示例中使用神经网络库,我们也将导入numpy库来辅助计算。

numpy库提供了以下四种重要方法:

  • exp—用于生成自然指数

  • array—用于生成矩阵

  • dot—用于矩阵相乘

  • random—用于生成随机数。请注意,我们将生成随机数,以确保它们的有效分布。

1. 应用Sigmoid函数


我们将使用Sigmoid函数,来绘制一个特征“S”型曲线,作为神经网络的激活函数。

此函数可以将任何值映射到0到1之间的值,它将有助于我们对输入的加权和归一化。

此后,我们将创建Sigmoid函数的导数,以帮助计算权重的调整参数。

可以利用Sigmoid函数的输出来生成它的导数。例如,如果输出变量为“x”,则其导数为x*(1-x)。

2. 训练模型


这是我们教神经网络做出准确预测的阶段。每个输入都有一个权重-可为正值或负值。这意味着:有较大的正权重或负权重的输入会对结果的输出产生更大的影响。请记住,我们最初是通过为每个随机数分配一个权重后开始的。

下面是这个神经网络示例的训练过程:

第一步:从训练数据集中提取输入,根据训练数据集的权重进行调整,并通过一种计算神经网络输出的方法对其进行筛选。

第二步:计算反向传播错误率。在这种情况下,它是神经元的预测输出与训练数据集的期望输出之间的差异。

第三步:利用误差加权导数公式,根据所得到的误差范围,进行了一些较小的权值调整。

第四步:对这一过程进行15000次迭代。在每次迭代中,整个训练集被同时处理。

我们使用“.T”函数将矩阵从水平位置转换为垂直位置。因此,数字将以如下方式存储:

最终,神经元的权重将根据所提供的训练数据进行优化。随后,如果让神经元考虑一个新的状态,与先前的状态相同,它便可以作出一个准确的预测。这就是反向传播的方式。

打包运行


最后,NeuralNetwork类初始化成功后,可以运行代码了。

下面是如何在Python项目中创建神经网络的完整代码:

import numpy as np

class NeuralNetwork():

def __init__(self):

# seeding for random number generation

np.random.seed(1)

#converting weights to a 3 by 1 matrix with values from -1 to 1 and mean of 0

self.synaptic_weights = 2 * np.random.random((3, 1)) - 1

def sigmoid(self, x):

#applying the sigmoid function

return 1 / (1 + np.exp(-x))

def sigmoid_derivative(self, x):

#computing derivative to the Sigmoid function

return x * (1 - x)

def train(self, training_inputs, training_outputs, training_iterations):

#training the model to make accurate predictions while adjusting weights continually

for iteration in range(training_iterations):

#siphon the training data via  the neuron

output = self.think(training_inputs)

#computing error rate for back-propagation

error = training_outputs - output

#performing weight adjustments

adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))

self.synaptic_weights += adjustments

def think(self, inputs):

#passing the inputs via the neuron to get output

#converting values to floats

inputs = inputs.astype(float)

output = self.sigmoid(np.dot(inputs, self.synaptic_weights))

return output

if __name__ == "__main__":

#initializing the neuron class

neural_network = NeuralNetwork()

print("Beginning Randomly Generated Weights: ")

print(neural_network.synaptic_weights)

#training data consisting of 4 examples--3 input values and 1 output

training_inputs = np.array([[0,0,1],

[1,1,1],

[1,0,1],

[0,1,1]])

training_outputs = np.array([[0,1,1,0]]).T

#training taking place

neural_network.train(training_inputs, training_outputs, 15000)

print("Ending Weights After Training: ")

print(neural_network.synaptic_weights)

user_input_one = str(input("User Input One: "))

user_input_two = str(input("User Input Two: "))

user_input_three = str(input("User Input Three: "))

print("Considering New Situation: ", user_input_one, user_input_two, user_input_three)

print("New Output data: ")

print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))

print("Wow, we did it!")

运行代码之后的输出:

这样,我们便成功地创建了一个简单的神经网络。

神经元首先给自己分配一些随机权重,接着,利用训练实例进行了自我训练。

之后,如果出现新的状态[1,0,0],则它得出的数值为0.9999584。

还记得我们想要的正确答案是1吗?

这个数值非常接近,Sigmoid函数输出值在0到1之间。

当然,在这个例子中,我们只使用一个神经元网络来完成简单的任务。如果我们把几千个人工神经网络连接在一起,情况将会是怎样呢?我们能不能完全模仿人类的思维方式呢?

作者简介:

Michael J.Garbade博士是洛杉矶区块链教育公司(LiveEdu)的创始人和首席执行官。它是世界领先的教育培训平台,为学员培训实用技能,以期在未来的技术领域(包括机器学习)创造完整的产品。

原文标题:

How to Create a Simple Neural Network in Python

原文链接:

https://www.kdnuggets.com/2018/10/simple-neural-network-python.html

译者简介

陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。业余时间喜爱翻译创作,翻译作品主要有:IEC-ISO 7816、伊拉克石油工程项目、新财税主义宣言等等,其中中译英作品“新财税主义宣言”在GLOBAL TIMES正式发表。能够利用业余时间加入到THU 数据派平台的翻译志愿者小组,希望能和大家一起交流分享,共同进步

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

独家 | 手把手教你用Python创建简单的神经网络(附代码)相关推荐

  1. python编程例子 输入 输出-推荐 :手把手教你用Python创建简单的神经网络(附代码)...

    原标题:推荐 :手把手教你用Python创建简单的神经网络(附代码) 作者:Michael J.Garbade:翻译:陈之炎:校对:丁楠雅 本文共2000字,9分钟. 本文将为你演示如何创建一个神经网 ...

  2. python简单代码-手把手教你用Python创建简单的神经网络(附代码)

    了解神经网络工作方式的***途径莫过于亲自创建一个神经网络,本文将演示如何做到这一点. 神经网络(NN)又称人工神经网络(ANN),是机器学习领域中基于生物神经网络概念的学习算法的一个子集. 拥有五年 ...

  3. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  4. python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  5. 独家 | 手把手教你组织数据科学项目!(附代码)

    作者:kdnuggets 翻译:和中华 校对:丁楠雅 本文约4200字,建议阅读10分钟. 本文介绍了一个工具可以帮助迅速构建一个标准但灵活的数据科学项目结构,便于实施和分享数据科学工作. 由Driv ...

  6. python人脸识别门禁系统毕设_开源|手把手教你用Python进行人脸识别(附源代码)...

    原标题:开源|手把手教你用Python进行人脸识别(附源代码) 全球人工智能 来源:Github 翻译:黄玮 想要了解目前世界上最简洁的人脸识别库吗?现在小编带大家来学习使用Python语言或命令行进 ...

  7. 独家 | 手把手教你用Python 3创建用于机器学习开发的Linux虚拟机(附安装教程代码)

    原文标题:How to Create a Linux Virtual Machine For Machine Learning Development With Python 3 作者:Jason B ...

  8. 独家 | 手把手教你用Python 3创建用于机器学习开发的Linux虚拟机(附安装教程代码)...

    Linux是使用Python进行机器学习开发的极佳环境.这些工具能够被简便快捷地安装,并且您可以直接开发和运行大型模型. 在本教程中,您将了解如何使用Python创建和安装用于机器学习的Linux虚拟 ...

  9. 独家 | 手把手教你用Python的Prophet库进行时间序列预测

    作者:Jason Brownlee 翻译:殷之涵 校对:吴振东 本文长度为4800字,建议阅读10+分钟 本文为大家介绍了如何在Python中使用由Facebook开发的Prophet库进行自动化的时 ...

最新文章

  1. 脑电分析系列[MNE-Python-18]| 生成模拟原始脑电数据
  2. couchdb 任意命令执行漏洞 cve-2017-12636
  3. 精密空调主要部件是干啥用的?
  4. mysql php 缓存机制_mysql数据库查询缓存原理是什么
  5. 【TypeScript系列教程07】变量声明
  6. webpack的一些plugin,怎么使用webpack对项目进行优化
  7. python画图xlable显示中文_xlabel和ylabel超出绘图区域,无法在figu中完全显示
  8. VScode远程root权限调试
  9. 2009年国家质监局公布的禁用化妆品名单
  10. 自动化运维工具-ansible入门(一)
  11. InnoDB的MVCC如何解决不可重复读和快照读的幻读,当前读用next-key解决幻读
  12. Windows 2003 从Oracle 9201 update to 9208
  13. 下载、预览PDF报错问题排查
  14. 【硬件设计】AD 生成 Gerber 文件
  15. PHP 中如何正确统计中文字数
  16. 云小课|使用SQL加密函数实现数据列的加解密
  17. C++ char类型
  18. 绘图工具Origin Pro 2022在Win10系统下的安装使用
  19. ubuntu在编译opencv3.4.1遇到[modules/calib3d/CMakeFiles/opencv_calib3d.dir/src/dls.cpp.o]错误
  20. NOI0107字符串最大跨距

热门文章

  1. 互联网学院大数据开发专业欢迎加入
  2. 最火移动端跨平台方案盘点:React Native、weex、Flutter
  3. 22.2. 表管理(Table)
  4. 数人云PaaS Innovation 2017,重新定义PaaS进化
  5. 全栈 - 20 Web 基础 网页的血肉 CSS
  6. 获取运行中的TeamViewer的账号和密码--中文版
  7. 有空间感的图片环形滚动代码
  8. 趋势畅想-搭载android系统的智能数码相机
  9. ffmpeg m4a 转pcm_FFmpeg提取视频音频python将音频转文字
  10. mysql安装源是什么_mysql官方源安装的一些问题