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

news2025/1/17 1:40:57

前馈全连接神经网络

    • 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)

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

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

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

相关文章

JAVA版本的ATM编程问题记录

前段时间用C语言写了个银行ATM系统,还写了一篇文章记录了一些,C语言的ATM文章。后来又用IDEA写了一个JAVA版本的银行ATM。有人就会问为啥浪费这个时间写ATM呢?🧐其实是我本科代码没学好,所以现在想利用比较熟悉的ATM系…

第 8 章 电机测速(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.3.3 电机测速01_理论 测速实现是调速实现的前提,本节主要介绍AB相增量式编码器测速原理。 1.概…

faad2交叉编译——aac解码为pcm,解决faad单通道转双通道问题

FAAD是比较成熟高效的开源AAC解码库,这里用于解码AAC生成PCM数据,用于音频播放。这里因为faad库,会将单通道转化为双通道踩了些坑,所以记录一下。 我使用的是2.11.0版本,貌似往前的版本没有使用CMake,需要c…

如何在电脑中使用微信?pc版微信和手机版有什么区别

微信简介 微信是一个社交和商业强国,自成立以来一直在持续增长。该应用程序在2023年拥有13亿月活跃用户,尽管在某些国家对其使用存在一些阻力。 使用微信网页版可以获得的好处 尽管微信为iOS和Android智能手机提供了出色的应用程序,但仍有时…

面向初学者:什么是图数据库

当数据成为关键生产要素,许多企业开始面临利用海量数据辅助企业复杂决策的现实难题。而在数据爆发式增长,关联复杂度激增的趋势下,图数据库成为企业加工关联数据、挖掘隐藏价值、智能决策升级的关键技术之一,在全球范围内开始被使…

sql优化思路

sql的优化经验 这里解释一下SQL语句的优化的原理 1.指明字段名称,可以尽量使用覆盖索引,避免回表查询,因此可以提高效率 2.字面意思,无需过多赘述。索引就是为了提高查询效率的。 3.图中两条sql直接可以使用union all 或者 uni…

一文盘点 Partisia Blockchain 生态 4 月市场进展

Partisia Blockchain 是一个以高迸发、隐私、高度可互操作性、可拓展为特性的 Layer1 网络。通过将 MPC 技术方案引入到区块链系统中,以零知识证明(ZK)技术和多方计算(MPC)为基础,共同保障在不影响网络完整…

万字长文详解Typora+PicGo+Github/Gitee的配置教程

文章目录 1.前言1.1 Typora简介1.2 引入1.2.1 移动本地图片位置导致图片加载失败问题解决方案反思: 1.2.2 CSDN导入图片转存失败1.2.3 思考 1.3 图床工具1.4 使用原因1.5 总结 2.安装教程2.1 Typora安装教程2.1.1 下载安装包方式1:百度网盘方式2&#xf…

【Python爬虫】使用request和xpath爬取高清美女图片

📝个人主页:哈__ 期待您的关注 目录 🎈 urlib.request 🔥具体的方法 ✈ lxml 🔥xpath的基本语法 1. 基本路径 2. 选择节点 3. 谓语(Predicates) 4. 通配符 5. 选择多个路径 6. 函数 …

鸿蒙内核源码分析(工作模式篇) | CPU的七种工作模式

本篇说清楚CPU的工作模式 工作模式(Working mode) 也叫操作模式(Operating mode)又叫处理器模式(Processor mode),是 CPU 运行的重要参数,决定着处理器的工作方式,比如如何裁决特权级别和报告异…

文献速递:深度学习医学影像心脏疾病检测与诊断--基于深度学习的低剂量SPECT心肌灌注图像去噪:定量评估与临床表现

Title 题目 Deep learning–based denoising of low‑dose SPECT myocardialperfusion images: quantitative assessment and clinical performance 基于深度学习的低剂量SPECT心肌灌注图像去噪:定量评估与临床表现 01 文献速递介绍 单光子发射计算机断层扫描&a…

Options API:选项式 API改成Composition API:组合式 API的留言板

让我欢喜让我忧 改成Composition API:组合式 API的代码&#xff0c; <template><!-- start --><span class"span_checkbox">操作<input type"checkbox" v-model"showInput" value"操作" /></span><…

Learning Continuous Image Representation with Local Implicit Image Function

CVPR2021https://github.com/yinboc/liif 问题引入 图像普遍都是使用像素来表示的&#xff0c;而现实世界是连续的&#xff0c;所以本文借鉴3D中neural implicit representation的思想&#xff0c;以连续的方式表示图像&#xff1b;模型输入坐标值和坐标附近的特征&#xff0…

区块链 | NFT 水印:Review on Watermarking Techniques(二)

&#x1f34d;原文&#xff1a;Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 半脆弱和可逆水印 鲁棒性好的水印技术通常会产生非常低透明度。正如前面所述&#xff0c;由于透明度在处理数字…

OpenGL 入门(四)—— 贴纸与美颜滤镜

本篇我们来介绍贴纸效果与美颜滤镜的实现。 1、贴纸效果 贴纸实际上是一个图片&#xff0c;用 Bitmap 加载图片后用 OpenGL 渲染到指定的位置上。我们举例添加一个耳朵贴纸&#xff1a; 1.1 获取人脸位置 上一篇我们在讲大眼滤镜时&#xff0c;在 Native 层除了获取到人脸 5…

【数据库表的约束(下)】

文章目录 一、自增长主键二、唯一键约束三、外键约束总结 一、自增长主键 这个约束的功能是&#xff1a; 你不用管我&#xff0c;也不需要插入我这一列的数据&#xff0c;我会保证自己与其他数据不冲突&#xff0c;并且是连续的。 创建一个表&#xff0c;表格内容如下&#x…

Tkinter组件:Checkbutton

Tkinter组件&#xff1a;Checkbutton Checkbutton&#xff08;多选按钮&#xff09;组件用于实现确定是否选择的按钮。Checkbutton 组件可以包含文本或图像&#xff0c;你可以将一个 Python 的函数或方法与之相关联&#xff0c;当按钮被按下时&#xff0c;对应的函数或方法将被…

保护公司机密:避免员工带着数据说拜拜

公司的核心资产之一就是数据。无论是客户信息、研发代码、内部决议、财务报告、商业合同、设计图纸等都是公司的重要资产。如果这些数据在员工离职时被带走&#xff0c;或在员工在职期间不当行为导致数据泄露&#xff0c;将给公司带来重大损失。 然而&#xff0c;保护这些数据…

大模型微调之 在亚马逊AWS上实战LlaMA案例(四)

大模型微调之 在亚马逊AWS上实战LlaMA案例&#xff08;四&#xff09; 在 Amazon SageMaker JumpStart 上微调 Llama 2 以生成文本 Meta 能够使用Amazon SageMaker JumpStart微调 Llama 2 模型。 Llama 2 系列大型语言模型 (LLM) 是预先训练和微调的生成文本模型的集合&#x…

漏洞伴随App无时不在,该怎么办?

漏洞攻击、加密被破坏以及数据泄露是App面临的三大重要安全风险&#xff0c;无论开发者如何防范&#xff0c;攻击者往往会找到新的方法&#xff0c;并依靠最新的工具来破坏App安全性。 统计数据表明&#xff0c;大约82&#xff05;的漏洞是在App程序代码中发现的。如果尽快发现…