使用python创建自己的第一个神经网络模型吧!

神经网络(NN),也被称为人工神经网络(ANN),是机器学习领域中学习算法的子集,大体上借鉴了生物神经网络的概念。目前,神经网络在计算机视觉、自然语言处理等领域应用广泛。德国资深机器学习专家Andrey Bulezyuk说到,“神经网络正在彻底改变机器学习,因为它们能够有效地模拟各种学科和行业的复杂抽象,且无需太多人工参与。”
大体上,人工神经网络基本包含以下组件:

  • 接收数据并传递数据的输入层(input layer);
  • 隐藏层(hidden layer);
  • 输出层(output layer);
  • 层与层之间的权重(weight);
  • 每个隐藏层使用的激活函数(activation function);

       在本文教程中,使用的是简单的Sigmoid激活函数,但注意一点,在深层神经网络模型中, sigmoid激活函数一般不作为首选,原因是其易发生梯度弥散现象。
       此外,人工神经网络有几种不同类型的神经网络,比如前馈神经网络、卷积神经网络及递归神经网络等。本文将以简单的前馈或感知神经网络为例,这种类型的人工神经网络是直接从前到后传递数据的,简称前向传播过程。
       而训练前馈神经元通常需要反向传播算法,这就需要为网络提供相应的输入和输出集。当输入数据被传输到神经元时,它会经过相应的处理,并将产生的输出传输给下一层。
下图简单展示了一个神经网络结构:


       此外,理解神经网络如何工作的最好方法是学习如何在不使用任何工具箱的前提下从头开始构建一个。在本文中,我们将演示如何使用Python创建一个简单的神经网络。

问题

       下表显示了我们将解决的问题:


       我们将训练神经网络,以便在提供一组新数据时可以预测出正确的输出值。
       从表中看到,输出的值始终等于输入节中的第一个值。因此,我们可以期望新情形的输出(?)值为1。
       下面让我们看看是否可以使用一些Python代码来得到相同的结果。

创建神经网络类|NeuralNetwork Class

       我们将在Python中创建一个NeuralNetwork类来训练神经元以提供准确的预测,该类还包含其他辅助函数。我们不会将神经网络库用于创建这个简单的神经网络示例中,但会导入基本的Numpy库来协助计算。
       Numpy库是处理数据的一种基本库,它具有以下四种重要的计算方法:

  • EXP——用于产生所述自然指数;
  • array——用于生成矩阵;
  • dot——用于矩阵相乘;
  • random——用于生成随机数;

应用Sigmoid函数

       我们将使用Sigmoid函数,它绘制出一个“S”形曲线,将其作为本文创建的神经网络的激活函数。


       此函数可以将任何值映射到0到1之间,并能帮助我们规范化输入的加权和。
       此后,我们将创建Sigmoid函数的导数,以帮助计算权重的基本调整。
       可以使用Sigmoid函数的输出来生成其导数。例如,如果输出变量是“x”,那么它的导数将是x *(1-x)。

训练模型

       训练模型意味着我们将教导神经网络进行准确预测的阶段。每个输入都有一个权重(weights)——正或负的,这意味着具有大值正权重或大值负权重的输入将多所得到的输出有更大地影响。
       注意,模型训练最初时,每个权重的初始化都是随机数。
       以下是本文构建的神经网络示例问题中训练过程:

  • 1.从训练数据集中获取输入,根据它们的权重进行一些调整,并通过计算神经网络输出的方法来一层一层的传输;
  • 2.计算反向传播的错误率。在这种情况下,它是神经元预测得到的输出与训练数据集的预期输出之间的误差;
  • 3.根据得到的误差范围,使用误差加权导数公式进行一些小的权重调整;
  • 4.将此过程重复15,000次,在每次迭代过程中,同时处理整个训练集;

       在这里,我们使用“.T”函数对矩阵求偏置。因此,数字将以这种方式存储:


最终,神经元的权重将针对所提供的训练数据进行优化。因此,如果神经网络的输出与期望的输出一致时,说明训练完成,可以进行准确的预测,这就是反向传播的方式。

封装

       最后,初始化NeuralNetwork类后并运行整个程序,以下是如何在Python项目中创建神经网络的完整代码:

import numpy as npclass NeuralNetwork():def __init__(self):# 设置随机数种子np.random.seed(1)# 将权重转化为一个3x1的矩阵,其值分布为-1~1,并且均值为0self.synaptic_weights = 2 * np.random.random((3, 1)) - 1def sigmoid(self, x):# 应用sigmoid激活函数return 1 / (1 + np.exp(-x))def sigmoid_derivative(self, x):#计算Sigmoid函数的偏导数return x * (1 - x)def train(self, training_inputs, training_outputs, training_iterations):# 训练模型for iteration in range(training_iterations):# 得到输出output = self.think(training_inputs)# 计算误差error = training_outputs - output# 微调权重adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))self.synaptic_weights += adjustmentsdef think(self, inputs):# 输入通过网络得到输出   # 转化为浮点型数据类型inputs = inputs.astype(float)output = self.sigmoid(np.dot(inputs, self.synaptic_weights))return outputif __name__ == "__main__":# 初始化神经类neural_network = NeuralNetwork()print("Beginning Randomly Generated Weights: ")print(neural_network.synaptic_weights)#训练数据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# 开始训练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函数是非线性函数,这点误差是可以接受的。
       此外,本文只使用了一层神经网络来执行简单的任务。如果我们将数千个这些人工神经网络集合在一起会发生什么情况呢?我们可以100%模仿人类思维吗?答案是肯定的,但是目前实现起来是比较困难的,只能说是十分相近。对此感兴趣的读者可以阅读与深度学习相关的资料。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度现场面试:JVM+算法+Redis+数据库!(三面)| CSDN博文精选

戳蓝字“CSDN云计算”关注我们哦!作者 | 中琦2513转自 | CSDN博客责编 | 阿秃百度一面(现场)自我介绍Java中的多态为什么要同时重写hashcode和equalsHashmap的原理Hashmap如何变线程安全,每种方式的优缺点垃圾回收机制…

语义分割概念及应用介绍

近年来,以深度学习为中心的机器学习技术引起了人们的关注。比如自动驾驶汽车已经逐渐成为可能,但在整个深度学习过程,需要算法识别和学习作为原始数据提供的图像,在这一过程中,应用到了语义分割技术。下面让我们来看看…

(需求实战_终章_08)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200208221057640.png?x-oss-processimage/watermark,type_Z 首先,confirm确认机制和return确认机制都是相对于生产者而言的, 生产者发送消息一般会有消息发送成功和消息发送失败两种场景。 生产者…

新零售基础设施 看阿里巴巴如何打“地基”

经过两年探索,“新零售”从星星之火已发展到现在的燎原之势,许多原有的传统模式正在被打破,先进的智能技术和数据正在给传统的零售赋予更多的能力,带来更大的想象空间。 在2018年杭州云栖大会的电商平台专场中,阿里巴…

华为自研5G关键芯片PA:明年量产不再依赖美国;1999元!苹果发布AirPods Pro ;腾讯云勇推自研服务器“星星海”……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周两次,打卡即read更快、更全了解泛云圈精彩newsgo go go小米CC9 Pro概念图&#xff0…

Work@Alibaba 阿里巴巴的企业应用构建之路

作为一个拥有数万名员工的企业,阿里巴巴的企业信息化是怎么做的? 在上周的云栖大会上,来自阿里巴巴信息平台的资深技术专家叶建辉为大家揭开了谜底。 阿里员工是怎么工作的? 可以通过阿里巴巴这三个案例了解: 人脸门禁。今年云…

windows server 2019 服务器搭建的方法步骤(图文)

一、windows server 2019 安装 Vmware 下安装 windows server 2019 。 二、服务器配置 1、 先启用远程功能 右键点击【此电脑】–【属性】,进入“【控制面板\系统和安全\系统】”,点击-【远程设置】 计算机找不到就使用【winE】快捷键 2、在“远程…

传统企业装上“智慧大脑” 看阿里巴巴如何实践AI赋能

“我们找了8位专业律师,和我们的AI机器人做了一个对比,我们的召回率与8位律师相当,但我们的准确率更高些”。 在不久前刚结束的杭州云栖大会上,来自阿里巴巴信息平台事业部的资深算法专家李波,正在向观众展示阿里巴巴…

如何交付机器学习项目:一份机器学习工程开发流程指南

随着机器学习(ML)成为每个行业的重要组成部分,对机器学习工程师(MLE)的需求急剧增长。MLE需要将机器学习技能与软件工程专业知识相结合,为特定应用程序找到高性能的模型,并应对出现的实施挑战—…

国际顶级学界业界大咖云集,9 场技术论坛布道,2019 嵌入式智能国际大会强势来袭!...

2019 嵌入式智能国际大会即将来袭!购票官网:https://dwz.cn/z1jHouwE2019年12月6日-8日,2019嵌入式智能国际大会将在深圳华侨城洲际大酒店举行。本次大会由哈尔滨工业大学(深圳)、清华大学国际研究生院、CSDN、嵌入式视…

qtcreator下拉列表怎么制作_设置EXCEL动态下拉菜单,只需要一个组合键,新手也能快速掌握...

操作版本:OFFICE365在EXCEL制作一级下拉菜单有4种方法,你掌握几种?一文中,我提到了一级下拉菜单的制作方法,其中用公式法来制作下拉菜单可以实现内容增减后下拉菜单的内容也自动增减,这个方法涉及OFFSET函数…

使用Numpy和Opencv完成图像的基本数据分析(Part III)

引言 本文是使用python进行图像基本处理系列的第三部分,在本人之前的文章里介绍了一些非常基本的图像分析操作,见文章《使用Numpy和Opencv完成图像的基本数据分析Part I》和《使用Numpy和Opencv完成图像的基本数据分析 Part II》,下面我们将…

Microsoft Windows Server 2019 1809 iso镜像 企业版本

企业版本 标准版本 默认页面,关闭即可 参考链接: Microsoft Windows Server 2019 1809 iso镜像 http://www.ddooo.com/softdown/131736.htm

【程序猿必备】数据结构与算法精选面试题

有很多计算机科学技术专业的毕业生和程序员申请在Uber和Netflix这样的初创公司、谷歌和阿里巴巴这样的大公司以及Infosys或Luxsoft等以服务为基础的公司从事编程、编码和软件开发工作,但他们中的许多人都不知道,当你申请这些公司的职位时,你会…

技术干货 | 详谈AI芯片分类和关键技术

戳蓝字“CSDN云计算”关注我们哦!作者 | 架构师技术联盟责编 | 阿秃人工智能芯片目前有两种发展路径:一种是延续传统计算架构,加速硬件计算能力,主要以 3 种类型的芯片为代表,即 GPU、 FPGA、 ASIC,但 CPU依…

AI+服务 阿里巴巴如何做智能服务转型?

AI下围棋、AI写作文、AI看病……在智能时代,通过新技术的赋能,行业已经发展到了一个新的高度。那么在服务领域,尤其是企业服务中,智能技术的加入会带来哪些新的想象? 在阿里巴巴,智能服务已经成为企业发展…

tfidf关键词提取_基于TextRank提取关键词、关键短语、摘要,文章排序

之前使用TFIDF做过行业关键词提取,TFIDF仅从词的统计信息出发,而没有充分考虑词之间的语义信息。TextRank考虑到了相邻词的语义关系,是一种基于图排序的关键词提取算法。TextRank的提出TextRank由Mihalcea与Tarau于EMNLP04提出来,…

AliOS Things手势识别应用演示

1. 概述 手势识别作为一种辅助的人机交互方式,在人机脱离的场景下可以提供方便的交互体验。本文介绍基于AliOS Things STM32F413H Discovery开发板实现手势交互功能的演示。 2. 环境搭建 开发板:STM32F413H Discovery(附带麦克风阵列板&a…