【深度学习实验】前馈神经网络(七):批量加载数据(直接加载数据→定义类封装数据)
目录
一、实验介绍
二、实验环境
1. 配置虚拟环境
2. 库版本介绍
三、实验内容
0. 导入必要的工具包
1. 直接加载鸢尾花数据集
a. 加载数据集
b. 数据归一化
c. 洗牌操作
d. 打印数据
2. 定义类封装数据
a. __init__(构造函数:用于初始化数据集对象)
b. __getitem__(获取指定索引处的样本)
c. __len__(获取数据集的长度)
3. 构建数据集(批量加载训练、验证、测试集)
4. 代码整合
一、实验介绍
在本系列先前的代码中,借助深度学习框架的帮助,已经完成了前馈神经网络的大部分功能。本文将基于鸢尾花数据集构建一个数据迭代器,以便在每次迭代时从全部数据集中获取指定数量的数据。(借助深度学习框架中的Dataset类和DataLoader类来实现此功能)
【深度学习】Pytorch 系列教程(十三):PyTorch数据结构:5、数据加载器(DataLoader)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132924381?spm=1001.2014.3001.5502
二、实验环境
本系列实验使用了PyTorch深度学习框架,相关操作如下:
1. 配置虚拟环境
conda create -n DL python=3.7
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
conda install scikit-learn
2. 库版本介绍
软件包 | 本实验版本 | 目前最新版 |
matplotlib | 3.5.3 | 3.8.0 |
numpy | 1.21.6 | 1.26.0 |
python | 3.7.16 | |
scikit-learn | 0.22.1 | 1.3.0 |
torch | 1.8.1+cu102 | 2.0.1 |
torchaudio | 0.8.1 | 2.0.2 |
torchvision | 0.9.1+cu102 | 0.15.2 |
三、实验内容
ChatGPT:
前馈神经网络(Feedforward Neural Network)是一种常见的人工神经网络模型,也被称为多层感知器(Multilayer Perceptron,MLP)。它是一种基于前向传播的模型,主要用于解决分类和回归问题。
前馈神经网络由多个层组成,包括输入层、隐藏层和输出层。它的名称"前馈"源于信号在网络中只能向前流动,即从输入层经过隐藏层最终到达输出层,没有反馈连接。
以下是前馈神经网络的一般工作原理:
输入层:接收原始数据或特征向量作为网络的输入,每个输入被表示为网络的一个神经元。每个神经元将输入加权并通过激活函数进行转换,产生一个输出信号。
隐藏层:前馈神经网络可以包含一个或多个隐藏层,每个隐藏层由多个神经元组成。隐藏层的神经元接收来自上一层的输入,并将加权和经过激活函数转换后的信号传递给下一层。
输出层:最后一个隐藏层的输出被传递到输出层,输出层通常由一个或多个神经元组成。输出层的神经元根据要解决的问题类型(分类或回归)使用适当的激活函数(如Sigmoid、Softmax等)将最终结果输出。
前向传播:信号从输入层通过隐藏层传递到输出层的过程称为前向传播。在前向传播过程中,每个神经元将前一层的输出乘以相应的权重,并将结果传递给下一层。这样的计算通过网络中的每一层逐层进行,直到产生最终的输出。
损失函数和训练:前馈神经网络的训练过程通常涉及定义一个损失函数,用于衡量模型预测输出与真实标签之间的差异。常见的损失函数包括均方误差(Mean Squared Error)和交叉熵(Cross-Entropy)。通过使用反向传播算法(Backpropagation)和优化算法(如梯度下降),网络根据损失函数的梯度进行参数调整,以最小化损失函数的值。
前馈神经网络的优点包括能够处理复杂的非线性关系,适用于各种问题类型,并且能够通过训练来自动学习特征表示。然而,它也存在一些挑战,如容易过拟合、对大规模数据和高维数据的处理较困难等。为了应对这些挑战,一些改进的网络结构和训练技术被提出,如卷积神经网络(Convolutional Neural Networks)和循环神经网络(Recurrent Neural Networks)等。
本系列为实验内容,对理论知识不进行详细阐释
(咳咳,其实是没时间整理,待有缘之时,回来填坑)
0. 导入必要的工具包
import torch
from sklearn.datasets import load_iris
from torch.utils.data import Dataset, DataLoader
Dataset
和DataLoader
类用于处理数据集和数据加载
1. 直接加载鸢尾花数据集
加载鸢尾花数据进行归一化并可选地进行洗牌操作,以便于后续的深度学习任务。
import torch
from sklearn.datasets import load_irisdef load_data(shuffle=True):x = torch.tensor(load_iris().data)y = torch.tensor(load_iris().target)# 数据归一化x_min = torch.min(x, dim=0).valuesx_max = torch.max(x, dim=0).valuesx = (x - x_min) / (x_max - x_min)if shuffle:idx = torch.randperm(x.shape[0])x = x[idx]y = y[idx]return x, y
a. 加载数据集
-
调用
load_iris().data
函数加载数据,并使用torch.tensor
将数据转换为PyTorch张量,将结果赋值给变量x
。 -
调用
load_iris().target
函数加载目标变量,并使用torch.tensor
将数据转换为PyTorch张量,将结果赋值给变量y
。
b. 数据归一化
-
计算矩阵
x
每列的最小值。-
torch.min
函数的dim
参数设置为0表示按列计算最小值,.values
属性获取最小值的张量。
-
-
计算矩阵
x
每列的最大值。-
torch.max
函数的dim
参数设置为0表示按列计算最大值,.values
属性获取最大值的张量。
-
-
x = (x-x_min)/(x_max-x_min)
:对矩阵x
进行归一化处理,将每个元素减去最小值,然后除以最大值与最小值之差。这样可以将数据缩放到0和1之间。
c. 洗牌操作
-
if shuffle:
:如果shuffle
参数为True
,执行以下代码块。-
idx = torch.randperm(x.shape[0])
:生成一个随机排列的索引,范围从0到x
的行数减1。torch.randperm
函数返回一个随机排列的整数序列。 -
x = x[idx]
:根据生成的随机索引对矩阵x
进行行重排,打乱数据的顺序。 -
y = y[idx]
:根据生成的随机索引对向量y
进行行重排,保持目标变量与输入数据的对应关系。
-
-
return x, y
:返回处理后的输入特征矩阵x
和目标变量向量y
。
d. 打印数据
x, y = load_data()
print("Input features (x):")
print(x)
print("Target variables (y):")
print(y)
2. 定义类封装数据
创建一个用于处理鸢尾花数据集的自定义数据集(继承自Dataset类),该自定义数据集类可以用于创建鸢尾花数据集的训练集、验证集或测试集对象,并提供给__getitem__
和__len__
方法,以便能够使用DataLoader
类进行数据加载和批处理操作。
class IrisDataset(Dataset):def __init__(self, mode='train', num_train=120, num_dev=15):super(IrisDataset,self).__init__()x, y = load_data(shuffle=True)if mode == 'train':self.x, self.y = x[:num_train], y[:num_train]elif mode == 'dev':self.x, self.y = x[num_train:num_train + num_dev], y[num_train:num_train + num_dev]else:self.x, self.y = x[num_train + num_dev:], y[num_train + num_dev:]def __getitem__(self, idx):return self.x[idx], self.y[idx]def __len__(self):return len(self.x)
-
class IrisDataset(Dataset):
:定义了一个名为IrisDataset
的类,该类继承自Dataset
类,表示一个自定义的数据集。
a. __init__(
构造函数:用于初始化数据集对象)
-
该函数接受三个参数:
-
mode
表示数据集模式(默认为'train') -
num_train
表示训练样本的数量(默认为120) -
num_dev
表示验证样本的数量(默认为15)。
-
-
super(IrisDataset, self).__init__()
:调用父类Dataset
的构造函数,确保正确地初始化基类。 -
x, y = load_data(shuffle=True)
:调用之前定义的load_data
函数加载数据集。 -
如果数据集模式为'train':
-
将前
num_train
个训练样本赋值给类的成员变量self.x
和self.y
,表示训练数据集。
-
-
如果数据集模式为'dev':
-
将从第
num_train
个样本开始的num_dev
个样本赋值给类的成员变量self.x
和self.y
,表示验证数据集。
-
-
如果数据集模式不是'train'也不是'dev':
-
将从第
num_train + num_dev
个样本开始的剩余样本赋值给类的成员变量self.x
和self.y
,表示测试数据集。
-
b. __getitem__(
获取指定索引处的样本)
-
return self.x[idx], self.y[idx]
:根据索引idx
返回对应位置的输入特征和目标变量。
c. __len__(
获取数据集的长度)
-
return len(self.x)
:返回数据集的长度,即样本数量。
3. 构建数据集(批量加载训练、验证、测试集)
batch_size = 16# 分别构建训练集、验证集和测试集
train_dataset = IrisDataset(mode='train')
dev_dataset = IrisDataset(mode='dev')
test_dataset = IrisDataset(mode='test')train_loader = DataLoader(train_dataset, batch_size=batch_size,shuffle=True)
dev_loader = DataLoader(dev_dataset, batch_size=batch_size)
test_loader = DataLoader(test_dataset, batch_size=1, shuffle=True)
- 使用自定义的数据封装类加载鸢尾花数据集的训练集、验证集和测试集,并使用
DataLoader
进行批量加载。train_dataset
是要加载的数据集对象,batch_size
是批量大小,表示每个批次的样本数量,shuffle=True
表示在每个迭代周期中对数据进行随机洗牌。- 将验证集数据集加载到
dev_loader
中,未指定shuffle
参数,默认为False
,不进行洗牌。 - 将测试集数据集加载到
test_loader
中,将batch_size
设置为1,表示每个批次只包含一个样本,同时指定shuffle=True
,在每个迭代周期中对数据进行随机洗牌。
4. 代码整合
# 导入必要的工具包
import torch
from sklearn.datasets import load_iris
from torch.utils.data import Dataset, DataLoader# 此函数用于加载鸢尾花数据集
def load_data(shuffle=True):x = torch.tensor(load_iris().data)y = torch.tensor(load_iris().target)# 数据归一化x_min = torch.min(x, dim=0).valuesx_max = torch.max(x, dim=0).valuesx = (x - x_min) / (x_max - x_min)if shuffle:idx = torch.randperm(x.shape[0])x = x[idx]y = y[idx]return x, y# 构建自己的数据集,继承自Dataset类
class IrisDataset(Dataset):def __init__(self, mode='train', num_train=120, num_dev=15):super(IrisDataset, self).__init__()x, y = load_data(shuffle=True)if mode == 'train':self.x, self.y = x[:num_train], y[:num_train]elif mode == 'dev':self.x, self.y = x[num_train:num_train + num_dev], y[num_train:num_train + num_dev]else:self.x, self.y = x[num_train + num_dev:], y[num_train + num_dev:]def __getitem__(self, idx):return self.x[idx], self.y[idx]def __len__(self):return len(self.x)batch_size = 16# 分别构建训练集、验证集和测试集
train_dataset = IrisDataset(mode='train')
dev_dataset = IrisDataset(mode='dev')
test_dataset = IrisDataset(mode='test')train_loader = DataLoader(train_dataset, batch_size=batch_size,shuffle=True)
dev_loader = DataLoader(dev_dataset, batch_size=batch_size)
test_loader = DataLoader(test_dataset, batch_size=1, shuffle=True)
相关文章:
【深度学习实验】前馈神经网络(七):批量加载数据(直接加载数据→定义类封装数据)
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 直接加载鸢尾花数据集 a. 加载数据集 b. 数据归一化 c. 洗牌操作 d. 打印数据 2. 定义类封装数据 a. __init__(构造函数:用于初始化数据集对象) b.…...
气体放电模拟装置中1Pa~101kPa范围内的真空度控制技术
摘要:针对微间隙气体放电特性分析中需要对不同真空压力进行精密控制的要求,本文提出了相应的解决方案。解决方案采用了双路调节技术,由真空计、电控针阀和真空压力控制器组成进气和排气控制回路,可实现真空度1Pa~101kPa全量程范围…...
华为OD机试 - 构成正方形的数量 - 数据结构map(Java 2023 B卷 100分)
目录 专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》。 …...
sql on条件判断是要注意null值
我是因为用了merge into语法,然后on条件中判断的字段是可配置的,这就导致了,有时候判断条件多的情况下,判断的字段会碰到有null值的情况,如果on两边的字段都是null,null和null对比就会导致结果为false&…...
9.22(一):数组扁平化
ES6的flat方法 const arr[1,2,[33,44,5,[6,7]],3]// es6中的flat方法function arr1() { //数组自带的扁平化方法,flat的参数代表的是需要展开几层, //如果是Infinity的话,就是不管嵌套几层,全部都展开return arr.flat(Infinity) } let resul…...
【vue2第十九章】手动修改ESlint错误 和 配置自动化修改ESlint错误
目标:认识代码规范 代码规范:一套写代码的约定规则。例如:“赋值符号的左右是否需要空格”,"一句结束是否是要加;”等 为什么要使用代码规范? 在团队开发时,提高代码的可读性。 在创建项目时,我们选择的就是一套完整的代码…...
计算机网络常见面试题
目录 一、谈一谈对OSI七层模型和TCP/IP四层模型的理解? 答:OSI七层模型主要分为: TCP/IP四层协议: 二、谈谈TCP协议的3次握手过程? 三、TCP协议为什么要3次握手?2次,4次不行吗? …...
springboot整合MeiliSearch轻量级搜索引擎
一、Meilisearch与Easy Search点击进入官网了解,本文主要从小微型公司业务出发,选择meilisearch来作为项目的全文搜索引擎,还可以当成来mongodb来使用。 二、starter封装 1、项目结构展示 2、引入依赖包 <dependencies><dependenc…...
禁用鼠标的侧边按键
新买了个鼠标,整体都不错,就是鼠标左侧有两个按键,大拇指经常无意触碰到,造成误操作。 就想着关闭侧边按键功能。以下这批文章帮了大忙! 鼠标侧键屏蔽,再也不用担心按到侧键了。_禁用鼠标侧键_挣扎的蓝藻…...
【C语言】数组和指针刷题练习
指针和数组我们已经学习的差不多了,今天就为大家分享一些指针和数组的常见练习题,还包含许多经典面试题哦! 一、求数组长度和大小 普通一维数组 int main() {//一维数组int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));//整个数组…...
2023年中国研究生数学建模竞赛D题解题思路
为了更好的帮助大家第一天选题,这里首先为大家带来D题解题思路,分析对应赛题之后做题阶段可能会遇到的各种难点。 稍后会带来D题的详细解析思路,以及相关的其他版本解题思路 成品论文等资料。 赛题难度评估:A、B>C>E、F&g…...
在编译源码的环境下,搭建起Discuz!社区论坛和WordPress博客的LNMP架构
目录 一.编译安装nginx 二.编译安装MySQL 三.编译安装PHP 四.安装论坛 五.安装wordpress博客 六.yum安装LNMP架构(简要过程参考) 一.编译安装nginx 1)关闭防火墙,将安装nginx所需软件包传到/opt目录下 systemctl stop fire…...
腾讯面试题:无网络环境,如何部署Docker镜像?
亲爱的小伙伴们,大家好!我是小米,很高兴再次和大家见面。今天,我要和大家聊聊一个特别有趣的话题——腾讯面试题:无网络环境,如何部署Docker镜像?这可是一个技术含量颇高的问题哦!废…...
医学影像信息(PACS)系统软件源码
PACS系统是PictureArchivingandCommunicationSystems的缩写,与临床信息系统(ClinicalInformationSystem,CIS)、放射学信息系统(RadiologyInformationSystem,RIS)、医院信息系统(HospitalInformationSystem,HIS)、实验室信息系统(L…...
【01】FISCOBCOS的系统环境安装
我们选择ubuntu系统 01 https://www.ubuntu.org.cn/global 02 03下载最新版 04等待下载 00提前准备好VM,点击创建新的虚拟机 01选择自定义安装 02一直下一步到 03 04 05其他的默认即可 06 07 08 09 10 11一直默认到下面 12 13等待安装 安装后重启即可…...
flutter 权限和图片权限之前的冲突
权限插件 permission_handler: ^9.2.0想调起相册和视频,这个插件只有Permission.storage.request().,获取存储权限。 问题是android 13的一些手机,系统设置没有存储权限,用了上面这个权限,三次拒绝后就永久拒绝了&…...
OpenCV(四十八):读取视频和保存视频
OpenCV(Open Source Computer Vision Library)是一个功能强大的开源计算机视觉库,它提供了丰富的功能,包括读取和保存视频。下面分别演示如何使用OpenCV来读取视频和保存视频。 1. 读取视频: 在OpenCV中我们要获取一…...
如何在react/next.js app中的同级组件间传递数据
这篇文章也可以在我的博客中查看 问题 为什么会有这么奇怪的需求?在事情真正发生前真的难说,但真遇到一个需要这么做的情况。 最近想做一个网页时钟,它的结构如下: 时钟(计算时间,组织各个要素ÿ…...
软件需求文档、设计文档、开发文档、运维文档大全
在软件开发过程中,文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程,还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用,以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档要求…...
排序算法-----归并排序
目录 前言: 归并排序 1. 定义 2.算法过程讲解 2.1大致思路 2.2图解示例 拆分合成步骤 编辑 相关动态图 3.代码实现(C语言) 4.算法分析 4.1时间复杂度 4.2空间复杂度 4.3稳定性 前言: 今天我们就开始学习新的排序算法…...
docker 配置 gpu版pytorch环境--部署缺陷检测--Anomalib
目录 一、docker 配置 gpu版pyhorch环境1、显卡驱动、cuda版本、pytorch cuda版本三者对应2、拉取镜像 二、部署Anomalib1、下载Anomalib2、创建容器并且运行3、安装Anomalib进入项目路径安装依赖测试: 一、docker 配置 gpu版pyhorch环境 1、显卡驱动、cuda版本、p…...
为什么定时发朋友圈会更有效呢?
这是因为在同一时段 发送的好友朋友圈 无法有效分散用户的注意力 导致曝光度难以提升 而通过推广定时发朋友圈 可根据自己的粉丝活跃度 设置发圈时间 让每一条朋友圈都能高效 传递到更多的好友手中 这样,曝光度自然而然地就大大提升了! 1.多个号…...
【跟小嘉学 PHP 程序设计】一、PHP 开发环境搭建
系列文章目录 【跟小嘉学 PHP 程序设计】一、PHP 开发环境搭建 文章目录 系列文章目录@[TOC](文章目录)前言一、PHP介绍二、Centos 安装 PHP2.1、安装并启动 Nginx2.2、安装并启动 mariadb2.3、安装 rh-php2.4、添加 Nginx 配置2.5、Nginx 服务三、使用 Docker 为 PHP 部署开发…...
【zookeeper】zk选举、使用与三种节点简介,以及基于redis分布式锁的缺点的讨论
这里我准备了4台虚拟机,从node1到node4,其myid也从1到4. 一,zk server的启动和选举 zk需要至少启动3台Server,按照配置的myid,选举出参与选举的myid最大的server为Leader。(与redis的master、slave不同&a…...
Unity截图生成图片 图片生成器 一键生成图片
使用Unity编辑器扩展技术实现快速截图功能 效果: 里面没有什么太难的技术,直接上源码吧 注意!代码需要放在Editor文件下才能正常运行 using System; using UnityEditor; using UnityEngine;[ExecuteInEditMode] public class Screenshot …...
Matlab图像处理-区域特征
凹凸性 设P是图像子集S中的点,若通过的每条直线只与S相交一次,则称S为发自P的星形,也就是站在P点能看到S的所有点。 满足下列条件之一,称此为凸状的: 1.从S中每点看,S都是星形的; 2.对S中任…...
golang 自动生成文件头
安装koroFileHeader控件 打开首选项,进入设置,配置文件头信息"fileheader.customMade": {"Author": "lmy","Date": "Do not edit", // 文件创建时间(不变)// 文件最后编辑者"LastEditors"…...
Excel中的宏、VBA
一、宏是什么? EXCEL MACRO 是一种记录和播放工具,它仅记录您的 Excel 步骤,并且宏将根据需要播放任意多次。 VBA 宏可自动执行重复任务,从而节省了时间。 这是一段可在 Excel 环境中运行的编程代码,但您无需成为编码…...
2023华为杯数学建模研赛思路分享——最全版本A题深度解析
问题回顾: WLAN网络信道接入机制建模 1. 背景 无线局域网(WLAN, wireless local area network)也即Wi-Fi广泛使用,提供低成本、高吞吐和便利的无线通信服务。基本服务集(BSS, basic service set)是WLAN的…...
【校招VIP】测试方案之测试需求分析
考点介绍: 需求分析就是要弄清楚用户需要的是什么功能,用户会怎样使用系统。这样我们测试的时候才能更加清楚的知道系统该怎么样运行,才能更好的设计测试用例,才能更好的测试。 测试方案之测试需求分析-相关题目及解析内容可点击…...
如何做网站关键词收录/中文搜索引擎大全
一、源码特点 jsp 中小企业CRM系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&am…...
wordpress 幻灯片/新浪博客
我们大家都知道,JS有个很经典的浮点运算精度丢失问题,今天我们就来聊一聊这个问题产生的原因,以及该如何去解决它呢? 先来看下面的代码,0.10.2的结果不等于0.3,这是不是超出了我们之前的认知呢?毕竟0.10.20.3可是我们小学就已经学会了的东西,到这里怎么就不一样了呢? 0.1 …...
东莞市官网网站建设品牌/盘古百晋广告营销是干嘛
文章目录 chage的作用 使用举例列出用户密码的有效期设置密码过期时间为立即过期(0)设置登陆必须修改密码设置gaosh3 密码60天后过期,至少7天后才能修改密码,密码过期前7天开始收到告警信息 总结 chage 详解 1. chage的作用 作…...
cms建站系统哪家好/2024年新冠疫情最新消息今天
我们在调试WebPart或者EventHandler之类的自定义组件时会遇到如何定位部署的网站集所对应的w3wp.exe进程的问题,方法如下 :方法1.直接开始运行,输入cmd,再输入iisapp可以列出当前所有IIS中的WebApplication所对应的w3wp.exe进程,后…...
外国做的中国动画视频网站/培训总结
多余的话不说,直接看代码: 1) 在 common/config/main.php 写入配置代码 1 // 配置翻译信息2 i18n > [3 translations > [4 app* > [ //app表示整个文件可以替换掉5 class &g…...
网站的设计与开发论文/网站宣传方法
红黑树插入和删除结点的全程演示 作者:July、saturnman。时间:二零一一年三月二十八日。出处:http://blog.csdn.net/v_JULY_v。声明:版权所有,侵权必究。----------------------------------- 引言:目前国内…...