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

神经网络(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

inputsinputs= 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之间。

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

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

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

  1. python界面设计-手把手教你用Python设计一个简单的命令行界面

    原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...

  2. Python安装教程-手把手教你安装python

    python介绍和安装步骤 1. Python简介 Python是一种广泛使用的解释型.高级和通用的编程语言.Python支持多种编程范型,包括函数式.指令式.结构化.面向对象和反射式编程.它拥有动态 ...

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

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

  4. 怎么退出python虚拟环境_手把手教你进行Python虚拟环境配置

    /1 前言/ 咱们今天就来说一下Python的虚拟环境,可能有的小伙伴会疑惑,Python的虚拟环境有什么用呢?接下来我们一起来探讨一下. /2 虚拟环境的作用/ 咱们今天就来说一下Python的虚拟 ...

  5. python复工_手把手教你使用Python批量创建复工证明-阿里云开发者社区

    /1 前言/ 受疫情影响,2020年2月份.3月份企业复工需为员工开具复工证明.因本公司人数较多,复制粘贴工作量巨大,特此为行政同事写此小工具,现与诸位共享. /2 目标/ 1.实现批量将 Excel ...

  6. python朗读网页-手把手教你用 Python 来朗读网页

    是不是有的时候懒得自己看新闻?那么不妨试试用 Python 来朗读给你听吧. 网页转换成语音,步骤无外乎: 网页正文识别,获取到正文的文本内容: 文本转语音,通过接口将文本转换成语音文件: 语音文件的 ...

  7. qq 音乐 python 登录_手把手教你使用Python抓取QQ音乐数据(第一弹)

    [一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二.需要的库] 主要涉及的库有:requests.json ...

  8. python图像分类_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)...

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

  9. 手把手教你安装深度学习软件环境(附代码)

    来源:机器之心 本文长度为2800字,建议阅读5分钟. 本文向你解释如何在一台新装的 Ubuntu 机器上安装 Python 和 Nvidia 硬件驱动.各类库和软件包. 为了进行强化学习研究,我最近 ...

最新文章

  1. 2017年中国人工智能产业专题研究报告(完整版)
  2. 攀枝花市大数据中心落户东区
  3. iOS设计模式 - 组合
  4. pytorch每次迭代训练前都重新对数据集进行采样形成平衡数据集
  5. 【C语言重点难点精讲】C语言指针
  6. Element ui select同时获取value和label的值
  7. es6 数组合并_那些会用到的 ES6 精粹(包邮送书)
  8. 【转】adb控台中Permission denied的解决方案
  9. [转] linux操作系统下c语言编程入门--基础知识
  10. mysql sumif优化,sumif函数的使用方法
  11. python合并大量ts文件_Python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频
  12. CI框架初识-视图渲染
  13. 华硕服务器主板那个系列好,华硕主板型号性价比排行 华硕主板那个性价最好用...
  14. meson test 的 --test-args 参数
  15. PhpSpreadsheet中文文档 | 简介
  16. 神经网络控制与matlab仿真,神经网络matlab代码程序
  17. SaaS多租户管理系统是什么?SaaS多租户平台应用管理功能有哪些?
  18. ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.11
  19. 【Linux】软件包管理器yum和编辑器vim(部分动图演示)
  20. python 线程退出方法

热门文章

  1. LeetCode 458. 可怜的小猪(信息论方法)
  2. 机器学习之监督学习(四)——贝叶斯分类器
  3. 可变、不可变数据类型
  4. Flink1.6系列之—数据流编程模型
  5. 3.1.4 抽象类与归一化
  6. cacti安装后修改说明
  7. 很久的东西-也有价值
  8. Bailian2932 期末考试第三题——最大最小数之差【文本+进制】
  9. HDU3783 ZOJ【文本处理】
  10. POJ2940 HDU1489 UVA11054 Wine Trading in Gergovia【Ad Hoc】