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

PyTorch生成式人工智能实战(2)——PyTorch基础

PyTorch生成式人工智能实战(2)——PyTorch基础

    • 0. 前言
    • 1. 创建 PyTorch 张量
    • 2. PyTorch 张量索引和切片
    • 3. PyTorch 张量形状
    • 4. 在 PyTorch 张量数学运算
    • 小结
    • 系列链接

0. 前言

为了训练生成式人工智能模型,我们可以使用多种数据格式,如原始文本、音频文件、图像像素以及数字数组等。然而,在 PyTorch 中创建的深度神经网络无法直接接受这些数据格式作为输入。因此,我们必须先将它们转换为神经网络能够理解和接受的格式。具体来说,需要先把各种形式的原始数据转换为 PyTorch 张量(用于表示和处理数据的基本数据结构),然后再将它们输入到深度神经网络模型中。因此,在本节中,我们将学习有关数据类型的基础知识,如何创建各种类型的 PyTorch 张量,以及如何在深度学习中使用它们。

1. 创建 PyTorch 张量

在训练深度神经网络时,我们将数字数组作为输入提供给模型。根据生成模型所要生成的内容,这些数字有不同的类型。例如,在生成图像时,输入是原始像素,表示为介于 0255 之间的整数,但为了训练稳定,我们会将其转换为介于 -11 之间的浮动点数;而在生成文本时,会有一个类似于字典的“词汇表”,输入是一个整数序列,表示每个单词在字典中的对应项。
假设我们想要计算班级上学生的平均身高。首先,我们可以收集学生们的身高数据(单位为厘米),并将其存储在一个 Python 列表中:

heights = [189, 168, 183, 180, 183, 193, 182, 170,173, 193, 168, 178, 182, 185, 189, 183,178, 180, 182, 183, 191, 163, 173, 173,170, 188, 177, 183, 173, 174, 178, 175,185, 171, 175, 183, 182, 179, 188, 185,178, 183, 180, 183, 188, 183]

我们可以通过 PyTorchtensor() 方法将 Python 列表转换为 PyTorch 张量:

import torch
heights_tensor = torch.tensor(heights, dtype=torch.float64) # 指定 PyTorch 张量中的数据类型

使用 tensor() 方法中的 dtype 参数可以指定数据类型。PyTorch 张量的默认数据类型是 float32,即 32 位浮点数。在以上代码中,我们将数据类型转换为 float64,即双精度浮点数。float64 提供比 float32 更精确的结果,但计算时间更长,精度和计算成本之间存在权衡,使用哪种数据类型取决于具体任务的需要。下表列出了不同的数据类型及其对应的 PyTorch 张量类型,包括具有不同精度的整数和浮点数:

PyTorch 张量类型tensor()中的dtype参数值数据类型
FloatTensortorch.float32 or torch.float32位浮点型
HalfTensortorch.float16 or torch.half16位浮点型
DoubleTensortorch.float64 or torch.double64位浮点型
CharTensortorch.int88 位整数(有符号)
ByteTensortorch.uint88 位整数(无符号)
ShortTensortorch.int16 or torch.short16位整数(有符号)
IntTensortorch.int32 or torch.int32位整数(有符号)
LongTensortorch.int64 or torch.long64位整数(有符号)

可以通过两种方式来创建一个具有特定数据类型的张量。第一种方法是使用 PyTorch 类,如上表第一列所指定。第二种方法是使用 torch.tensor() 方法,并通过 dtype 参数指定数据类型(该参数的值在上表的第二列中列出)。例如,要将 Python 列表 [1, 2, 3] 转换为一个包含 32 位整数的 PyTorch 张量,可以使用以下两种方法:

# 使用 torch.IntTensor() 指定张量类型
t1=torch.IntTensor([1, 2, 3])
# 使用 dtype=torch.int 指定张量类型
t2=torch.tensor([1, 2, 3], dtype=torch.int)
print(t1)
print(t2)

输出结果如下所示:

 tensor([1, 2, 3], dtype=torch.int32)tensor([1, 2, 3], dtype=torch.int32)

有时,我们需要创建一个所有值都为 0PyTorch 张量。例如,在生成对抗网络中,我们创建一个全是 0 的张量来表示伪造样本的标签。PyTorch 中的 zeros() 方法能够根据指定张量的形状生成一个所有元素为零的张量。在 PyTorch 中,张量是一个 n 维数组,它的形状是一个表示每个维度大小的元组。生成一个形状为 (2, 3) 的全零张量:

tensor1 = torch.zeros(2, 3)
print(tensor1)

输出结果如下:

tensor([[0., 0., 0.],[0., 0., 0.]])

该张量的形状为 (2, 3),意味着该张量是一个二维数组,第一维有两个元素,第二维有三个元素。在这里,我们没有指定数据类型,因此使用默认的数据类型 float32
有时,我们需要创建一个所有值都为 1PyTorch 张量。例如,在生成对抗网络中,我们创建一个所有值为 1 的张量,作为真实样本的标签。使用 ones() 方法创建一个所有值为 1 的三维张量:

tensor2 = torch.ones(1,4,5)
print(tensor2)

输出结果如下所示,可以看到生成了一个三维的 PyTorch 张量,该张量的形状为 (1, 4, 5)

tensor([[[1., 1., 1., 1., 1.],[1., 1., 1., 1., 1.],[1., 1., 1., 1., 1.],[1., 1., 1., 1., 1.]]])

除了 Python 列表外,我们也可以在张量构造函数中使用 NumPy 数组:

import numpy as np
nparr=np.array(range(10))
pt_tensor=torch.tensor(nparr, dtype=torch.int)
print(pt_tensor)

输出结果如下所示:

tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=torch.int32)

2. PyTorch 张量索引和切片

可以使用方括号 ([]) 来对 PyTorch 张量进行索引和切片,就像对 Python 列表进行操作一样。索引和切片允许我们操作张量中的一个或多个元素,而不是操作所有元素。继续以学生身高为例,如果我们想查看第 3 个学生的身高:

height = heights_tensor[2]
print(height)
# tensor(183., dtype=torch.float64)

我们也可以使用负索引从张量的末尾进行计数,例如,要查找倒数第2个学生的身高,可以使用索引 -2

height = heights_tensor[-2]
print(height)
# tensor(188., dtype=torch.float64)

如果我们想知道张量 heights_tensor 中倒数后 5 位学生的身高,可以通过切片获取张量的一部分:

five_heights = heights_tensor[-5:]
print(five_heights)
# tensor([183., 180., 183., 188., 183.], dtype=torch.float64)

冒号 (:) 用于分隔起始和结束索引。如果没有提供起始索引,默认值是 0;如果没有提供结束索引,则会包含张量中的最后一个元素,负索引表示从末尾开始计数。

3. PyTorch 张量形状

PyTorch 张量有一个 shape 属性,用于获取张量的维度。了解 PyTorch 张量的形状非常重要,因为形状不匹配会导致操作时发生错误。例如,想了解张量 heights_tensor 的形状:

print(heights_tensor.shape)

输出结果如下所示,表明 heights_tensor 是一个包含 46 个值的 1D 张量:

torch.Size([46])

我们也可以改变 PyTorch 张量的形状。为了学习如何改变张量形状,首先我们将高度从厘米转换为英尺。因为 1 英尺大约等于 30.48 厘米,我们可以通过将张量除以 30.48 来实现:

heights_in_feet = heights_tensor / 30.48
print(heights_in_feet)

输出结果如下所示,新的张量 heights_in_feet 存储的是英尺单位的高度:

输出结果

我们可以使用 PyTorch 中的 cat() 方法来连接这两个张量:

heights_2_measures = torch.cat([heights_tensor,heights_in_feet], dim=0)
print(heights_2_measures.shape)
# torch.Size([92])

dim 参数用于在各种张量操作中指定操作执行的维度。在以上代码中,dim=0 表示我们沿着第一个维度连接这两个张量。结果张量是一个 1D 张量,包含 92 个值,其中一些是以厘米为单位的高度,另一些是以英尺为单位的高度。将其重新调整为 246 列的形状,这样第一行表示厘米单位的高度,第二行表示英尺单位的高度:

heights_reshaped = heights_2_measures.reshape(2, 46)

新的张量 heights_reshaped 是一个 2D 张量,形状为 (2, 46)。我们也可以使用方括号对多维张量进行索引和切片。例如,打印倒数第 2 位学生的身高(英尺单位):

print(heights_reshaped[1,-2])
# tensor(6.1680, dtype=torch.float64)

heights_reshaped[1, -2] 告诉 Python 查找第二行倒数第二列的值。需要注意的是,引用张量中的标量值所需的索引数量与张量的维度相同。这就是为什么我们在 1D 张量 heights_tensor 中使用一个索引来定位值,而在 2D 张量 heights_reshaped 中使用两个索引来定位值。

4. 在 PyTorch 张量数学运算

我们可以使用不同的方法对 PyTorch 张量进行数学运算,如 mean()median()sum()max() 等。例如,要找出 46 位学生的身高中位数(单位:厘米):

print(torch.median(heights_reshaped[0,:]))
# tensor(182., dtype=torch.float64)

heights_reshaped[0,:] 返回张量 heights_reshaped 的第一行的所有值,torch.median(heights_reshaped[0,:]) 返回第一行的中位数。
要获取每行的平均身高,可以在 mean() 方法中使用参数 dim=1

print(torch.mean(heights_reshaped,dim=1))

dim=1 参数表示通过合并列(索引为 1 的维度)来计算平均值,实际上是沿着索引为 0 的维度计算平均值。输出结果如下所示,结果如下,两行的平均值分别是 180.0652 厘米和 5.9077 英尺:

tensor([180.0652,   5.9077], dtype=torch.float64)

获取最高的学生身高:

values, indices = torch.max(heights_reshaped, dim=1)
print(values)
print(indices)

输出如下所示,torch.max() 方法返回两个张量,一个是包含最高学生身高的张量(单位为厘米和英尺),另一个是包含该学生索引的张量:

tensor([193.0000,   6.3320], dtype=torch.float64)
tensor([5, 5])

小结

PyTorch 张量是多维数据的基本结构,支持灵活的形状变换、索引操作和数学计算。数据类型的选择(如精度权衡)和形状匹配是深度学习中的重要考量。通过张量操作,可高效实现数据预处理、特征整合及模型输入输出处理。

系列链接

PyTorch生成式人工智能实战:从零打造创意引擎
PyTorch生成式人工智能实战(1)——神经网络与模型训练过程详解

相关文章:

PyTorch生成式人工智能实战(2)——PyTorch基础

PyTorch生成式人工智能实战(2)——PyTorch基础 0. 前言1. 创建 PyTorch 张量2. PyTorch 张量索引和切片3. PyTorch 张量形状4. 在 PyTorch 张量数学运算小结系列链接 0. 前言 为了训练生成式人工智能模型,我们可以使用多种数据格式&#xff…...

解决高德地图AMapUtilCoreApi、NetProxy类冲突

问题: Duplicate class com.amap.apis.utils.core.api.AMapUtilCoreApi found in modules jetified-3dmap-10.0.600 (com.amap.api:3dmap:10.0.600) and jetified-search-9.7.1 (com.amap.api:search:9.7.1) Duplicate class com.amap.apis.utils.core.api.NetProx…...

java—14 ZooKeeper

一、ZooKeeper简介 ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务 是一种复杂的过程,ZooKeeper通过简单的架构和API解决了这个问题。ZooKeeper运行开 发人员专注于核心应用程序逻辑,而不必担心应用程序的分…...

特征存储的好处:特征存储在机器学习开发中的优势

随着企业寻求提升机器学习生产力和运营能力 (MLOps),特征存储 (Feature Store) 的普及度正在迅速提升。随着 MLOps 技术的进步,特征存储正成为机器学习基础设施的重要组成部分,帮助企业提升模型的性能和解释能力,并加速新模型与生产环境的集成。这些存储充当集中式存储库,…...

【Promethus(普罗米修斯)介绍安装及使用】

一、系统介绍 1、什么是Prometheus? Prometheus:不仅是一款时间序列数据库,在整个生态上还是一套完整的监控系统。同时,还涉及许多以“explore”命名的客户端数据采集工具以及pushgateway网关。 官网:https://prometheus.io/ 文献:https://prometheus.io/docs/introdu…...

力扣热题100题解(c++)—矩阵

73.矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 int m matrix.size(); // 行数int n matrix[0].size(); // 列数bool firstRowZero false; // 标记第一行是否包含 0bool f…...

Spring Boot Controller 单元测试撰写

文章目录 引言标准用法必需依赖项核心注解说明代码示例 当涉及静态方法时的测试策略必需依赖项核心注解说明代码示例 引言 之前在编写 Controller 层的单元测试时,我一直使用 SpringBootTest 注解,但它会加载整个 Spring 应用上下文,资源开销…...

MVCC详解

目录 undo日志版本链 read view一致性视图 MVCC过程分析 读事务&写事务 Multi-Version Concurrency Control,多版本并发控制在读已提交和可重复读隔离级别下都实现了MVCC机制 undo日志版本链 一行数据被修改后,MySQL会保留修改前的数据(u…...

【通关函数的递归】--递归思想的形成与应用

目录 一.递归的概念与思想 1.定义 2.递归的思想 3.递归的限制条件 二.递归举例 1.求n的阶乘 2.顺序打印一个整数的每一位 三.递归与迭代 前言:上篇博文分享了扫雷游戏的实现,这篇文章将会继续分享函数的递归相关知识点,让大家了解并掌握递归的思…...

Python爬虫实战:移动端逆向工具Fiddler经典案例

一、引言 在移动互联网迅猛发展的当下,移动端应用产生了海量的数据。对于开发者而言,获取这些数据对于市场调研、竞品分析、数据挖掘等工作具有重要意义。Fiddler 作为一款功能强大的 Web 调试代理工具,能够有效捕获、分析和修改移动端的网络请求,为开发者深入了解移动端网…...

从平台工程视角出发,重塑云原生后端的工程体系

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从 DevOps 到平台工程,云原生后端的演进逻辑 云原生的广泛应用,使得后端系统的开发、部署与运维逐渐从“编写业务代码”演进为“构建工程平台”。过去,后端开发者通常将注意力集中于 API 编写…...

【Hive入门】Hive分区与分桶深度解析:优化查询性能的关键技术

引言 在大数据领域,Apache Hive作为构建在Hadoop之上的数据仓库工具,因其类SQL的查询语言(HiveQL)和良好的扩展性而广受欢迎。然而,随着数据量的增长,查询性能往往成为瓶颈。本文将深入探讨Hive中两种关键的数据组织技术——分区(…...

Pytorch中的Dataset和DataLoader

1. PyTorch数据处理的核心概念 在PyTorch中,数据处理主要依赖两个核心组件: torch.utils.data.Dataset:定义如何访问数据集(单个样本的数据和标签)。torch.utils.data.DataLoader:负责批量加载数据、打乱数据、并行加载等。1.1 为什么需要Dataset和DataLoader? 问题:深…...

中介者模式:解耦对象间复杂交互的设计模式

中介者模式:解耦对象间复杂交互的设计模式 一、模式核心:用中介者统一管理对象交互,避免两两直接依赖 当系统中多个对象之间存在复杂的网状交互时(如 GUI 界面中按钮、文本框、下拉框的联动),对象间直接调…...

IEEE综述 | 车道拓扑推理20年演进:从程序化建模到车载传感器

导读 车道拓扑推理对于高精建图和自动驾驶应用至关重要,从早期的程序化建模方法发展到基于车载传感器的方法,但是很少有工作对车道拓扑推理技术进行全面概述。为此,本文系统性地调研了车道拓扑推理技术,同时确定了未来研究的挑战和…...

手撕C++STL list:深入理解双向链表的实现

目录 1. 引言 3. list 类的实现 (1) 基本结构 (2) 初始化与清理 (3) 插入与删除 (4) 常用接口 (4) 常用接口 4. 测试代码 5. 总结 1. 引言 在C STL中,list是一个基于双向链表的容器,支持高效的头尾插入/删除操作(O(1)时间复杂度&…...

QMT学习课程Day1

我们先从交易的最基础,如何进行下单,最为简答的下单,帮助大家建立自信心。 首先导入相关函数: #encoding:gbk import pandas as pd import numpy as np import datetime import pandas as pd import numpy as np import talib i…...

【Rust结构体】Rust结构体详解:从基础到高级应用

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

Java面试实战:音视频场景下的微服务架构与缓存技术剖析

面试场景描述 谢飞机,一位自称“全栈工程师”的程序员,来到一家互联网大厂参加Java开发岗位的面试。面试官是一位严肃的技术专家,他希望通过一系列问题考察谢飞机的实际技术水平。 第一轮提问(基础问题) 面试官&…...

Vue 3 的核心组合式 API 函数及其完整示例、使用场景和总结表格

以下是 Vue 3 的核心组合式 API 函数及其完整示例、使用场景和总结表格&#xff1a; 1. ref 作用 创建一个响应式引用值&#xff0c;用于管理基本类型或单个值的响应式状态。 示例 <template><div><p>Count: {{ count }}</p><button click&quo…...

Kotlin学习基础知识大全(上)

文章目录 Kotlin基础知识全面解析第一章&#xff1a;Kotlin语言概述1.1 Kotlin的发展历程1.2 Kotlin的设计目标1.3 Kotlin的应用领域1.4 Kotlin与Java的比较 第二章&#xff1a;Kotlin基础语法2.1 变量与常量2.2 基本数据类型数字类型示例&#xff1a;字符和字符串示例&#xf…...

【Java面试笔记:进阶】18.什么情况下Java程序会产生死锁?如何定位、修复?

死锁(Deadlock)是指两个或多个线程因竞争资源而无限期阻塞的现象。 1. 死锁的定义与产生原因 定义:死锁是一种程序状态,多个线程或进程因循环依赖而永久处于等待状态,无法继续执行。 根据 Coffman 条件,死锁产生需同时满足以下四个必要条件: 互斥(Mutual Exclusion)…...

PS Mac Photoshop 2025 for Mac图像处理 PS 2025安装笔记

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、Anticc简化版安装1.1双击运行软件&#xff0c;安装1.2 解决来源身份不明的开发者问题**此代码为打开&#xff1a;系统偏好设置 – 隐私与安全性&#xff0c;中的【任何来源】&#xff0c;如下图&#xff1a;**1.3 再次运行…...

HarmonyOS 框架基础知识

参考文档&#xff1a;HarmonyOS开发者文档 第三方库&#xff1a;OpenHarmony三方库中心仓 基础特性 Entry&#xff1a;关键装饰器 Components&#xff1a;组件 特性EntryComponent​​作用范围仅用于页面入口可定义任意可复用组件​​数量限制​​每个页面有且仅有一个无数量…...

LabVIEW实现Voronoi图绘制功能

该 LabVIEW 虚拟仪器&#xff08;VI&#xff09;借助 MathScript 节点&#xff0c;实现基于手机信号塔位置计算 Voronoi 图的功能。通过操作演示&#xff0c;能直观展示 Voronoi 图在空间划分上的应用。 各部分功能详细说明 随机地形创建部分 功能&#xff1a;根据 “Maximum a…...

centos7的环境下ollama 如何卸载

在 CentOS 7 环境下卸载 ollama&#xff0c;可以按照以下步骤操作。假设 ollama 是通过手动安装的&#xff0c;以下是卸载的详细步骤。 1. 停止所有运行中的 ollama 进程 在卸载之前&#xff0c;确保所有与 ollama 相关的进程都已停止。 查找并停止进程 ps aux | grep ollam…...

中心极限定理(CLT)习题集 · 答案与解析篇

中心极限定理(CLT)习题集 答案与解析篇 与题目篇一一对应。若有其他解法欢迎在评论区补充。 1. 概念与判断题 1.1 经典叙述 若 (X_1,X_2,\dots) i.i.d.,满足 (E[X_1]=\mu,;0<\sigma^2:=\operatorname{Var}(X_1)<\infty)。 则 [ Z_n=\frac{\sum_{k=1}^{n}(X_k-\mu)}…...

Spring Cloud Gateway配置双向SSL认证(完整指南)

本文将详细介绍如何为Spring Cloud Gateway配置双向SSL认证,包括证书生成、配置和使用。 目录结构 /my-gateway-project ├── /certs │ ├── ca.crt # 根证书 │ ├── ca.key # 根私钥 │ ├── gateway.crt # 网关证书 │ ├── …...

中间系统-SPF计算

SPF计算 isis如何计算路由&#xff1a;以自己为根构建SPF树&#xff0c;之后填充叶子。 <R1>display isis lsdb 0000.0000.0001.00-00 verbose //查看lsp的详细信息 SOURCE 0000.0000.0001.00 //源节点系统&#xff0c;用于标识产生该LSP的路由器…...

立马耀:通过阿里云 Serverless Spark 和 Milvus 构建高效向量检索系统,驱动个性化推荐业务

作者&#xff1a;厦门立马耀网络科技有限公司大数据开发工程师 陈宏毅 背景介绍 行业 蝉选是蝉妈妈出品的达人选品服务平台。蝉选秉持“陪伴达人赚到钱”的品牌使命&#xff0c;致力于洞悉达人变现需求和痛点&#xff0c;提供达人选高佣、稳变现、速响应的选品服务。 业务特…...

Diffusion inversion后的latent code与标准的高斯随机噪音不一样

可视化latents_list如下; 可视化最后一步与标准的噪声&#xff1a; 能隐约看出到最后一步还是会有“马”的形状 整个代码&#xff08;及可视化代码如下&#xff09;&#xff1a; ## 参考freeprompt(FPE)的代码 import os import torch import torch.nn as nn import torch.n…...

C语言-函数-1

以下是我初学C语言的笔记记录&#xff0c;欢迎在评论区留言补充 一&#xff0c;函数分为几类 * 函数分为两类&#xff1a; 一类是库函数&#xff1b;一类是自定义函数 * 库函数&#xff1a; 系统自己带的&#xff0c;在使用时候&#xff0c;要用到头文件&#xff1b; 查询库函…...

AXOP34032: 40V/40µA 轨到轨输入输出双通道运算放大器

AXOP34032是一款通用型高压低功耗双通道运算放大器&#xff0c;产品的工作电压为2.5V至40V&#xff0c;具有1.2MHz的带宽&#xff0c;压摆率为 0.7V/μs&#xff0c;单路静态电流为40A。该产品非常适合需要较高耐压的低功耗应用。 产品可选关断功能(AXOP34032S)。 主要特性 2…...

HTML5 服务器发送事件 (Server-Sent Events):实现网页自动获取服务器更新

一、引言 在现代 Web 应用开发中,实时性和动态交互性变得越来越重要。HTML5 引入的服务器发送事件(Server-Sent Events,简称 SSE)为网页获取来自服务器的实时更新提供了一种简单而有效的解决方案。与传统方式中网页需主动询问服务器是否有更新不同,SSE 能够让更新自动推送…...

如何创建和使用 Hive 视图

一、Hive 视图的基本概念 Hive 视图是一种虚拟表,其内容由查询语句定义,本身不存储实际数据。当查询视图时,Hive 会动态执行视图定义中的查询逻辑并返回结果。视图的核心作用是简化复杂查询、提供数据抽象和实现权限控制。例如,通过视图可以隐藏底层表的复杂关联关系,或限…...

快速体验tftp文件传输(嵌入式设备)

一、参考资料 Linux tftp 命令 | 菜鸟教程 Ubuntu最新版本(Ubuntu22.04LTS)安装Tftp服务及其使用教程-CSDN博客 Windows下的Tftpd32(Tftpd64)软件下载和使用教程-集成了Tftp服务器、客户端-CSDN博客 tftpd32 tftpd64文件传输安装和使用教程【图文并茂】-CSDN博客 二、快速…...

数据库进阶之MySQL 程序

1.目标 1> 了解mysqlId服务端程序 2> 掌握mysql客户端程序的使用 3> 了解工具包中的其他程序 2. MySQL程序简介 本章介绍 MySQL 命令⾏程序以及在运⾏这些程序时指定选项的⼀般语法(如:mysql -uroot -p)。 对常⽤程序进⾏详细的讲解(实用工具的使用方法)&#xf…...

细说STM32单片机FreeRTOS信号量和互斥量及二值信号量的应用实例

目录 一、信号量和互斥量概述 1、二值信号量 2、计数信号量 3、互斥量 4、递归互斥量 5、相关函数概述 &#xff08;1&#xff09; 负责创建的函数 &#xff08;2&#xff09; 负责释放和获取的函数 &#xff08;3&#xff09;负责返回数据的函数 二、二值信号量使用…...

云原生之认识DDD

一、DDD是什么? 领域驱动设计(DDD) 做为一种软件工程的方法论,它可以帮助我们设计高质量的软件,或者说任何工程的设计都需要方法论,不论是城市设计、建筑设计、室内设计。 比如没有方法论的情况下楼是可以盖起来的,或许整个楼道和窗户上挂满了电话线、闭路线、电线?下水…...

Kingbase 数据库物理备份与恢复操作手册

版本环境&#xff1a;KingbaseES V8R6 适用对象&#xff1a;DBA / 运维工程师 / 技术支持人员 目标用途&#xff1a;生产环境灾备保障、全量迁移、异地容灾恢复 一、物理备份操作流程 物理备份是指直接对数据库实例的物理文件进行复制&#xff0c;具备完整性强、恢复速度快等特…...

高等数学同步测试卷 同济7版 试卷部分 上 做题记录 第四章 不定积分同步测试卷 A卷

第四章 不定积分同步测试卷 A卷 一、单项选择题(本大题共5小题&#xff0c;每小题3分&#xff0c;总计15分) 1. 2. 3. 4. 5. 二、填空题(本大题共5小题,每小题3分,总计15 分) 6. 7. 8. 9. 10. 三、求解下列各题(本大题共5小题,每小题6分,总计30…...

【刷题Day25】用户态和内核态、Reactor、虚拟内存(浅)

什么是用户态和内核态&#xff1f; 用户态&#xff08;User Mode&#xff09;和内核态&#xff08;Kernel Mode&#xff09;是操作系统中的两种运行模式&#xff0c;用于区分应用程序与操作系统内核的操作权限。 两者区别在于权限级别&#xff1a; 用户态&#xff1a;应用程…...

使用Qt Quick Controls创建自定义日历组件

目录 引言相关阅读1. DayOfWeekRow2. MonthGrid3. WeekNumberColumn 项目结构及实现工程结构图代码实现及解析1. 组件封装2. 主界面实现 运行效果 总结下载链接 引言 Qt6 Quick框架提供了一套丰富的日历相关组件&#xff0c;包括 MonthGrid、DayOfWeekRow 和 WeekNumberColumn…...

Java 富文本转word

前言&#xff1a; 本文的目的是将传入的富文本内容(html标签&#xff0c;图片)并且分页导出为word文档。 所使用的为docx4j 一、依赖导入 <!-- 富文本转word --><dependency><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId&…...

基于 Spring Boot 瑞吉外卖系统开发(七)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;七&#xff09; 新增菜品页面 菜品管理页面提供了一个“新增菜品”按钮&#xff0c;单击该按钮时&#xff0c;会打开新增菜品页面。 菜品分类列表 首先要获取分类列表数据。 请求路径/category/list&#xff0c;请求方法GE…...

react 子组件暴露,父组件接收

// Child.jsx import React, { forwardRef, useImperativeHandle, useState } from react; import { Form, Input } from antd;const Child forwardRef((props, ref) > {const [form] Form.useForm();const [customState, setCustomState] useState(默认值);useImperativ…...

如何在Spring Boot中配置自定义端口运行应用程序

Spring Boot 应用程序默认在端口 8080 上运行嵌入式 Web 服务器&#xff08;如 Tomcat、Jetty 或 Undertow&#xff09;。然而&#xff0c;在开发、测试或生产环境中&#xff0c;开发者可能需要将应用程序配置为在自定义端口上运行&#xff0c;例如避免端口冲突、适配微服务架构…...

5.第五章:数据分类的方法论

文章目录 5.1 传统分类方法5.1.1 基于规则的分类方法5.1.2 基于统计的分类方法5.1.3 传统分类方法的局限性 5.2 现代分类技术5.2.1 神经网络分类模型5.2.2 深度学习分类方法5.2.3 现代分类技术的优势 5.3 创新分类方法5.3.1 小样本学习方法5.3.2 零样本学习方法5.3.3 主动学习方…...

如何在 Unity 中导入 gltf /glb 文件

遗憾的是&#xff0c;默认情况下&#xff0c;Unity 无法导入 gltf 文件。 我们有 个好消息要告诉你 gltf&#xff0c;有一种方法可以将 glb 文件格式导入 Unity&#xff01; 看完这篇文章后&#xff0c;让我们将 “gltf&#xff0c; glb” 文件放入 Unity 中&#xff0c;并将其…...

Docker部署一款开源的极简服务器监控工具Ward内网穿透远程使用

文章目录 前言1.关于Ward2.Docker部署3.简单使用ward4.安装cpolar内网穿透5. 配置ward公网地址6. 配置固定公网地址总结 前言 各位小伙伴们&#xff0c;你们是不是也遇到过这样的情况&#xff1a;每次打开服务器管理界面&#xff0c;密密麻麻的数据和图表看得你眼花缭乱&#…...