原标题:推荐 :手把手教你用Python创建简单的神经网络(附代码)

作者: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)方面积累有一定的经验。

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。

责任编辑:

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

  1. python正确的输入语句_手把手教你在python中如何使用while True语句

    在学习过程中,经常能遇到采用while True的用法.下面以一个例子进行说明: 建立一个用户登录系统,用户输入用户名和密码,如果正确就可以进入系统. 1.我自己最开始的写法:d = {} #数据库字 ...

  2. python网页爬虫循环获取_手把手教你用 Python 搞定网页爬虫

    原标题:手把手教你用 Python 搞定网页爬虫 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑性并且最容易获得的 ...

  3. python爬虫爬取房源_手把手教你用Python网络爬虫爬取新房数据

    项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以「惠民之家」 ...

  4. python处理时间序列非平稳_手把手教你用Python处理非平稳时间序列

    简介 预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,预测一只股票在纽约证券交易所交易的价格--这些问题都有什么共同点? 它们都属于时间序列数据的范畴!如果没有"时间" ...

  5. 如何用python抓取qq音乐_手把手教你使用Python抓取QQ音乐数据(第三弹)-阿里云开发者社区...

    [一.项目目标] 通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 通过手把手教你使用Python抓取QQ音乐 ...

  6. python控制灯泡_人工智能应用-手把手教你用Python硬件编程实现打开或关闭电灯泡...

    之前我们已经给广大爱好者或程序员朋友们,带来了硬件版的或者说物联网版本的Hello World C++Builder版.Delphi.Visual Basic.Net等的程序源码和教学资料,让大家对硬 ...

  7. python金融量化风险_【手把手教你】Python量化策略风险指标

    如何衡量一个量化策略的好坏?一是比较稳定的收益,二是有严谨的回测,三是有清晰的逻辑.--刘富兵 引言 尽管过去不能代表未来,通过历史回测来评估量化策略仍然是量化投资非常重要的一环.量化回测过程中常用到 ...

  8. python 函数修饰器 父类_手把手教你学python第十四讲(函数装饰器,super用法和时间处理)...

    文中有些字在图中是因为每篇文章最多100张图片,我把有的小图片和文字一起截图了,文中所有的引用都会标出原文网址,除此以外都是作者原创. 有时候会在文章最前或者最后补充一些知识或者把前面说的有问题的地方 ...

  9. python图片分类技术介绍_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)!...

    介绍 你正在处理图像数据吗?我们可以使用计算机视觉算法来做很多事情:对象检测 图像分割 图像翻译 对象跟踪(实时),还有更多-- 这让我思考--如果一个图像中有多个对象类别,我们该怎么办?制作一个图像 ...

最新文章

  1. MATLAB中的ind2vec和vec2ind函数
  2. Book Review 《构建之法》-2
  3. 一步一步学Linq to sql(七):并发与事务
  4. 获取linux详细信息,Linux 获取网口详细信息
  5. 【报告分享】中国隐私计算产业发展报告(2020-2021).pdf(附下载连恶疾)
  6. jsf集成spring_JSF Spring Hibernate集成示例教程
  7. 个人经历 | 聊聊我的安全成长之路
  8. cnpack导致view快捷键失灵。
  9. 惠普m128fn中文说明书_惠普m128fp使用方法
  10. 考研英语前缀总结·十五
  11. 【Ajax+】爬去今日头条图片
  12. html文件怎么在wps打开是乱码,wps上打开Excel文件是乱码
  13. pyscripter与python的关系_Codecademy Python和Pyscripter提供错误消息
  14. 人工智能一路狂飙现隐忧 过高预期恐催泡沫
  15. 全球与中国板上芯片LED行业发展规模及投资前景预测报告2022-2028年
  16. 小老板巧用信用卡 透支妙获现金流
  17. 《论语》原文及其全文翻译 学而篇13
  18. argox打码机的pplb指令开发
  19. 国内邮箱免费邮箱注册哪个好?
  20. 样本方差分母为什么是n-1?——无偏估计

热门文章

  1. linux cache lru回收,LRU cache 算法
  2. ubuntu mysql 驱动_怎么在Ubuntu下为MySQL添加ODBC驱动?
  3. 人工智能到底是啥_人工智能的本质究竟是什么?
  4. spring 源码_spring源码系列(一)——spring循环引用
  5. 关于Android加载的优化
  6. 用实例说明Spark stage划分原理
  7. go swagger
  8. 设计模式-结构性模式
  9. 十步完全理解 SQL
  10. UIImageView动画