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

前馈全连接神经网络

    • 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].valuesprint('数据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之间,并且所有神经元的输出之和为1keras.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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32——OLED篇

技术笔记! 一、OLED显示屏介绍(了解) 1. OLED显示屏简介 二、OLED驱动原理(熟悉) 1. 驱动OLED驱动芯片的步骤 2. SSD1306工作时序 三、OLED驱动芯片简介(掌握) 1. 常用SSD1306指令 2. …

[Kotlin]创建一个私有包并使用

1.创建Kotlin测试项目 在Android Studio或其他IDE中选择“Create New Project”。选择Kotlin和Gradle作为项目类型和构建系统。指定项目名称和位置,完成设置。 2.创建Android Library模块 官方文档:创建 Android 库 | Android Studio | Android De…

图片转word如何转换?

要将图片转换为Word文档,你可以使用以下方法之一: 以上这些方法都可以帮助你将图片中的文本转换为可编辑的Word文档,你可以根据自己的喜好和需求选择其中一种方法来操作。 使用OCR软件或在线工具:有许多OCR(Optical Ch…

2024年怎样提取小程序里的视频

在未来的2024年,我们亲眼目睹了科技的飞速发展和互联网的无限可能。在这个数字化世界中,小程序已经成为我们日常生活中不可或缺的一部分,无论是购物、学习,还是娱乐,小程序都给我们带来了前所未有的便利。然而&#xf…

【OceanBase诊断调优】—— 租户资源统计项及其查询方法

本文主要介绍 OceanBase 数据库中租户资源统计项及其查询方法。 适用版本 OceanBase 数据库 V4.1.x、V4.2.x 版本。 CPU 资源统计项 逻辑 CPU 使用率(线程处理请求的时间占比)。 通过虚拟表 __all_virtual_sysstat 在 SYS 系统租户下,查看…

棱镜七彩参编《网络安全技术 软件供应链安全要求》国家标准发布

据全国标准信息公共服务平台消息显示,《网络安全技术 软件供应链安全要求》(GB/T 43698-2024)国家标准已于2024年4月25日正式发布,并将于2024年11月1日正式实施。棱镜七彩作为主要编制单位之一参与该国家标准的编制,为…

Linux下安装mysql8.0(以rpm包安装)

前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访! Linux下安装mysql8.0(以rpm包安装)https://myweb.myskillstree.cn/125.html 目录 1、查操作系统信息 2、下载mysql 8.0.34的rpm包 …

7.STL_string(详细)

1. 什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架。 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版…

org.springframework.jdbc.BadSqlGrammarException

Cause: java.sql.SQLSyntaxErrorException: Table ‘web.emp’ doesn’t exist 产生原因:web表找不到,所以可能数据库配置错误 spring.datasource.urljdbc:mysql://localhost:3306/web02 更改完成后运行成功

抽空学学go

2024年5月9日11:14:24 学习go 看课8小时转职Golang工程师(如果你想低成本学习Go语言)_哔哩哔哩_bilibili 文档8小时转职Golang工程师 (yuque.com) 1.安装go 2024年5月9日11:27:16 2.安装 vscode go配置环境 vs code配置go开发环境 (zhihu.com) vscode里面配置代理&#xf…

BGP综合实验

一.实验拓扑图 二.实验思路 1.划分网段配置IP地址 2.在AS 2内部配置OSPF协议,整个配置BGP协议(将R3,R6作为反射器,防止水平分割使R4、R7、R8学习不到宣告进的网段) 3.手工路由聚合,减少路由条目&#xf…

Curator分布式锁

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 分布式锁服务宕机,…

【GlobalMapper精品教程】079:投影坐标系转地理坐标系(UTM转WGS1984/2000)

文章目录 一、矢量UTM转WGS1984/20001. UTM转WGS19842. UTM转CGCS2000二、栅格UTM转WGS1984/2000一、矢量UTM转WGS1984/2000 加载配套实验数据(data079.rar)中的矢量数据,如下所示: 查看源坐标系:双击图层的,图层投影选项卡,为UTM投影,Zone48N。 设置系统坐标系:点击…

【JavaEE网络】HTTPS详解:从对称与非对称加密到证书认证

目录 HTTPSHTTPS 是什么“加密” 是什么HTTTPS 的工作过程引入对称加密引入非对称加密引入证书完整流程总结 HTTPS HTTPS 是什么 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现…

【JVM】ASM开发

认识ASM ASM是一个Java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。 ASM可以直接产生二进制class文件,也可以在类被加载入虚拟机之前动态改变类行为,ASM从类文件中读入信息后能够改变类行为,分析类信息&#xff…

【CSS】认识CSS选择器及各选择器对应的用法

目录 一、什么是CSS? 二、CSS 选择器 1. 标签选择器 2. 类选择器 3. ID选择器 4. 通配符选择器 5. 复合选择器 一、什么是CSS? CSS(Cascading Style Sheet),层叠样式表。它与 HTML(超文本标记语言)一起使用&am…

线下研讨会 技术沙龙|乐鑫芯片与 ESP RainMaker® 为科技初创企业赋能

众多科技初创企业在智能硬件市场迅猛发展的背景下,对不断变化的需求展现出了高度的敏锐性,期望能够快速将其转化为切实的产品方案。然而,面对复杂繁重的软硬件集成任务,这些企业往往容易陷入研发瓶颈、资金短缺以及效率低下等多重…

前端小程序调用 getLocation 实现地图位置功能,通过 纬度:latitude 经度: longitude 获取当前位置

1、首先登录一下 腾讯的位置服务 有账号就登录没账号就注册, 点击右上角的控制台点击左侧的应用管理 ---> 我的应用 ---->> 创建应用 1、创建应用 2、列表就会显示我们刚刚创建好的 key 3、点击添加 key 4、按照要求填写信息 我们用的是小程序 所以选择…

vue2和vue3区别: 探索关键差异

vue2和vue3区别: 探索关键差异 Vue.js 作为流行的前端框架,其版本 3 带来了许多令人兴奋的改进和新功能。虽然 Vue 3 保持了与 Vue 2 的相似性,但也存在一些关键差异需要开发者注意。本文将通过表格形式,清晰地展现 Vue 2 和 Vue …

Python-VBA函数之旅-str函数

目录 一、str函数的常见应用场景 二、str函数使用注意事项 三、如何用好str函数? 1、str函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、str函数的常…