如何用Python创建一个简单的神经网络

简介: 如何用Python创建一个简单的神经网络
  • 原文地址:How to Create a Simple Neural Network in Python
  • 作者:Dr. Michael J. Garbade
  • 翻译:howie6879

理解神经网络如何工作的最好方式是自己动手创建一个,这篇文章将会给你演示怎么做到这一点


神经网络(NN),也称之为人工神经网络(ANN),它是机器学习领域中学习算法集合中的子集,其核心概念略似生物神经网络的概念。


拥有五年以上经验的德国机器学习专家Andrey Bulezyuk说过:神经网络正在使机器学习发生革命性的巨变,因为他们能够跨越广泛的学科和行业来高效地建模复杂的抽象。


基本上,一个ANN由以下组件构成:


  • 输入层:接受传递数据

  • 隐藏层

  • 输出层

  • 各层之间的权重

  • 每个隐藏层都会有一个精心设计的激活函数,对于此教程,我们将会使用 Sigmoid激活函数

神经网络的类型有很多,在这个项目中,我们准备创建一个前馈神经网络,此类型的ANN将会直接从前到后传递数据


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


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

10.jpg

而且,理解神经网络如何工作做好的办法就是去学习从头开始构建一个神经网络(不使用任何第三方库,作者意思应该是不使用任何机器学习库)。


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


问题


这里用表格列出了我们需要解决的问题:

11.jpg

我们将会训练一个特定的神经网络模型,当提供一组新数据的时候,使其能够准确地预测输出值。


如你在表中所见,输出值总是等于输入数据的第一个值,因此我们期望的表中输出(?)值是1。

让我们思考看看能不能使用一些Python代码来给出相同的结果(再继续阅读之前,你可以在文章末尾仔细地阅读此项目的代码)


创建一个神经网络类


我们将在Python中创建一个 NeuralNetwork类来训练神经元以提供准确的预测,该类还具有一些其他的辅助函数


尽管我们没有使用任何一个神经网络库用于这个简单的神经网络示例,我们也会导入 numpy包来协助计算。


该库带有以下四个重要方法:


  • exp:用于生成自然指数

  • array:用于生成矩阵

  • dot:用于乘法矩阵

  • random:用于生成随机数(注意:我们将对随机数进行播种以确保其有效分布)

应用 Sigmoid 激活函数


该神经网络将使用Sigmoid function作为激活函数,其绘制了一个典型的 S形曲线:

12.jpg

此函数可以将任意值映射到区间0~1之间,它将帮助我们规范化输入值的和权重乘积之和。

随后,我们将创建Sigmoid函数的导数来帮助计算机对权重进行必要的调整。


一个Sigmoid函数的输出可以用来生成它的导数,例如,如果输出变量是 X,那么它的导数将是 x*(1-x)


推导过程如下:

13.jpg

训练模型


在这个阶段我们将教导神经网络进行准确预测,每个输入都有一个权重 - 正面或负面。

这意味着,如果输入包含一个大的正面或者负面的权重数值将会更多地影响输出值

请记住,在最开始阶段我们会对每个权重分配一个随机值


下面是我们在这个神经网络示例问题中使用的训练过程:


  • 从训练集获取输入数据,根据他们的权重进行调整,然后通过计算人工神经网络输出的方法将它们抽取出来

  • 我们计算了反向传播的错误率,在这种情况下,它是神经元预测值和实际期望值之间的差异

  • 根据误差程度,我们利用Error Weighted Derivative formula对权重进行微调

  • 我们对这个过程重复15,000次,在每次迭代中都会同时处理整个训练集

我们使用 .T函数将矩阵从水平位置转换到垂直位置,因此数据会被这样排序:

14.jpg

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(

我们设法创建了一个简单的神经网络。


这个神经网络开始于自己给自己分配了一些随机的权重,此后,它使用训练数据训练自己。

因此,如果出现新情况[1,0,0],则其值为0.9999584。


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


那么,这就非常接近了 —— 思考下 S形函数的输出值在0到1之间。


当然,我们只使用一个神经网络来执行这个简单的任务,如果我们连接数千个人工神经网络起来会怎样?我们能否100% 地模仿人类大脑的工作方式么?


如果你有任何疑问,请留言,点击阅读原文查看英文版

相关文章
|
16天前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
46 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
15天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
66 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
15天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
15天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
44 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
11天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
23 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
7天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
33 5
|
10天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
11天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
31 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
14天前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
37 3
|
14天前
|
数据采集 JSON API
🎓Python网络请求新手指南:requests库带你轻松玩转HTTP协议
本文介绍Python网络编程中不可或缺的HTTP协议基础,并以requests库为例,详细讲解如何执行GET与POST请求、处理响应及自定义请求头等操作。通过简洁易懂的代码示例,帮助初学者快速掌握网络爬虫与API开发所需的关键技能。无论是安装配置还是会话管理,requests库均提供了强大而直观的接口,助力读者轻松应对各类网络编程任务。
59 3
下一篇
无影云桌面