当前位置: 首页 > news >正文

数据集(Dataset)和数据加载器(DataLoader)-pytroch学习3

pytorch网站学习

处理数据样本的代码往往会变得很乱、难以维护;理想情况下,我们希望把数据部分的代码和模型训练部分分开写,这样更容易阅读、也更好维护。

简单说:数据和模型最好“分工明确”,不要写在一起。

PyTorch 提供了两个数据处理的“基本工具”:

  • torch.utils.data.Dataset

  • torch.utils.data.DataLoader
    它们可以用来处理官方内置的数据集,也可以用来加载你自己的数据。

    Dataset 存储样本及其对应的标签,而 DataLoader 则在 Dataset 周围封装了一个迭代器,以便轻松访问这些样本。

  • Dataset:用于存储样本和对应的标签,类似一个“数据库”,它记录了所有数据。

  • DataLoader:基于 Dataset 封装了一个可迭代对象,方便你在训练过程中一次取出一个批次(batch)的数据。

  • Dataset = 数据仓库,负责“存”数据

  • DataLoader = 快递员,负责“送”数据,一批一批送给模型训练用

PyTorch 提供了 Dataset(负责存数据)和 DataLoader(负责送数据)两个工具,可以方便地管理、加载各种数据

PyTorch 的领域库提供了许多预加载的数据集(例如 FashionMNIST),这些数据集都是 torch.utils.data.Dataset 的子类,,例如,FashionMNIST 数据集就是一个专门用于服装图像识别的预加载数据集,它已经按照 Dataset 接口组织好了数据,你可以直接用来训练和测试模型

参数解释:

root:这是用来存放训练/测试数据的文件夹路径。

train:指定是加载训练集(train=True)还是测试集(train=False)。

download=True:如果你指定的 root 路径下没有数据,它会自动联网下载。

transformtarget_transform

  • transform 是对图像特征做的变换(比如转为张量、归一化等)

  • target_transform 是对标签做的变换(比如 one-hot 编码)

from torchvision import datasets, transforms# 定义图像的预处理操作:把图片转成张量
transform = transforms.ToTensor()# 加载训练集
train_data = datasets.FashionMNIST(root="data",          # 数据保存目录train=True,           # 加载训练集download=True,        # 如果没有就下载transform=transform   # 图像预处理
)# 加载测试集
test_data = datasets.FashionMNIST(root="data",train=False,          # 加载测试集download=True,transform=transform
)

 如何手动取出数据集里的样本,并把它们可视化显示出来

遍历和可视化数据集
我们可以像访问列表那样,用下标手动访问数据集:training_data[index]
我们使用 matplotlib 来把训练数据中的一些样本画出来进行可视化。

什么是 training_data[index]?
在 PyTorch 中,像 training_data 这种数据集对象,其实可以像列表(list)一样使用:image, label = training_data[0]  # 取出第一个样本(包括图像和标签)
image 是一张 28×28 的图(张量)label 是它的标签(比如 “T-shirt/top”)
# 标签编号和对应的文字(类别)之间的映射关系
labels_map = {0: "T-Shirt",1: "Trouser",2: "Pullover",3: "Dress",4: "Coat",5: "Sandal",6: "Shirt",7: "Sneaker",8: "Bag",9: "Ankle Boot",
}
figure = plt.figure(figsize=(8, 8))  # 创建一个图形窗口,大小为 8x8 英寸
cols, rows = 3, 3                    # 准备画一个 3 行 3 列 的图像网格(共 9 张图)
for i in range(1, cols * rows + 1):  # 循环9次(从1到9)sample_idx = torch.randint(len(training_data), size=(1,)).item()  # 随机选一个样本索引img, label = training_data[sample_idx]  # 从训练集中取出图像和标签
​figure.add_subplot(rows, cols, i)  # 添加一个子图(3x3 的第 i 个格子)plt.title(labels_map[label])       # 设置图像标题为标签名称(比如 “Sneaker”)plt.axis("off")                    # 不显示坐标轴plt.imshow(img.squeeze(), cmap="gray")  # 显示图像(压缩维度 + 灰度图)
plt.show()  # 显示整张图(9张图一起展示)​

如何自己创建一个自定义的数据集(Custom Dataset),让 PyTorch 能读取自己的图片和标签,比如本地的一些图片文件和 CSV 表格。

为你自己的文件创建一个自定义数据集
自定义 Dataset 类时,必须实现三个函数:__init__(初始化)、__len__(返回样本总数) 和 __getitem__(获取指定样本)

如果你不是用官方的数据集(比如 FashionMNIST),而是用你自己文件夹里的图片 + CSV 表里的标签,那就需要自己写一个“自定义数据集类”:

  • __init__():定义数据集在哪里、怎么加载图片和标签

  • __len__():告诉 PyTorch 你一共有多少张图(样本数量)
    __len__ 函数
    这个函数的作用是:返回数据集中样本(图片)的数量。

  • __getitem__():定义怎么通过索引取出一张图和它的标签(比如 dataset[0]

import os                     # 用于路径拼接
import pandas as pd           # 用于读取 CSV 文件
from torchvision.io import read_image  # 用于读取图像(转为张量)
from torch.utils.data import Dataset   # 自定义数据集要继承这个类
# 自定义图片数据集类,继承自 PyTorch 的 Dataset 基类
class CustomImageDataset(Dataset):# 初始化函数:加载CSV标签表、图片文件夹路径、图像和标签的预处理方法def __init__(self, annotations_file, img_dir, transform=None, target_transform=None):self.img_labels = pd.read_csv(annotations_file)  # 读取CSV文件,包含图片文件名和对应标签self.img_dir = img_dir                            # 图片所在的文件夹路径self.transform = transform                        # 图像的预处理方法(例如缩放、归一化)self.target_transform = target_transform          # 标签的预处理方法(例如转one-hot)# 返回数据集中样本的总数量def __len__(self):return len(self.img_labels)  # 返回 CSV 中的行数(也就是图片数量)# 按照索引返回一张图片和它的标签def __getitem__(self, idx):# 根据索引从CSV中获取图片文件名,并拼接成完整路径img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])# 使用 torchvision.io.read_image 读取图片(返回的是Tensor格式)image = read_image(img_path)# 获取对应的标签(CSV第二列)label = self.img_labels.iloc[idx, 1]# 如果定义了图像预处理,就应用它if self.transform:image = self.transform(image)# 如果定义了标签预处理,就应用它if self.target_transform:label = self.target_transform(label)# 返回一对数据:(图像,标签)return image, label

__init__ 函数
当我们创建 Dataset 数据集对象时,这个 __init__ 函数会被运行一次。
在这个函数中,我们设置好图像所在的文件夹路径、标签文件(CSV),以及两种预处理方法(transform)

这个时候 Python 就会自动去运行你写的 __init__ 函数,完成以下事情:

做什么举例
读入标签文件从 CSV 读出每张图对应的标签
记住图片路径比如你的图片都在 "images/" 文件夹里
保存预处理方法如果你要对图像做缩放、归一化等处理,也在这里传进来

你可以把 __getitem__() 想象成这样一个问题:

你对 PyTorch 说:“嘿,帮我从数据集中拿出第 5 张图像,还有它的标签。”

PyTorch 就会执行你写的 __getitem__(5),然后:

  1. 去 CSV 表里看第5行,拿到图像文件名,比如 img5.png

  2. 拼成路径,比如 images/img5.png

  3. read_image() 把它读成模型能用的格式(张量)

  4. 拿到它的标签,比如 label=2(代表“Pullover”)

  5. 如果你有设置 transform,就先处理一下

  6. 返回 (图像张量, 标签) 给你

使用 DataLoader 为训练准备数据
Dataset(数据集)每次只能取出一条数据(特征和标签)。
而在训练模型时,我们通常希望将样本按小批量(minibatch)送入模型,
并且在每一轮训练(epoch)中
打乱数据的顺序
,以减少模型过拟合,
同时利用 Python 的多进程功能来加快数据的读取速度。

DataLoader 是一个可迭代对象,它通过一个简单的 API 帮我们封装了以上所有复杂操作。

这里的API 就是“别人已经写好的功能接口”,你只要用很简单的方式去“调用它”,就可以完成很复杂的事情。

就像你开车,不用知道发动机怎么工作,你只需要踩油门,这个“油门”就是给你用的 API。

没有 DataLoader 时的问题DataLoader 自动帮你做了什么
一次只能读一张图✅ 自动按 batch_size 读多张图
每次都按固定顺序读✅ 每轮训练前自动打乱数据
读取慢(尤其是大数据)✅ 用多进程后台加速加载数据
写代码复杂✅ 封装好,只要一行就能搞定

 minibatch(中文叫“小批量”)指的是:每次训练时不把所有数据一次性喂给模型,而是一次取出一小部分来训练。举个例子:

你有 10,000 张训练图像,不可能一次性都送给模型(太慢/太耗显存)。

你可以这样设置:

batch_size = 64

就是:每次训练用 64 张图,学完一批,再取下一批。

这种方式叫:小批量训练(mini-batch training)

什么是 shuffle(打乱数据)?

定义:shuffle 指的是:在每轮训练开始前,把训练数据的顺序随机打乱。

 为什么要打乱?

假如你的数据是按类别排好顺序的(比如先全是猫,后全是狗):

模型可能先学猫学很久,突然一下全是狗,这样容易 过拟合某一类,泛化能力差

所以我们会在每个 epoch 前加个参数:

DataLoader(..., shuffle=True)

表示:每一轮训练前,重新随机排序数据。

什么是多进程加载(num_workers)?

定义:PyTorch 可以使用多个“后台工作进程(线程)”同时从磁盘里读取图片,加快加载速度。

举个例子:

你用 DataLoader 加载数据时可以设置:

DataLoader(dataset, batch_size=64, num_workers=4)

意思是:开 4 个后台进程来同时读数据!

就像你点外卖,找了 4 个骑手一起送菜,当然比 1 个骑手送得快。

from torch.utils.data import DataLoadertrain_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)
test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)什么意思啊

这段代码是用 PyTorch 的 DataLoader,将训练数据和测试数据按小批量分组,并在每轮开始时随机打乱顺序,方便高效地进行模型训练和测试。

遍历 DataLoader
我们已经把数据集加载进了 DataLoader,现在可以根据需要对数据集进行迭代(逐批处理)。
下面的每次迭代都会返回一批 train_features(训练特征)和 train_labels(标签),每批包含 64 个样本和对应的标签(即 batch_size=64)。
因为我们设置了 shuffle=True,所以在我们把所有批次迭代完之后,数据会被自动打乱顺序。
(如果你想更精细地控制数据加载的顺序,可以了解一下 PyTorch 的 Sampler 机制。)

Samplers 是 PyTorch 中 更灵活地控制数据加载顺序 的工具。
如果你想自己控制“数据加载顺序”、“打乱方式”、“分组策略”等,就可以用 Sampler 来代替 shuffle=True

Sampler 是一个类,用来控制 DataLoader 在每一轮训练中应该以什么顺序取数据的索引

常见的 Sampler 类型

Sampler 类别作用
SequentialSampler按顺序取数据(默认用于 shuffle=False
RandomSampler随机打乱数据(默认用于 shuffle=True
SubsetRandomSampler只随机抽样部分数据(适合做验证集)
WeightedRandomSampler按权重随机抽样(处理数据不平衡)
# Display image and label.
train_features, train_labels = next(iter(train_dataloader))
print(f"Feature batch shape: {train_features.size()}")
print(f"Labels batch shape: {train_labels.size()}")
img = train_features[0].squeeze()
label = train_labels[0]
plt.imshow(img, cmap="gray")
plt.show()
print(f"Label: {label}")

 从训练集里拿出一批数据,并显示其中一张图片和它的标签

相关文章:

数据集(Dataset)和数据加载器(DataLoader)-pytroch学习3

pytorch网站学习 处理数据样本的代码往往会变得很乱、难以维护;理想情况下,我们希望把数据部分的代码和模型训练部分分开写,这样更容易阅读、也更好维护。 简单说:数据和模型最好“分工明确”,不要写在一起。 PyTor…...

影响RTOS实时性的因素有哪些?

目录 1、任务调度延迟 2、中断处理延迟 3、系统负载 4、任务优先级反转 5、时钟精度 6、内存管理 影响RTOS实时性的因素主要包括任务调度延迟、中断处理延迟、系统负载、任务优先级反转、时钟精度、内存管理等。 1、任务调度延迟 任务调度器是RTOS的核心,当…...

二叉树 递归

本篇基于b站灵茶山艾府的课上例题与课后作业。 104. 二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出&…...

ZLMediaKit 源码分析——[5] ZLToolKit 中EventPoller之延时任务处理

系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一:获取音频和视频设备 第五篇 WebRTC学习二:WebRTC音视频数据采集 第六篇 WebRTC学习三…...

【51单片机】2-6【I/O口】电动车简易防盗报警器实现

1.硬件 51最小系统继电器模块震动传感器模块433M无线收发模块 2.软件 #include "reg52.h" #include<intrins.h> #define J_ON 1 #define J_OFF 0sbit switcher P1^0;//继电器 sbit D0_ON P1^1;//433M无线收发模块 sbit D1_OFF P1^2; sbit vibrate …...

windows下载安装远程桌面工具RealVNC-Server教程(RealVNC_E4_6_1版带注册码)

文章目录 前言一、下载安装包二、安装步骤三、使用VNC-Viewer客户端远程连接&#xff0c;输入ip地址&#xff0c;密码完成连接 前言 在现代工作和生活中&#xff0c;远程控制软件为我们带来了极大的便利。RealVNC - Server 是一款功能强大的远程控制服务器软件&#xff0c;通过…...

C语言的操作系统

C语言的操作系统 引言 操作系统是一种系统软件&#xff0c;它管理计算机硬件和软件资源&#xff0c;并为计算机程序提供公共服务。在现代计算机科学中&#xff0c;操作系统是不可或缺的组成部分&#xff0c;而C语言则是实现高效操作系统的主要编程语言之一。本文将探讨C语言在…...

selectdb修改表副本

如果想修改doris&#xff08;也就是selectdb数据库&#xff09;表的副本数需要首先确定是否分区表&#xff0c;当前没有数据字典得知哪个表是分区的&#xff0c;只能先show partitions看结果 首先&#xff0c;副本数不应该大于be节点数 其次&#xff0c;修改期间最好不要跑业务…...

leetcode数组-有序数组的平方

题目 题目链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/ 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff…...

【python中级】关于Cython 的源代码pyx的说明

【python中级】关于Cython 的源代码pyx的说明 1.背景2.编译3.语法1.背景 Cython 是一个编程语言和工具链,用于将 Python 代码(或类 Python 的代码)编译成 C 语言,再进一步生成高性能的 Python 扩展模块(.so 或 .pyd 文件)。 在 Python 中,.pyx 文件是 Cython 的源代码文…...

开放最短路径优先 - OSPF【LSA详细】

目录 LSA的头部结构 LSA类型 LSA数据包 LSA的主要作用是传递路由信息。 LSA的头部结构 共占20个字节&#xff0c;不同类型的LSA头部字段部分都是相同的。 链路状态老化时间(Link-State Age) 2个字节。指示该条LSA的老化时间&#xff0c;即它存在了多长时间&#xff0c;单位…...

PyTorch:解锁AI新时代的钥匙

揭开PyTorch面纱 对于许多刚开始接触人工智能领域的朋友来说&#xff0c;PyTorch这个名字或许既熟悉又陌生。熟悉在于它频繁出现在各类技术论坛和新闻报道中&#xff1b;而陌生则源于对这样一个强大工具背后运作机制的好奇。简单来说&#xff0c;PyTorch是一个开源库&#xff…...

欧几里得算法求最大公约数、最小公倍数

这段代码就是不断用较小数和余数来更新 a 和 b&#xff0c;直到余数变为 0&#xff0c;最后返回的 a 就是最大公约数。 #include <iostream> using namespace std;//最大公约数 int gcd(int a, int b){//这个循环表示只要 b 不是 0&#xff0c;就继续进行。//因为当 b …...

QEMU源码全解析 —— 块设备虚拟化(14)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(13) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回开始解析VirtioDeviceClass的realize函数virtio_blk_device_realize(),再来回…...

深入理解AOP:面向切面编程的核心概念与实战应用

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

3500 阶乘求和

3500 阶乘求和 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;2023、思维、省赛 &#x1f4d6; &#x1f4da; import java.util.Scanner;public class Main {public static void main(String[] args) {long sum 0;for(int i1;i<50;i) { // 之后取模都相等su…...

正则入门到精通

​ 一、正则表达式入门​ 正则表达式本质上是一串字符序列&#xff0c;用于定义一个文本模式。通过这个模式&#xff0c;我们可以指定要匹配的文本特征。例如&#xff0c;如果你想匹配一个以 “abc” 开头的字符串&#xff0c;正则表达式可以写作 “^abc”&#xff0c;其中 …...

Mysql 行级锁在什么样的情况下会升级为表级锁?

在 MySQL 中&#xff0c;行级锁通常由 InnoDB 存储引擎使用&#xff0c;因为它支持高并发和细粒度的锁定。通常情况下&#xff0c;InnoDB 在执行诸如 UPDATE、DELETE 或 SELECT FOR UPDATE 等操作时&#xff0c;会为被修改的数据行加锁&#xff08;行级锁&#xff09;。但是&am…...

docker部署kkfileview

拉取 KKFileView 镜像 docker pull keking/kkfileview或指定版本 docker pull keking/kkfileview:4.1.0运行 KKFileView 容器 docker run -d \--name kkfileview \-p 8012:8012 \--restart always \keking/kkfileview-d&#xff1a;后台运行 -p 8012:8012&#xff1a;将容器…...

优选算法的妙思之流:分治——快排专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、快速排序 二、例题讲解 2.1. 颜色分类 2.2. 排序数组 2.3. 数组中的第K个最大元素 2.4. 库存管理 III 一、快速排序 分治&#xff0c;简单理解为“分而治之”&#xff0c;将一个大问题划分为若干个…...

蓝桥杯嵌入式第15届真题-个人理解+解析

个人吐槽 #因为最近蓝桥杯快要开始了&#xff0c;我舍不得米白费了&#xff0c;所以就认真刷刷模拟题&#xff0c;但是我感觉真题会更好&#xff0c;所以就看了一下上届的真题。不过它是真的长&#xff0c;我看着就头晕&#xff0c;但是还是把几个模块认真分析了一下就还是很容…...

数据库系统概述 | 第二章课后习题答案

本文为数据库系统概论&#xff08;第五版&#xff09;【高等教育出版社】部分课后答案 如有错误&#xff0c;望指正 &#x1f47b; 习题 &#x1f47b; 答案...

深入解析CPU主要参数:选购与性能评估指南

引言 中央处理器&#xff08;CPU&#xff09;作为计算机的"大脑"&#xff0c;其性能直接决定了整机的运算能力和响应速度。无论是组装新电脑、升级旧系统还是选购笔记本电脑&#xff0c;理解CPU的关键参数都至关重要。本文将从技术角度全面解析CPU的各项主要参数&am…...

Lettuce与Springboot集成使用

一、Lettuce核心优势与Spring Boot集成背景 Lettuce特性 基于Netty的非阻塞I/O模型&#xff0c;支持同步/异步/响应式编程线程安全&#xff1a;共享单连接实现多线程并发操作&#xff0c;性能衰减低原生支持Redis集群、哨兵、主从架构&#xff0c;自动重连机制保障高可用Spring…...

【Kafka基础】ZooKeeper在Kafka中的核心作用:分布式系统中枢神经系统

在分布式系统的世界里&#xff0c;协调和管理多个节点间的状态是一项复杂而关键的任务。Apache Kafka作为一款高性能的分布式消息系统&#xff0c;其设计哲学是"专为单一目的而优化"——即高效处理消息流。为了实现这一目标&#xff0c;Kafka选择将集群协调管理的重任…...

专业的情商测评工具:EQ-i在线测评系统

专业的情商测评工具&#xff1a;EQ-i在线测评系统 基于巴昂情商量表的专业情商评估工具&#xff0c;帮助您更好地了解自己的情商水平。 什么是EQ-i&#xff1f; EQ-i&#xff08;Emotional Quotient Inventory&#xff09;是由Reuven Bar-On开发的情商量表&#xff0c;是国际上…...

Ubuntu安装Podman教程

1、先修改apt源为阿里源加速 备份原文件&#xff1a; sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 修改源配置&#xff1a; vim sources.list删除里面全部内容后&#xff0c;粘贴阿里源&#xff1a; deb http://mirrors.aliyun.com/ubuntu/ focal main re…...

7.训练篇5-毕设

使用23w张数据集-vit-打算30轮-内存崩了-改为batch_size 8 我准备用23w张数据集&#xff0c;太大了&#xff0c;这个用不了&#xff0c;所以 是否保留 .stack() 加载所有图片&#xff1f;情况建议✅ 小数据集&#xff08;<2w张&#xff0c;图像小&#xff09;想加快速度可…...

java数据结构-哈希表

什么是哈希表 最理想的搜索方法 , 即就是在查找某元素时 , 不进行任何比较的操作 , 一次直接查找到需要搜索的元素 , 可以达到这种要求的方法就是哈希表. 哈希表就是通过构造一种存储结构 , 通过某种函数使元素存储的位置与其关键码位形成一 一映射的关系 , 这样在查找元素的时…...

Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV

Linux错误(6)X64向量指令访问地址未对齐引起SIGSEGV Author: Once Day Date: 2025年4月4日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Linux实…...

SpringBoot配置文件多环境开发

目录 一、设置临时属性的几种方法 1.启动jar包时&#xff0c;设置临时属性 ​2.idea配置临时属性 3.启动类中创建数组指定临时属性 二、多环境开发 1.包含模式 2.分组模式 三、配置文件的优先级 1.bootstrap 文件优先&#xff1a; 2.特定配置文件优先 3.文件夹位置优…...

解锁健康密码:拥抱活力养生生活

在追求高品质生活的今天&#xff0c;健康养生成为了人们关注的焦点。它不仅关乎当下的生活质量&#xff0c;更是对未来的有力投资。 合理的饮食是健康养生的基石。一日三餐&#xff0c;应遵循 “五谷为养&#xff0c;五果为助&#xff0c;五畜为益&#xff0c;五菜为充” 的原则…...

手动将ModelScope的模型下载到本地

一、ModelScope 介绍 ModelScope 官网地址&#xff1a; https://www.modelscope.cn/home 模型库地址&#xff1a;https://www.modelscope.cn/models 文档中心&#xff1a;https://www.modelscope.cn/docs/home ModelScope旨在打造下一代开源的模型即服务共享平台&#xff0c;为…...

【Git】“warning: LF will be replaced by CRLF”的解决办法

一、原因分析 不同操作系统的换行符标准不同&#xff1a; • Windows&#xff1a;使用 CRLF&#xff08;\r\n&#xff09;表示换行&#xff1b; • Linux/Mac&#xff1a;使用 LF&#xff08;\n&#xff09;表示换行 Git 检测到本地文件的换行符与仓库设置或目标平台不兼容时…...

Linux常用基础命令应用

目录 一、文件与目录管理 1. ​​基础导航与查看​​ 2. ​​文件操作核心命令​​ 二、文本处理与日志分析 1. ​​查看与过滤​​ 2. ​​组合命令与管道​​ 三、系统管理与权限控制 1. ​​进程与资源监控​​ 2. ​​权限与用户管理​​ 四、网络与远程操作 1. …...

C++11可变参数模板单例模式

单例模式 该示例代码采用C11标准&#xff0c;解决以下问题&#xff1a; 通过类模板函数实现不同类型单例&#xff1b;单例类构造函数支持不同的个数&#xff1b;消除代码重复 示例代码 .h文件如下&#xff1a; //C11Singleton.h文件 #pragma oncetemplate <typename T&…...

JVM 有哪些垃圾回收器

垃圾收集算法 标记-复制算法(Copying): 将可用内存按容量划分为两个区域,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面, 然后再把已使用过的内存空间一次清理掉。 标记-清除算法(Mark-Sweep): 算法分为“标记” 和“清除”两个…...

6. 链式结构(Chain)的奥秘:从LLMChain到RouterChain

引言&#xff1a;从“单兵作战”到“流水线革命” 2023年某电商平台客服系统因处理复杂咨询需手动串联多个AI模块&#xff0c;平均响应时间长达12秒。引入LangChain链式架构后&#xff0c;工单处理速度提升8倍&#xff0c;错误率下降45%。本文将深入解析链式编程范式&#xff…...

TypeScript语言的操作系统原理

TypeScript语言的操作系统原理 引言 操作系统是计算机系统中最重要的组成部分之一&#xff0c;它为应用程序提供了一个运行环境&#xff0c;并管理着计算机硬件和软件资源。随着编程语言的发展&#xff0c;特别是TypeScript的流行&#xff0c;许多开发者开始探索将这种强类型…...

时间序列入门

时间序列入门 第一章 时间序列概述1.1 时间序列简介1.1.1 时间序列定义1.1.2 时间序列分量1.1.3 时间序列分类 第二章 时间序列绘图2.1 单变量时序绘制2.2 多变量时序绘制 第一章 时间序列概述 1.1 时间序列简介 1.1.1 时间序列定义 在进行时间序列之前&#xff0c;需要学习…...

VirtualBox安装FnOS

1.下载FnOS镜像 下载网址&#xff1a; https://www.fnnas.com/2.创建虚拟机 虚拟机配置如图所示&#xff08;注意操作系统类型和网卡配置&#xff09; &#xff08;注意启动顺序&#xff09; 3.启动虚拟机 网卡类型选择桥接的Virtual Adapter 如果没有IP地址或者IP地址无法…...

函数栈帧的创建与销毁

函数栈帧的创建与销毁 函数栈帧简介认识寄存器解析函数栈帧的创建与销毁 函数栈帧简介 我们在编程的过程中经常会听见函数栈帧这个词汇&#xff0c;那到底什么是函数栈帧呢&#xff1f;接下来就为大家解答一下&#xff0c;我们都知道&#xff0c;一个函数的创建是需要去开辟空…...

Scheme语言的算法

Scheme语言的算法探索 引言 Scheme是一种以表达式为基础的编程语言&#xff0c;属于Lisp家族&#xff0c;因其简洁、灵活的语法而受到广泛关注。Scheme不仅适合教学&#xff0c;还被用于实际应用开发和研究。本文将深入探讨Scheme语言的算法&#xff0c;包括其基本特性、常用…...

[C++面试] new、delete相关面试点

一、入门 1、说说new与malloc的基本用途 int* p1 (int*)malloc(sizeof(int)); // C风格 int* p2 new int(10); // C风格&#xff0c;初始化为10 new 是 C 中的运算符&#xff0c;用于在堆上动态分配内存并调用对象的构造函数&#xff0c;会自动计算所需内存…...

(回滚莫队)洛谷 P10268 符卡对决 题解

居然还没调出来&#xff1f;感觉是数据类型的问题&#xff0c;真是吓人。先把思路写一下吧。 题意 灵梦一共有 n n n 张符卡&#xff0c;每张卡都有一个能力值&#xff0c;对于第 i i i 张卡&#xff0c;它的能力值为 a i a_i ai​&#xff0c;现在她想从中选出两张符卡并…...

C语言复习笔记--指针(3)

接上篇文章C语言复习笔记--指针(2)-CSDN博客我们继续进行指针的复习. 二级指针 指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那指针变量的地址取出来后要存在在什么变量中呢?这就是⼆级指针. ⼆级指针的运算见下: 指针数组 指针数组概念 既然要联系数组和指针就涉…...

Fastjson 处理 JSON 生成与解析指南

Fastjson 是阿里巴巴开源的高性能 JSON 库&#xff0c;适用于 Java 对象的序列化&#xff08;生成 JSON&#xff09;和反序列化&#xff08;解析 JSON&#xff09;。以下是详细使用指南&#xff1a; 1. 添加依赖 <dependency><groupId>com.alibaba</groupId>…...

深度学习数据集划分比例多少合适

在机器学习和深度学习中&#xff0c;测试集的划分比例需要根据数据量、任务类型和领域需求灵活调整。 1. 常规划分比例 通用场景 训练集 : 验证集 : 测试集 60% : 20% : 20% 适用于大多数中等规模数据集&#xff08;如数万到数十万样本&#xff09;&#xff0c;平衡了训练数…...

查询当前用户的购物车和清空购物车

业务需求&#xff1a; 在小程序用户端购物车页面能查到当前用户的所有菜品或者套餐 代码实现 controller层 GetMapping("/list")public Result<List<ShoppingCart>> list(){List<ShoppingCart> list shoppingCartService.shopShoppingCart();r…...

大模型如何引爆餐饮与电商行业变革

大模型如何引爆餐饮与电商行业变革&#xff1f; 一、时代背景&#xff1a;大模型重构产业逻辑的底层动力 1. 技术跃迁催生效率革命 2025年&#xff0c;大模型技术迎来"普惠临界点"。李开复在中关村论坛指出&#xff0c;大模型推理成本每年降低10倍&#xff0c;使得…...