第三章:人工智能深度学习教程-基础神经网络(第二节-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 来计算模型在测试数据上的性能指标。这些性能指标通常包括损失值和准确度等,用于衡量模型在测试数据上的表现。评估的结果将根据模型的性能和测试数据而异,通常以一个包含指标值的列表返回。

输出:

[损失值, 准确度]

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Fourier分析导论——第4章——Fourier级数的一些应用(E.M. Stein R. Shakarchi)

第 4 章 傅里叶级数的一些应用 Fourier series and analogous expansions intervene very naturally in the general theory of curves and surfaces. In effect, this theory, conceived from the point of view of analysis, deals obviously with the study of arbitra…

ActiveMq学习⑦__ActiveMq协议

问题一、默认的61616端口如何更改? 问题二、你生产上的链接协议如何配置的?使用tcp吗? ActiveMQ 支持的client-broker 通讯协议有:TVP、NIO、UDP、SSL、Http(s)、VM。 其中配置TransportConnector 的文件在ActiveMQ 安装目录的co…

04【保姆级】-GO语言指针

之前我学过C、Java、Python语言时总结的经验: 先建立整体框架,然后再去抠细节。先Know how,然后know why。先做出来,然后再去一点点研究,才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

二蛋赠书七期:《云原生数据中台:架构、方法论与实践》

前言 大家好!我是二蛋,一个热爱技术、乐于分享的工程师。在过去的几年里,我一直通过各种渠道与大家分享技术知识和经验。我深知,每一位技术人员都对自己的技能提升和职业发展有着热切的期待。因此,我非常感激大家一直…

基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(简单支持发起人与审批人的流程)续

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 之前生产的xml,在bpmn设计里编辑有些内容不正确,包括审批人,关联表单等…

【蓝桥杯选拔赛真题13】C++最短距离 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

C/C++最短距离 第十二届青少组蓝桥杯C++选拔赛真题 一、题目要求 1、编程实现 有一个居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 1,2,3……,当排满一行时,从下一行相邻的楼往反方向排号。 例如:小区为 3 行 6 列,矩阵排列方式: 要求:已知小区…

vue:如何实现通过判断数组中每个对象的其中一个属性,从而更改另一个属性的值

1、假设一个box为一个包含多个对象的数组,这个box数组可以在方法中定义也可以在data域中定义 let box [{ id: 1, status: 审批中 },{ id: 2, status: 已通过 },{ id: 3, status: 未通过 } ];2、在methods域中写一个方法遍历这个box数组判断每个对象中的status属性是…

Linux 服务器监控

服务器几乎与任何 IT 基础设施密不可分,Linux 是服务器兼容性最强的开源操作系统,因为它具有灵活性、一致性和安全性。大多数 Linux 服务器都设置了以下 Linux 操作系统的任何变体:Red Hat Enterprise Linux (RHEL)、D…

clickhouse安装与远程访问

安装(本文以ubuntu系统为例) 单节点设置​ 为了延迟演示分布式环境的复杂性,我们将首先在单个服务器或虚拟机上部署ClickHouse。ClickHouse通常是从deb或rpm包安装,但对于不支持它们的操作系统也有其他方法。 例如,…

Markdown写作应用推荐

MWeb Pro 是一款适用于macOS的专业Markdown写作、笔记本应用软件。喜欢写博客的朋友,那你一定会需要 MWeb Pro 这款软件。为您提供最佳的写作体验。 Markdown 语法支持: 使用 Github Flavored Markdown 语法,简称 GFM 语法。支持表格、TOC、…

吴恩达《机器学习》6-4->6-7:代价函数、简化代价函数与梯度下降、高级优化、多元分类:一对多

一、代价函数 逻辑回归的代价函数是用来度量模型预测与实际结果之间的差异的。与线性回归使用均方误差不同,逻辑回归使用的代价函数在数学上更为复杂。为了理解逻辑回归的代价函数,首先要明白逻辑回归的假设函数: ℎ𝜃(&#x1…

消息代理与事件代理:何时使用它们

选择正确的工具来满足异步处理需求的技术指南 作为后端开发人员,有一天你需要回答这个问题: 我需要构建一个使用分布式队列的异步应用程序,我应该使用哪个代理? 作为工程师,我们的本能是列出我们了解或希望熟悉的工具&…

汇编-变量

.386 .model flat,stdcall option casemap:none.data sum DWORD 0 ;创建一个全局变量,取名sum,初始化0 sum1 DWORD ? ;创建一个全局变量sum1,无初始化 ;问号(?)初始化值使得变量未被初始化,这意味着在运行时才会为该变量分配一个值 ;变量名…

【Git】Git 学习笔记_操作远程仓库

1. SSH 配置和克隆仓库 ssh-keygen -t rsa -C "xxxqq.com"回车后出现以下内容,直接回车: Generating public/private rsa key pair. Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa): (按回车键) Enter pass…

指针进阶(3)

文章目录 9. 指针和数组笔试题解析10. 指针笔试题 9. 指针和数组笔试题解析 在做题之前,我们再次明确一下数组名的理解: 数组名是数组首元素的地址,但是有2个例外: sizeof(数组名),这里的数组名表示整个数组&#xff…

[黑马程序员Pandas教程]——Pandas数据结构

目录: 学习目标认识Pandas中的数据结构和数据类型Series对象通过numpy.ndarray数组来创建通过list列表来创建使用字典或元组创建s对象在notebook中不写printSeries对象常用API布尔值列表获取Series对象中部分数据Series对象的运算DataFrame对象创建df对象DataFrame…

pytorch之relu激活函数

目录 1、relu 2、relu6 3、leaky_relu 4、ELU 5、SELU 6、PReLU 1、relu ReLU(Rectified Linear Unit)是一种常用的神经网络激活函数,它在PyTorch中被广泛使用。ReLU函数接受一个输入值,如果该值大于零,则返回该…

python的format函数的用法及实例

目录 1.format函数的语法及用法 (1)语法:{}.format() (2)用法:用于格式化字符串。可以接受无限个参数,可以指定顺序。返回结果为字符串。 2.实例 (1)不设置位置&…

浮点数存储

//浮点数存储 int main() {int n 9;//00000000 00000000 00000000 00001001//0 00000000 00000000000000000001001//S E(8bit) M(23bit)//E-126//M0.000000000000000000001001// 0.000000000000000000001001 *2^-126float* pFloat (float*)&n;printf("n的值…

挖掘非结构化数据潜能——向量数据库的探索之路

“ 摸着石头过河,一直向前,不断尝试 ” 整理 | 小白 出品|极新 IDC 预测,到 2025 年,中国的数据量将增长到 48.6ZB,80% 是非结构化数据,并且将成为全球最大的数据圈。在我们的日常生活中&…