第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别)

本文主要是介绍第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在本文中,我们将了解单层感知器及其使用 TensorFlow 库在Python中的实现。神经网络的工作方式与我们的生物神经元的工作方式相同。

生物神经元的结构

生物神经元具有三个基本功能 

  • 接收外部信号。

  • 处理信号并增强是否需要发送信息。

  • 将信号传递给目标细胞,目标细胞可以是另一个神经元或腺体。

同样,神经网络也能发挥作用。

机器学习中的神经网络

机器学习中的神经网络

什么是单层感知器?

它是最古老且最早引入的神经网络之一。它是由弗兰克·罗森布拉特 (Frank Rosenblatt)1958 年提出的。感知器也称为人工神经网络。感知器主要用于计算AND、OR、NOR等具有二进制输入和二进制输出的逻辑门。

感知器的主要功能是:-

  • 从输入层获取输入

  • 对它们进行加权并总结。

  • 将总和传递给非线性函数以产生输出。

单层神经网络

这里的激活函数可以是sigmoid、tanh、relu等任何函数。根据需求,我们将选择最合适的非线性激活函数以产生更好的结果。现在让我们实现一个单层感知器。

单层感知器的实现

现在让我们使用 TensorFlow 库使用“MNIST”数据集实现一个单层感知器。

Step1:导入必要的库

  • Numpy – Numpy 数组非常快,可以在很短的时间内执行大量计算。

  • Matplotlib – 该库用于绘制可视化效果。

  • TensorFlow – 这是一个用于机器学习和人工智能的开源库,提供一系列函数以通过单行代码实现复杂的功能。

Python3

import numpy as np
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt# 开启内联绘图
%matplotlib inline

步骤 2:现在使用导入版本的张量流中的“Keras”加载数据集。

Python3

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

这段代码导入了一些常用的Python库,包括NumPy(用于数值计算)、TensorFlow(用于深度学习)、Keras(用于构建神经网络模型)以及Matplotlib(用于绘图和数据可视化)。通过 %matplotlib inline,我们可以在Jupyter Notebook或IPython环境中直接在输出单元格中显示图形,而不需要单独的窗口。

这些库的使用使得在进行深度学习和数据可视化任务时更加方便。

步骤 3:现在显示数据集中单个图像的形状和图像。图像大小包含28*28的矩阵,训练集长度为60,000,测试集长度为10,000。

Python3

# 获取训练集的长度
len(x_train)# 获取测试集的长度
len(x_test)# 获取第一个训练图像的形状
x_train[0].shape# 显示第一个训练图像
plt.matshow(x_train[0])

这段代码执行以下操作:

  1. len(x_train) 返回训练集中样本的数量。
  2. len(x_test) 返回测试集中样本的数量。
  3. x_train[0].shape 获取第一个训练图像的形状,通常是一个28x28像素的二维数组。
  4. plt.matshow(x_train[0]) 用Matplotlib库显示第一个训练图像,可以通过该图像来查看手写数字的外观。

这些操作有助于了解MNIST数据集的规模和内容,并可以用于数据预处理和可视化。

输出:

来自训练数据集的样本图像

来自训练数据集的样本图像

步骤 4:现在标准化数据集,以便快速准确地进行计算。

Python3

# 对数据集进行标准化
x_train = x_train / 255
x_test = x_test / 255# 扁平化数据集以便进行模型构建
x_train_flatten = x_train.reshape(len(x_train), 28*28)
x_test_flatten = x_test.reshape(len(x_test), 28*28)

这段代码执行以下操作:

  1. 对训练集 x_train 和测试集 x_test 进行标准化,将像素值从0到255的范围缩放到0到1的范围,这是一种常见的数据预处理步骤。

  2. 扁平化数据集,将每个图像从一个二维数组(28x28像素)转换为一个一维数组(784个像素),以便于后续的模型构建。这是因为深度学习模型通常需要输入的是一维数据。

这些操作是为了准备数据以用于深度学习模型的训练,以便更好地处理图像数据。

第5步:构建具有单层感知的神经网络。在这里我们可以观察到,该模型是一个单层感知器,仅包含一个输入层和一个输出层,不存在隐藏层。  

Python3

model = keras.Sequential([keras.layers.Dense(10, input_shape=(784,), activation='sigmoid')
])model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy']
)model.fit(x_train_flatten, y_train, epochs=5)

这段代码执行以下操作:

  1. 创建一个Keras顺序模型,该模型包含一个具有10个神经元的全连接层(keras.layers.Dense),输入形状为(784,),激活函数为'sigmoid'。这是一个简单的神经网络模型。

  2. 编译模型,指定优化器为'adam',损失函数为'sparse_categorical_crossentropy'(适用于多类别分类问题),并选择评估指标为'accuracy'(准确度)。

  3. 使用训练数据 x_train_flatten 和相应的标签 y_train 对模型进行训练,训练周期数为5(epochs=5)。

这些操作构建了一个简单的神经网络模型,并使用训练数据对其进行了训练,以便用于多类别分类任务,例如手写数字识别。

输出:

每个时期的训练进度

在训练过程中,通常会产生一系列的训练日志,包括损失和准确度等信息。这些信息会在训练的每个周期(epoch)后显示。由于这些信息的输出取决于您的运行环境,我无法提供确切的训练输出。您可以将代码放入一个Jupyter Notebook或Python脚本中运行以查看详细的训练输出。

通常,您可以期望在每个周期的训练输出中看到损失值和准确度的变化,以便跟踪模型的训练进展。当训练完成后,您可以使用模型进行预测,并评估其性能,例如在测试数据上计算准确度。这些步骤通常会在训练后的代码中进行。如果您有特定的输出或问题,可以提供更多详细信息,以便我能够提供更具体的帮助。

步骤6:输出模型在测试数据上的准确率。

Python3

model.evaluate(x_test_flatten, y_test)

这段代码执行了模型的评估操作,使用测试数据 x_test_flatten 和相应的测试标签 y_test 来计算模型在测试数据上的性能指标。这些性能指标通常包括损失值和准确度等,用于衡量模型在测试数据上的表现。评估的结果将根据模型的性能和测试数据而异,通常以一个包含指标值的列表返回。

输出:

[损失值, 准确度]

  • 损失值 表示模型在测试数据上的损失值,通常是一个非负数,表示模型对测试数据的拟合程度。
  • 准确度 表示模型在测试数据上的准确度,通常以百分比形式表示,表示模型在测试数据中正确分类的比例。

具体的数值将根据模型的训练和测试数据集而有所不同。您可以运行这段代码以查看实际的输出结果,以便了解模型在测试数据上的性能。

这篇关于第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/367253

相关文章

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3