深度学习——前馈全连接神经网络

前馈全连接神经网络

    • 1.导入需要的工具包
    • 2.数据导入与数据观察
      • (1)读取csv的文件信息:
      • (2)训练数据前5行
      • (3)打印第一个图
      • (4)观察数据中的信息
      • (5)查看维度
    • 3.数据预处理
      • (1)分离标签
      • (2)归一化
      • (3)分样本
    • 4.前馈全连接神经网络(Sequential模型)
      • (1)导入需要的包
      • (2)定义全连接神经网络模型
        • 知识点;
      • (3)权重和偏执
      • (4)打印模型的摘要信息
      • (5)编译网络
      • (6)训练网络
      • (7)二维数据表格
      • (8)绘图
      • (9)查看准确率

1.导入需要的工具包

1.numpy是科学计算基础包,主要应用于python中的元素级计算和执行数学运算;
2.pandas能方便处理结构化数据和函数;
3.matplotlib主要用于绘制图表。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd  

2.数据导入与数据观察

如果需要csv文件请在资源中查找,名字是前馈全连接神经网络csv文件。

(1)读取csv的文件信息:

mport pandas as pd  

train_Data = pd.read_csv('mnist_train.csv',header = None)
test_Data = pd.read_csv('mnist_test.csv',header = None)

print('Train data:')
train_Data.info()
print('\nTeat data:')
test_Data.info()

运行结果:

在这里插入图片描述
可以发现训练数据中包含60000个数据样本,维度785,包括标签信息与784个特征维度;测试数据中包含10000个样本,维度785,包括标签信息与784个特征维度。

(2)训练数据前5行

train_Data.head(5)

运行结果:
在这里插入图片描述

(3)打印第一个图

x = train_Data.iloc[0]  # 取第一行数据
y = x[0]                 #标签信息
img = x[1:].values.reshape(28,28)  #将1*784转换成28*28
plt.imshow(img)    #画图
plt.title('label = '+ str(y))
plt.show()

运行结果:
在这里插入图片描述

(4)观察数据中的信息

#从sklearn中导入数据
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1, parser='auto')
#观察数据
mnist.keys()

在这里插入图片描述
在这里插入图片描述
可以发现从sklearn中导入的数据包括所有训练与测试样本信息,共计70000个,对应的数据信息是mnist[‘data’],数据维度是70000$$784;标签信息是mnist[‘target’],对应维度是784

(5)查看维度

data,label = mnist["data"],mnist["target"]
print('数据维度:',data.shape)
print('标签维度:',label.shape)

在这里插入图片描述

3.数据预处理

(1)分离标签

将train_Data样本中数据与标签分开,其中X对应样本数据,y对应样本标签

X = train_Data.iloc[:,1:].values
y = train_Data.iloc[:,0].values

print('数据X中最大值:', X.max())
print('数据X中最小值:', X.min())

在这里插入图片描述
此时数据X,y都是array格式,观察数据X中的数值,发现最大值是255,最小值是0,可以考虑对X进行归一化

(2)归一化

#归一化
X=X/255
#此时将数值大小缩小在[0,1]范围内,重新观察数据中的最大,最小值
print(‘数据X中最大值:’,X.max())
print(‘数据X中最小值:’,X.min())

在这里插入图片描述

(3)分样本

将所有训练样本分为55000个样本的训练集(X_train, y_train)与5000个样本的验证集(X_valid, y_valid)

X_valid,X_train = X[:5000],X[5000:]
y_valid,y_train = y[:5000],y[5000:]
X_test,y_test = test_Data.iloc[:,1:].values/255,test_Data.iloc[:,0].values

4.前馈全连接神经网络(Sequential模型)

(1)导入需要的包

tensorflow:这是Google开发的一个开源机器学习库,它支持从简单的线性回归到复杂的神经网络的多种机器学习模型。
keras:这是TensorFlow的一个高级API,它提供了一个更简单、更直观的接口来构建和训练复杂的神经网络。

import tensorflow as tf
from tensorflow import keras

(2)定义全连接神经网络模型

#使用了Keras的Sequential API来定义一个简单的全连接神经网络模型。Sequential模型是一个线性堆叠的模型
model = keras.models.Sequential([
    # 第一个层:Flatten层,它将输入数据的形状从二维转换为一维。
    # 参数input_shape=[784]指定了输入数据的形状,对于MNIST数据集,这通常是(28, 28),
    # 但由于MNIST图像数据在加载时被扁平化为一个一维数组,所以输入形状是(784,)。
    keras.layers.Flatten(input_shape=[784]),
    # 第二个层:Dense层,它是一个全连接层,每个神经元都与其他所有神经元相连。
    # 参数300指定了该层有300个神经元。
    # 参数activation='relu'指定了每个神经元的激活函数是ReLU。
    keras.layers.Dense(300,activation='relu'),
    # 第三个层:Dense层,同样是一个全连接层,但这个层有100个神经元。
    keras.layers.Dense(100,activation='relu'),
    # 第四个层:Dense层,这是一个输出层,有10个神经元。
    # 参数activation='softmax'指定了输出层的激活函数是softmax,
    # 这是一个用于多类别分类的函数,它会将每个神经元的输出压缩到0到1之间,并且所有神经元的输出之和为1
    keras.layers.Dense(10,activation='softmax')
])
知识点;

这个层是一个全连接层(Dense层),它具有以下属性:

Layer:这是一个Keras层,它表示神经网络的一个基本构建块。

name:这是层的名称,它可以帮助您在模型中唯一地标识这个层。在您提供的代码中,这个层的名称可能是自动生成的,例如dense_1。

output:这是层的输出张量,它是通过前一个层的输出(或者输入层的输入)计算得出的。在这个全连接层中,输出张量的大小取决于层的神经元数量。

input:这是层的输入张量,它是下一个层的输入。对于全连接层,输入张量的大小取决于前一个层的输出大小。

config:这是一个字典,它包含了层的配置信息,例如神经元数量、激活函数等。

weights:这是一个列表,包含了层的权重张量。对于全连接层,权重张量是一个矩阵,它将输入数据映射到输出数据。

trainable:这是一个布尔值,表示层的权重是否可以被训练。在训练模型时,您需要将所有层的trainable属性设置为True。

(3)权重和偏执

model.layers[1]:这行代码首先访问模型中的第二个层。在Keras中,模型是由多个层组成的,每个层都是模型的一个部分,负责处理输入数据并将其传递到下一个层。
model.layers[1].get_weights():这行代码调用第二个层的get_weights()方法。这个方法返回一个列表,其中包含两个张量:第一个张量是权重(weights),第二个张量是偏置(biases)。
权重张量的大小取决于层的配置,例如神经元数量和输入数据的形状。
偏置张量的大小与权重张量相同,但形状不同。
weights_1, bias_1 = …:这行代码将返回的权重和偏置张量分配给变量weights_1和bias_1。这样,您就可以直接访问和操作这些权重和偏置张量了。

#模型的第二个层
model.layers[1]

在这里插入图片描述

#get_weights()函数用于获取层的权重和偏置
weights_1,bias_1 = model.layers[1].get_weights()
print(weights_1.shape)
print(bias_1.shape)

在这里插入图片描述

(4)打印模型的摘要信息

下是model.summary()函数的一些主要信息:

层数:模型包含的层数。
输入形状:模型输入层的形状。
输出形状:模型输出层的形状。
层类型:模型中每个层的类型(例如,全连接层、卷积层、批量归一化层等)。
层参数数量:每个层包含的参数数量。参数数量通常是层的大小乘以输入形状的大小。
总参数数量:模型中所有层的参数数量之和。
计算图:模型的计算图,这是一个图表示模型中的层如何相互连接。

#用于打印模型的摘要信息
model.summary()

运行结果:
在这里插入图片描述

(5)编译网络

model.compile():用于指定模型的损失函数、优化器和评估指标
loss='sparse_categorical_crossentropy':模型的损失函数为
optimizer=‘sgd’:这行代码指定模型的优化器为sgd
metrics=[‘accuracy’]:这行代码指定模型的评估指标为accuracy

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

(6)训练网络

model.fit()是一个函数,用于使用训练数据来训练模型
X_train:训练数据的输入特征,
y_train:训练数据的标签
batch_size=32:每次梯度下降更新时使用的样本数量
epochs=30:训练过程将运行的完整周期数。
validation_data=(X_valid, y_valid):验证数据的输入特征和标签。

h = model.fit(X_train,y_train,batch_size=32,epochs=10,validation_data=(X_valid,y_valid))

在这里插入图片描述

(7)二维数据表格

随着迭代次数的增加,损失函数的数值loss越来越小,而在验证集上的准确率accuracy越来越高,这些信息都保存在h.history中。

pd.DataFrame(h.history)

在这里插入图片描述

(8)绘图

首先将h.history字典转换为一个Pandas DataFrame
h.history通常包含在训练过程中收集的损失(loss)和准确度(accuracy)等指标,它们是训练周期的迭代结果。
figsize=(8,5)指定了图表的尺寸,其中8表示宽度,5表示高度。

pd.DataFrame(h.history).plot(figsize=(8,5))
plt.grid(True)
plt.gca().set_ylim(0,3)
plt.show()

在这里插入图片描述

(9)查看准确率

model.evaluate()是一个函数,用于评估模型的性能
X_test:这是测试数据的输入特征
y_test:这是测试数据的标签
batch_size=1:这行代码指定评估过程中每次评估的样本数量。

model.evaluate(X_test,y_test,batch_size=1)

运行结果:
在这里插入图片描述

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

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

相关文章

浏览器输入URL到页面展示的过程详解

重点面试题:当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么? step 1、URL解析 URL:internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator…

2024蓝桥杯网络安全部分赛题wp

爬虫协议 题目给了提示访问robots.txt 会出三个目录 访问最后一个 点进去就flag{22560c15-577c-4c8b-9944-815473758bad} packet 下载附件,这个是流量包 放wireshark流量分析 搜http协议 发现有cat flag命令,直接看他返回的流量 最后base64解码即可…

C++|多态(虚函数、抽象类、多态原理)

目录 一、多态的概念及构成 1.1概念 1.2多态的构成条件(继承虚函数) 二、虚函数和虚函数重写 2.1虚函数和虚函数重写的概念 2.2虚函数的"异变"(协变析构重写) 2.3虚函数的扩展(overridefinal) 2.4重载、重写(覆盖)、隐藏(重定义)的对比 三、抽象类 3.1概念…

43.乐理基础-拍号-常见的拍号与强弱关系

首先拍号的定义:39.认识音符、40.什么是一拍、41.小节、小节线、终止线、42.看懂拍号的意义 通过 39.认识音符、40.什么是一拍、41.小节、小节线、终止线、42.看懂拍号的意义 应该可以知道 Y的取值只能是2、4、8、16、32、64。。。。因为Y指的是Y分音符,…

树莓派4b测量PM2.5

1.GP2Y1010AU0F粉尘传感器连接图 2. GP2Y1010AU0F工作原理 工作原理 传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。 3.源代码 main.py # coding=UTF-8 import RPi.GPIO as GPIO from ADC import ADS1015…

【进程等待】是什么 | 为什么 | 怎么办 | wait阻塞等待

目录 进程等待是什么? 为什么要进程等待? 如何进程等待? wait 阻塞等待 进程等待是什么? 进程终止会把进程退出的数据(退出码和退出信号)存放到进程的PCB中保存下来,让父进程进行等待。…

OpenHarmony 实战开发 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境:Windows 11 编译环境:Ubuntu 22.04 开发板型号:DAYU 200(RK3568) 系统版本:OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…

Java毕业设计 基于SpringBoot vue社区智慧养老监护管理平台

Java毕业设计 基于SpringBoot vue社区智慧养老监护管理平台 SpringBoot 社区智慧养老监护管理平台 功能介绍 登录注册 个人中心 修改密码 个人信息 房间信息管理 房间入住信息管理 反馈信息管理 留言管理 老人信息管理 公告管理 物资申请管理 管理员管理 护工管理 体检员管理…

浅谈Windows 上的线程亲和性(Thread affinity)

​ 前言 线程属性包括是否分离、亲和性、调度策略和优先级等。Linux默认的调度策略是CFS(完全公平调度算法),而 Windows 是基于优先级抢占式的策略。 在这些方面,Windows 和 Linux 差异巨大。本文仅针对 Windows 系统的线程亲和性进行探讨。 线程亲和性(Thread affinity) 什…

解锁AI的神秘力量:LangChain4j带你步入智能化实践之门

关注微信公众号 “程序员小胖” 每日技术干货,第一时间送达! 引言 在数字化转型的浪潮中,人工智能(AI)正逐渐成为推动企业创新和增长的关键力量。然而,将AI技术融入到日常业务流程并非易事,它…

谷歌月球模型

收费产品,白嫖党勿扰 收费金额500元 1 概述 前些时间,有个客户,想fight TAIWAN,于是乎,我把谷歌地球整个台湾的模型都下载下来了,大约300GB。今天,又有个客户,提出一个过分要求&…

【第14章】spring-mvc之ajax

文章目录 前言一、准备二、单个值1.前端2.后端3. 结果 三、对象1.前端2.后端3. 结果 四、JSON对象1.前端2.后端3. 结果 五、JSON数组1.前端2.后端3. 结果 总结 前言 AJAX(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术&#xff0c…

STM32:GPIO输入输出

文章目录 1、GPIO介绍1.1 GPIO的基本结构1.1 GPIO的位结构 2、 GPIO工作模式3、GPIO标准外设库接口函数3.1 RCC接口函数3.2 GPIO接口函数3.2.1 GPIO的读取函数3.2.1 GPIO的写入函数 4、GPIO的初始化 1、GPIO介绍 GPIO(General Purpose Input Output)通用…

深入大模型量化技术,大模型端侧落地已Ready?

揭秘未来:大模型量化技术如何革新移动AI应用 ©作者|饮水机 来源|神州问学 前言 最近,苹果发布了OpenELM系列模型,参数规模分别为270M、450M、1.1B和3B。与此同时,微软也推出了Phi-3系列模型,其中mini版本的参数…

支付时,中国网联结算与中国银联结算的区别与联系

随着电子商务和互联网支付的快速发展,中国的支付清算市场也呈现出前所未有的繁荣景象。在这个大背景下,中国网联与中国银联作为两大支付清算机构,各自扮演着重要的角色。本文将对两者的区别和联系进行深入探讨,以期对读者有更全面…

【北京迅为】《iTOP-3588开发板快速烧写手册》-第9章ubuntu系统下升级固件

RK3588是一款低功耗、高性能的处理器,适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用,RK3588支持8K视频编解码,内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

智慧公厕,城市现代化公卫变革的关键节点

随着城市的快速发展,公共厕所作为社会基础民生设施,正越来越受到精细化管理的重视。智慧公厕的出现,为传统公共厕所的脏乱臭提供了解决方案,通过物联网、大数据、云计算、自动化控制等先进技术的贡献,使公厕管理更加高…

怎么编辑百度百科个人词条

辑百度百科个人词条是一个相对复杂的过程,需要遵循一定的步骤和规则。以下是百科优化网整理的编辑百度百科个人词条的步骤和注意事项。 1. 确定编辑资格 百度百科个人词条的编辑权主要赋予那些具有一定影响力的公众人物,或者是有一定“身份”的人物&…

大模型驱动的新一代 BI 平台,Sugar BI 开启智慧决策新模式

本文整理自 2024 年 4 月 16 日的 2024 百度 Create 大会上的《大模型驱动的新一代 BI 平台如何开启智慧决策》分享。 全文包括了可视化 BI 分析技术架构、智能图表推荐策略与规则设计、Sugar Bot 智能问数的技术实现流程,以及目前的场景应用等。 1 Sugar BI 产…

【C语言】路漫漫其修远兮,深入[指针]正当下

一. 指针初步 1.概念定义 地址:我们在内存中开辟空间时,为了方便后续访问,每个数据有确切的地址。 指针:指向数据的地址,并将其地址储存在指针变量中。 2.基本运算符 • 取地址操作符(&) …