Tensorflow中的多层感知器学习

news2024/11/16 2:30:30

Tensorflow中的多层感知器学习


在这篇文章中,我们将了解多层感知器的概念和它在Python中使用TensorFlow库的实现。

多层感知

多层感知也被称为MLP。它是完全连接的密集层,可以将任何输入维度转化为所需维度。多层感知是一个具有多层的神经网络。为了创建一个神经网络,我们将神经元结合在一起,使一些神经元的输出成为其他神经元的输入。

多层感知器有一个输入层,每个输入都有一个神经元(或节点),它有一个输出层,每个输出都有一个节点,它可以有任意数量的隐藏层,每个隐藏层可以有任意数量的节点。多层感知器(MLP)的原理图描述如下。

在这里插入图片描述

在上面的多层感知器图中,我们可以看到有三个输入,因此有三个输入节点,隐藏层有三个节点。输出层给出两个输出,因此有两个输出节点。输入层的节点接受输入并将其进一步处理,在上图中,输入层的节点将其输出转发给隐藏层的三个节点,以同样的方式,隐藏层处理信息并将其传递给输出层。

多层感知中的每个节点都使用一个sigmoid激活函数。sigmoid激活函数将实值作为输入,并使用sigmoid公式将其转换为0和1之间的数字。
在这里插入图片描述

现在我们已经完成了多层感知的理论部分,让我们继续使用TensorFlow库在python中实现一些代码。

一步一步实现

第1步:导入必要的库。

# importing modules
import tensorflow as tf
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Activation
import matplotlib.pyplot as plt

第2步:下载数据集。

TensorFlow允许我们读取MNIST数据集,我们可以在程序中直接加载它作为训练和测试数据集。

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

输出:

从https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 下载数据

11493376/11490434 [==============================] – 2s 0us/step

第3步:现在我们将把像素转换为浮点值。

# Cast the records into float values
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
  
# normalize image pixel values by dividing 
# by 255
gray_scale = 255
x_train /= gray_scale
x_test /= gray_scale

我们要把像素值转换成浮点值来进行预测。将数字改为灰度值将是有益的,因为数值变得很小,计算变得更容易和更快。由于像素值的范围是0到256,除了0以外,其他的范围是255。因此,将所有的值除以255,就可以转换为0到1的范围。

第4步:了解数据集的结构

print("Feature matrix:", x_train.shape)
print("Target matrix:", x_test.shape)
print("Feature matrix:", y_train.shape)
print("Target matrix:", y_test.shape)

输出:

Feature matrix: (60000, 28, 28)
Target matrix: (10000, 28, 28)
Feature matrix: (60000,)
Target matrix: (10000,)

因此,我们得到训练数据集中有60,000条记录,测试数据集中有10,000条记录,数据集中的每张图像都是28×28的大小。

第5步:将数据可视化。

fig, ax = plt.subplots(10, 10)
k = 0
for i in range(10):
    for j in range(10):
        ax[i][j].imshow(x_train[k].reshape(28, 28), 
                        aspect='auto')
        k += 1
plt.show()

输出

在这里插入图片描述

第6步:形成输入层、隐藏层和输出层。

model = Sequential([
    
    # reshape 28 row * 28 column data to 28*28 rows
    Flatten(input_shape=(28, 28)),
    
      # dense layer 1
    Dense(256, activation='sigmoid'),  
    
    # dense layer 2
    Dense(128, activation='sigmoid'), 
    
      # output layer
    Dense(10, activation='sigmoid'),  
])

一些需要注意的重要事项:

  • 顺序模型允许我们像在多层感知器中那样逐层创建模型,并且仅限于单输入、单输出的层叠。
  • 平坦化对提供的输入进行平坦化,而不影响批处理的大小。例如,如果输入的形状是(batch_size,),没有特征轴,那么扁平化会增加一个额外的通道尺寸,输出的形状是(batch_size, 1)。
  • 激活是为了使用sigmoid激活函数。
  • 前两个密集层用来做一个全连接模型,是隐藏层。
  • 最后一个密集层是输出层,包含10个神经元,决定图像属于哪个类别。

第7步:编译模型。

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

这里使用了编译函数,涉及到损失、优化器和度量的使用。这里使用的损失函数是sparse_categorical_crossentropy,优化器是adam

第8步:拟合模型。

model.fit(x_train, y_train, epochs=10, 
          batch_size=2000, 
          validation_split=0.2)

输出:

在这里插入图片描述

需要注意的一些要点。

  • 纪元告诉我们,模型将被训练成前向和后向的次数。
  • 批量大小代表样本的数量,如果没有指定,batch_size将默认为32。
  • 模型将把这部分训练数据分离出来,在每个历时结束时评估损失和任何模型指标。(模型不会在此数据上进行训练)

第9步:查找模型的准确性。

results = model.evaluate(x_test,  y_test, verbose = 0)
print('test loss, test acc:', results)

输出:

test loss, test acc: [0.27210235595703125, 0.9223999977111816]

通过对测试样本使用model.evaluate(),我们得到了我们的模型92%的准确性。

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

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

相关文章

【黑马SpringCloud(6)】Sentinel解决雪崩问题

微服务保护雪崩问题服务保护技术Sentinel微服务整合Sentinel流量控制簇点链路入门练习流控模式关联链路流控效果Warm Up排队等待热点参数限流隔离和降级FeignClient整合Sentinel线程隔离(舱壁模式)实现线程隔离熔断降级慢调用异常比例/异常数授权规则获取origin给网关添加请求头…

ROS2+nav2+激光雷达导航实践(上)

目录写在前面安装nav2nav2介绍nav2实践map地图保存地图读取状态估计(TF变换)所需TF坐标base_link -> sensor framesodom -> base_linkLaser Scan Matcher for ROS2map -> odomAMCL使用AMCL参数配置文件amcl_config.yaml效果过程中的知识点一、launch文件编写格式及方法…

Python 之 NumPy 切片索引和广播机制

文章目录一、切片和索引1. 一维数组2. 二维数组二、索引的高级操作1. 整数数组索引2. 布尔数组索引三、广播机制1. 广播机制规则2. 对于广播规则另一种简单理解一、切片和索引 ndarray 对象的内容可以通过索引或切片来访问和修改(),与 Pytho…

30、基于51单片机交通灯车流量管控数码管显示系统设计

摘要 随着社会主义的建设,城市的规模在不断扩大,城市的交通也在不断的提高和改进,交通的顺畅已经成为制约社会主义建设的一个重要因素。目前,伴随着机动车辆的不断增加,尤其是十字路口的交通建设 颇为关键&#xff0c…

PID控制算法简介

目录 1 简介 2 比例Proportional 3 积分Integral 4 微分Differential 5 公式 6 积分限幅 7 积分限行 8 相关代码 1 简介 PID控制中有P、I、D三个参数,PID即:Proportional(比例)、Integral(积分&#…

【渝偲医药】实验室关于核磁共振波谱NMR的知识(原理、用途、分析、问题)

核磁共振波谱法(Nuclear Magnetic Resonance,简写为NMR)与紫外吸收光谱、红外吸收光谱、质谱被人们称为“四谱",是对各种有机和无机物的成分、结构进行定性分析的强有力的工具之一,亦可进行定量分析。 核磁共振&…

目标检测的旋框框文献学习

这是最近打算看完的文献,一天一篇 接下来将记录一下文献阅读笔记,避免过两天就忘了 RRPN 论文题目:Arbitrary-Oriented Scene Text Detection via Rotation Proposals 论文题目:通过旋转方案进行任意方向的场景文本检测&#x…

深度学习刷 SOTA 有哪些 trick?

“深度学习刷 SOTA 有哪些 trick?”,此问题在知乎上有超 1700 人关注,浏览量超 32 万,相信是大家都非常关心的问题,快一起看看下面的分享吧,希望可以帮助到大家~对于图像分类任务,让我们以 Swin…

阿里前端必会手写面试题汇总

实现节流函数(throttle) 节流函数原理:指频繁触发事件时,只会在指定的时间段内执行事件回调,即触发事件间隔大于等于指定的时间才会执行回调函数。总结起来就是: 事件,按照一段时间的间隔来进行触发 。 像d…

啪,还敢抛出异常

🙉 作者简介: 全栈领域新星创作者 ;天天被业务折腾得死去活来的同时依然保有对各项技术热忱的追求,把分享变成一种习惯,再小的帆也能远航。 🏡 个人主页:xiezhr的个人主页 前言 去年又重新刷了…

DELL游匣ubuntu2004系统 RTX3060显卡,cuda11.4,cudnn8.2.4安装

1.安装Ubuntu2004的系统2.驱动安装前的准备工作第一步:修改设置下载源~阿里源。在Software Updater在第一栏Ubuntu Software页面中,找到Download from,选择->China->mirrors.aliyun.com,点击确认。第二步:sudo apt-get upda…

都说爱有回音,这次情人节驱动人生宠你!

来了来了,它又来了——那个一波人狂欢,一波人孤单的节日。 眼看着身边人在订花订餐厅,选礼物,空气中弥漫着微妙的氛围,驱动哥脑海里只有明天下班的地铁挤不挤得过这群约会的人。 不过根据哥的观察,发现一个…

【GlobalMapper精品教程】046:空间操作(3)——并集(Union)

本文讲解globalmapper空间操作中一种很重要的工具:并集。 文章目录 一、工具介绍1. 并集原理2. GM并集工具二、案例演示1. 加载数据2. 并集运算三、结果分析1. 空间变化2. 属性表变化3. 空间和属性对应关系一、工具介绍 1. 并集原理 并集(union)操作创建由两个输入图层的所…

80 90后表示真干不过,部门新来的00后已经把我卷奔溃了,不想干了····

都说00后躺平了,但是有一说一,该卷的还是卷。这不,刚开年我们公司来了个00后,工作没两年,跳槽到我们公司起薪18K,都快接近我了。 后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 …

操作系统开发:启用内存分页机制

目前我们已进入保护模式,但依然会受到限制,虽然地址空间达到了4GB,但此空间是包括操作系统共享的4GB空间,我们把段基址段内偏移地址称为线性地址,线性地址是唯一的,只属于某一个进程。在我们机器上即使只有512MB的内存,每个进程自…

开发微服务电商项目演示(四)

一&#xff0c;网关服务限流熔断降级第1步&#xff1a;启动sentinel-dashboard控制台和Nacos注册中心服务第2步&#xff1a;在网关服务中引入sentinel依赖<!-- sentinel --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>sprin…

快速排序基本原理

快速排序基本原理1.快速排序1.1 基本原理1.2 快速排序执行步骤1.2.1 分区包含步骤1.2.1 分区步骤1.3 快速排序大O记法表示2. 将[0,5,2,1,6,3]进行快速排序 【实战】2.1 第一次分区步骤2.2 第二次分区步骤2.3 第三次分区步骤2.4 第四次分区步骤3.快速排序代码实现1.快速排序 1.…

一文盘点,ZBC的应用场景与通缩场景

进入到2023年&#xff0c;Zebec生态正在向新的叙事方向发展。一方面我们看到&#xff0c;流支付生态Zebec在此前正式走向DAO&#xff0c;并上线了DAO治理投票平台Zebec Node&#xff0c;任何持有ZBC的用户都可以参与投票。另一方面我们看到生态正在朝着最初的愿景迸发&#xff…

3.28 haas506 2.0开发教程-example-蓝牙多设备扫描(仅支持M320,HD1)

haas506 2.0开发教程-example-蓝牙多设备扫描案例说明蓝牙信息克隆1.手机蓝牙改名信息克隆代码测试案例说明 开发板扫描蓝牙设备&#xff0c;获取并打印蓝牙设备mac地址。mac地址每个设备不同&#xff0c;且不能更改。本案例仅适用于M320开发板和HD1-RTU。案例使用手机与iBeac…

LeetCode(剑指offer) Day1

1.用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 解题过程记录&#xff1a;本题就是用两个栈&…