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

PyTorch 入门与核心概念详解:从基础到实战问题解决

PyTorch 入门与核心概念详解:从基础到实战问题解决

前言

用PyTorch 编写 Transformer 模型时遇到了多个错误,包括维度不匹配、NaN 损失、注意力权重未记录以及 OpenMP 库初始化等问题。
本文基于以上,对 PyTorch 的基本解释,并对模型代码调试中遇到的问题进行总结。

一、PyTorch 是什么?

PyTorch 是一个基于 Python 的开源机器学习框架,由 Facebook 开发,主要用于构建和训练深度神经网络。它结合了动态计算图的灵活性和 GPU 加速的高性能,成为学术研究和工业界的主流选择之一。

二、PyTorch 核心概念与核心功能

1. 张量(Tensor)—— 数据的“通用语言”

  • 定义:张量是 PyTorch 中处理数据的基本结构,类似于多维数组,支持 CPU 和 GPU 上的运算。
  • 常见类型
    • torch.Tensor:默认浮点型张量(32位)。
    • torch.LongTensor:长整型(用于标签、索引)。
    • torch.BoolTensor:布尔型(用于掩码)。
  • 关键操作
    import torch# 创建张量
    x = torch.tensor([1, 2, 3])  # 一维张量
    y = torch.zeros((3, 4))      # 3x4 全零张量
    z = x.to("cuda")             # 移动到 GPU(若可用)# 维度变换
    batch = torch.randn(1920, 60, 5, 4)  # 类似用户数据形状 (N, T, D, F)
    batch = batch.permute(0, 1, 3, 2)    # 调整维度顺序(如 Transformer 要求的 (N, T, D))
    

2. 自动微分(Autograd)—— 梯度计算的“魔法”

  • PyTorch 通过 autograd 模块自动计算张量的梯度,只需在计算前设置 requires_grad=True
  • 核心机制
    • 计算图(Computational Graph):记录运算路径,反向传播时自动求导。
    • 反向传播(Backward):调用 loss.backward() 自动计算所有参数的梯度。
  • 示例
    w = torch.tensor(3.0, requires_grad=True)
    b = torch.tensor(1.0, requires_grad=True)
    x = torch.tensor(2.0)
    y_pred = w * x + b    # 构建计算图
    loss = (y_pred - 5.0) ** 2  # 定义损失
    loss.backward()       # 反向传播,计算 dw, db
    print(w.grad)         # 输出 4.0(dL/dw = 2*(2w + b -5)*x = 2*(6+1-5)*2=4)
    

3. 神经网络模块(nn.Module)—— 模型构建的“脚手架”

  • 自定义模型需继承 nn.Module,并实现 __init__(初始化参数)和 forward(前向传播)。
  • 用户问题相关:Transformer 模型维度匹配
    • 报错 AssertionError: was expecting embedding dimension of 64, but got 320 通常是因为输入维度与模型参数不匹配。
      原因:Transformer 的 embed_dim(嵌入维度)需与输入特征维度一致。例如,若输入最后一维是特征维度(如用户数据中 X 的形状为 (N, T, D, F),可能需要先将最后两维合并或调整)。
    • 正确做法
      import torch.nn as nn
      import torch.nn.functional as Fclass TransformerModel(nn.Module):def __init__(self, embed_dim=64, nhead=8):super().__init__()self.embedding = nn.Linear(4*5, embed_dim)  # 假设输入最后两维是特征(5,4),合并为 20 维,映射到 embed_dimself.transformer_encoder = nn.TransformerEncoder(nn.TransformerEncoderLayer(embed_dim, nhead),num_layers=6)self.fc = nn.Linear(embed_dim, 5)  # 输出维度与 y 的最后一维一致(用户 y 形状为 (N,5))def forward(self, x):# x 形状假设为 (N, T, D, F) = (1920, 60, 5, 4),需先调整为 (N, T, D*F)N, T, D, F = x.shapex = x.reshape(N, T, D*F)  # 变为 (1920, 60, 20)x = self.embedding(x)     # 映射到 embed_dim=64,形状 (1920, 60, 64)x = x.permute(1, 0, 2)    # Transformer 要求输入形状为 (T, N, D)memory = self.transformer_encoder(x)  # 编码后形状 (T, N, D)memory = memory.permute(1, 0, 2)      # 恢复为 (N, T, D)output = self.fc(memory.mean(dim=1))  # 平均时间维度,输出 (N,5)return output
      

4. 数据加载与预处理——避免“垃圾进,垃圾出”

  • 用户问题:y 中存在 nan 或 inf 值
    • 训练前需检查数据:
      if torch.isnan(y).any() or torch.isinf(y).any():print("y 中存在非法值!")# 处理方式:删除含非法值的样本,或用均值/中位数填充clean_mask = torch.isfinite(y).all(dim=1)  # 确保每个样本的所有标签都合法X, y = X[clean_mask], y[clean_mask]
      
  • 数据形状调整:PyTorch 模型输入通常要求批次优先(Batch-First),如 (N, T, D),需根据模型要求调整维度(如 Transformer 要求输入为 (T, N, D),需用 permute(1, 0, 2) 转换)。

5. 训练循环——从数据到模型的“桥梁”

  • 标准流程
    model.train()
    for epoch in range(num_epochs):for batch_x, batch_y in train_loader:batch_x = batch_x.to(device)batch_y = batch_y.to(device)outputs = model(batch_x)loss = criterion(outputs, batch_y)optimizer.zero_grad()  # 梯度清零loss.backward()        # 反向传播optimizer.step()       # 更新参数# 验证集评估model.eval()with torch.no_grad():test_loss = 0.0for batch_x, batch_y in test_loader:outputs = model(batch_x)test_loss += criterion(outputs, batch_y).item()test_loss /= len(test_loader)print(f"Epoch {epoch+1}/{num_epochs} | Train Loss: {loss.item():.4f} | Test Loss: {test_loss:.4f}")
    
  • 用户问题:Test Loss 为 nan
    • 可能原因:
      1. 数据预处理遗漏,测试集包含 nan/inf。
      2. 梯度爆炸,需添加梯度裁剪:
        torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
        
      3. 损失函数与输出维度不匹配(如分类用 MSELoss,回归用 CrossEntropyLoss 等)。

6. 注意力权重记录——可视化的关键

  • 用户问题:注意力权重未被记录
    • Transformer 的 nn.TransformerEncoderLayer 不会自动保存注意力权重,需自定义层并在 forward 中捕获:
      class CustomTransformerEncoderLayer(nn.TransformerEncoderLayer):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)self.attention_weights = None  # 用于保存注意力权重def forward(self, src, src_mask=None, src_key_padding_mask=None):# 重写自注意力部分src2, attn_weights = self.self_attn(src, src, src, src_mask, src_key_padding_mask)self.attention_weights = attn_weights  # 保存权重src = src + self.dropout1(src2)src = self.norm1(src)src = src + self.dropout2(self.linear2(self.dropout(self.activation(self.linear1(src)))))src = self.norm2(src)return src# 在模型中使用自定义层
      self.transformer_encoder = nn.TransformerEncoder(CustomTransformerEncoderLayer(embed_dim, nhead),num_layers=6
      )# 训练后获取权重
      attn_weights = model.transformer_encoder.layers[0].attention_weights.detach().numpy()
      

7. OpenMP 初始化错误——库冲突解决方案

  • 报错信息
    OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
  • 原因:多个库(如 PyTorch 和其他 C++ 扩展)链接了不同版本的 OpenMP 运行时库,导致冲突。
  • 解决方案(不安全但快速修复):
    在程序开头添加:
    import os
    os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
    
    注意:这可能导致性能下降或不可预知的错误,建议检查依赖库版本一致性(如更新 PyTorch 或相关包)。

三、PyTorch 最佳实践与常见坑点

1. 维度匹配原则

  • 输入维度必须与模型定义的 in_featuresembed_dim 等参数严格一致,建议用 print(x.shape) 打印中间变量形状。
  • Transformer 要求输入为 (T, N, D)(时间步优先),而用户数据通常是 (N, T, D),需用 permute(1, 0, 2) 转换。

2. 数据预处理优先级

  • 训练前务必检查数据合法性(torch.isfinite(data).all()),避免 nan/inf 导致梯度计算崩溃。
  • 对连续特征归一化(torchvision.transforms.Normalize),类别特征独热编码(nn.functional.one_hot)。

3. 模型调试技巧

  • 使用 torchsummary 打印模型结构,确认各层输入输出维度:
    from torchsummary import summary
    summary(model, input_size=(60, 5, 4))  # 假设输入形状为 (T, D, F),需根据实际调整
    
  • forward 中添加 print 语句,输出中间张量形状,定位维度错误。

4. 显存与性能优化

  • 模型和数据用 to(device) 统一放置到 CPU 或 GPU(device = "cuda" if torch.cuda.is_available() else "cpu")。
  • 禁用不必要的梯度计算:with torch.no_grad(): 用于验证和推理阶段,减少内存占用。

四、总结

PyTorch 的灵活性源于其动态计算图和模块化设计,但也要求开发者对数据形状、模型结构和训练流程有清晰的理解。针对用户遇到的问题:

  1. 维度不匹配:检查输入特征维度与模型 embed_dimin_features 是否一致,合理调整数据形状(如 reshapepermute)。
  2. 非法数据值:训练前严格清洗数据,去除或修复 nan/inf。
  3. 注意力权重记录:自定义 Transformer 层以保存注意力矩阵,便于后续可视化。
  4. OpenMP 冲突:临时设置环境变量解决,但需注意依赖库版本兼容。

通过掌握张量操作、自动微分、模型构建和训练循环这四大核心,结合具体问题的调试技巧,初学者可以逐步攻克 PyTorch 应用中的常见难题,高效实现神经网络模型。

相关文章:

PyTorch 入门与核心概念详解:从基础到实战问题解决

PyTorch 入门与核心概念详解:从基础到实战问题解决 前言 用PyTorch 编写 Transformer 模型时遇到了多个错误,包括维度不匹配、NaN 损失、注意力权重未记录以及 OpenMP 库初始化等问题。 本文基于以上,对 PyTorch 的基本解释,并对…...

【办公类-99-05】20250508 D刊物JPG合并PDF便于打印

背景需求 委员让我打印2024年2025年4月的D刊杂志,A4彩打,单面。 有很多JPG,一个个JPG图片打开,实在太麻烦了。 我需要把多个jpg图片合并成成为一个PDF,按顺序排列打印。 deepseek写Python代码 代码展示 D刊jpg图片合…...

【C++】手搓一个STL风格的string容器

C string类的解析式高效实现 GitHub地址 有梦想的电信狗 1. 引言:字符串处理的复杂性 ​ 在C标准库中,string类作为最常用的容器之一,其内部实现复杂度远超表面认知。本文将通过一个简易仿照STL的string类的完整实现,揭示其设…...

无实体对话式社交机器人 拟人化印象形成机制:基于多模态交互与文化适配的拓展研究

《如何感知AI对话者:无实体对话式社交机器人拟人化对其印象形成效果影响机制的实验研究》解析 一、研究背景与核心问题 (一)技术背景与研究动机 随着生成式AI技术发展,以ChatGPT、文心一言为代表的无实体对话式社交机器人兴起,用户对其高度拟人化特征有显著需求,如扮演…...

存储器:DDR和独立显卡的GDDR有什么区别?

本文来简要对比DDR(Double Data Rate SDRAM)和GDDR(Graphics Double Data Rate SDRAM)的区别,重点说明它们在设计、性能和应用上的差异: 1. 设计目标与架构 DDR:通用型DRAM,设计为…...

viewDesign里的table内嵌套select动态添加表格行绑定内容丢失

问题 描述 viewDesign里的table内嵌套select&#xff0c;表格的行数是手动点击按钮添加的&#xff0c;添加第一行选择select的内容能正常展示&#xff0c;添加第二行第一行的select的内容消失 代码 <FormItem label"内饰颜色"><Tableclass"mt_10&q…...

vue v-html无法解析<

vue v-html无法解析字符串的小于号 方法一&#xff1a;可以替换成转义符 (实际还是会报错) let str 12345<445667 str.replaceAll(<, <)方法二&#xff1a;可以替换成中文小于号 let str 12345<445667 str.replaceAll(<, &#xff1c;)...

COLT_CMDB_linux_userInfo_20250508.sh修复历史脚本输出指标信息中userName与输出信息不一致问题

#!/bin/bash #IT_BEGIN #IT_TYPE3 #IT SYSTEM_LINUX_AGENTUSERDISCOVER|discovery.user[disc] #原型指标 #IT_RULE SYSTEM_LINUX_AGENTUSERGROUPID|groupId[{#USERNAME}] #IT_RULE SYSTEM_LINUX_AGENTUSERHOME|userHome[{#USERNAME}] #IT_RULE SYSTEM_LINUX_AGENTUSERNAME|user…...

A. Row GCD(gcd的基本性质)

Problem - 1458A - Codeforces 思路&#xff1a; 首先得知道gcd的两个基本性质&#xff1a; (1) gcd(a,b)gcd(a,|b-a|) (2) gcd(a,b,c)gcd(a,gcd(b,c)) 结合题目所给的a1bj&#xff0c;a2bj...... anbj 根据第一条性质得到&#xff1a; gcd(a1bj&#xff0c;a2bj)gcd(…...

k8s术语之Horizontal Pod Autoscaling

应用的资源使用率通常都有高峰和低谷的时候&#xff0c;如何削峰填谷&#xff0c;提高整体的整体资源利用率&#xff0c;让service中的Pod个数自动调整呢&#xff1f;Horizontal Pod Autoscaling:使pod水平自动缩放。这个Object也是最能体现kubernetes之于传统运维价值的地方&a…...

函数级重构:如何写出高可读性的方法?

1. 引言:为什么方法级别的重构如此重要? 在软件开发中,方法(函数)是程序逻辑的基本单元。一个高质量的方法不仅决定了程序是否能正常运行,更直接影响到: 代码的可读性:能否让其他开发者快速理解可维护性:未来修改是否容易出错可测试性:是否便于编写单元测试协作效率…...

手撕基于AMQP协议的简易消息队列-8(单元测试的编写)

在MQTest中编写模块的单元测试 在MQTest中编写makefile文件来编译客户端模块 all:Test_FileHelper Test_Exchange Test_Queue Test_Binding Test_Message Test_VirtualHost Test_Route Test_Consumer Test_Channel Test_Connection Test_VirtualHost:Test_VirtualHost.cpp ..…...

硬件选型:工控机的选择要素

在机器视觉应用中&#xff0c;工控机作为核心计算设备&#xff0c;承担着图像处理、数据分析和设备控制等多重任务。由于机器视觉常常在工业自动化、质量检测和精密控制中发挥重要作用&#xff0c;工控机的选型直接影响系统的性能和可靠性。 1. 应用场景与需求 机器视觉系统广…...

【芯片设计- RTL 数字逻辑设计入门 4.1 -- verilog 组合逻辑和时序逻辑延时比较】

文章目录 Overview时间线简单示意Overview 我们来详细分析下面这段 RTL Code , sbcs_sbbusy 为什么会比 sbcs_sbbusy_nx 慢一拍(晚一个时钟周期变化)。 assign sbcs_sbbusy_nx = set_sbcs_sbbusy;always @(posedge clk or negedge dmi_resetn) beginif (!dmi_resetn) begi…...

关于ubuntu下交叉编译arrch64下的gtsam报错问题,boost中boost_regex.so中连接libicui18n.so.55报错的问题

交叉编译gtsam时遇到的报错信息如下&#xff1a;gtsam需要连接boost&#xff0c; 解决办法&#xff1a; 1.重新编译boost可解决。 2.自己搞定生成一个libicui18n.so.55。 由于我们的boost是公用的&#xff0c;因此1不太可能&#xff08;我试过重新编译完boost,在编译gtsam完…...

IoT平台和AIoT平台的区别

1. 什么是AIoT平台&#xff1f; AIoT&#xff08;人工智能物联网&#xff0c;Artificial Intelligence of Things&#xff09;平台 是 人工智能&#xff08;AI&#xff09; 与 物联网&#xff08;IoT&#xff09; 深度融合的技术框架&#xff0c;通过将AI算法嵌入物联网终端或…...

iOS 模块化开发流程

iOS模块化开发是一种将大型项目拆分为独立、可复用模块的开发模式&#xff0c;能够提升代码可维护性、团队协作效率和动态交付能力。以下是iOS模块化开发的核心流程与关键要点&#xff1a; 一、模块化设计阶段 业务解耦与模块划分 横向分层&#xff1a;基础层&#xff08;网络、…...

云原生安全治理体系建设全解:挑战、框架与落地路径

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:云原生环境下,安全治理正在被重构 在传统IT架构中,安全防护多依赖边界设备(如防火墙、WAF、堡垒机)进行集中式防护。然而,在云原生环境下,这种“边界式”安全模型正面临颠覆。 应用微服务化…...

如何在Vue-Cli中使用Element-UI和Echarts和swiper插件(低版本)

1st.Element-UI 1.1 安装 在终端输入 npm install element-ui 1.2 导入 在全局main.js中全局导入Element-UI&#xff1a; // 导入element-ui组件库 import ElementUI from element-ui; // 导入element-ui组件库的样式 import element-ui/lib/theme-chalk/index.css; // 注…...

[特殊字符]【实战教程】用大模型LLM查询Neo4j图数据库(附完整代码)

&#x1f31f; 核心要点速览 ✅ 基于LangChain框架实现LLM查询Neo4j ✅ 使用Qwen2.5模型(实测Llama3.1查不出内容) ✅ 包含完整数据准备代码实现效果演示 ✅ GitHub/Gitee源码已同步(文末获取) &#x1f6e0;️ 环境准备 1️⃣ 安装Neo4j图数据库 # Windows安装指南参考&…...

Qt获取CPU使用率及内存占用大小

Qt 获取 CPU 使用率及内存占用大小 文章目录 Qt 获取 CPU 使用率及内存占用大小一、简介二、关键函数2.1 获取当前运行程序pid2.2 通过pid获取运行时间2.3 通过pid获取内存大小 三、具体实现五、写在最后 ​ 一、简介 近期在使用软件的过程中发现一个有意思的东西。如下所示&a…...

算法解密:除自身以外数组的乘积问题详解

算法解密:除自身以外数组的乘积问题详解 一、引言 在算法的奇妙旅程中,我们时常会遇到一些看似简单却蕴含深刻智慧的问题,“除自身以外数组的乘积”就是其中之一。这个问题不仅考验我们对数组操作的熟练程度,还要求我们在特定的限制条件下(不能使用除法且时间复杂度为O(n…...

基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(上)

#作者&#xff1a;闫乾苓 文章目录 概念和架构概述主要特点消息传递核心概念Pulsar 的消息模型Pulsar 的消息存储与分发Pulsar 的高级特性架构BrokerBookKeeperZooKeeper 概念和架构 概述 Pulsar 是一个多租户、高性能的服务器到服务器消息传递解决方案。Pulsar 最初由雅虎开…...

信创生态核心技术栈:数据库与中间件

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

CMU-15445(3)——PROJECT#1-BufferPoolManager-Task#1

PROJECT#1-BufferPoolManager 在完成了前面基础的PROJECT#0后&#xff0c;从本节开始才正式进入了CMU-15445的学习&#xff0c;最终目的是构建一个面向磁盘的数据库管理系统。 PROJECT#1 的主要任务是实现数据库管理系统的缓冲池管理器&#xff0c;缓冲池负责在主存缓冲区与持…...

《数据结构初阶》【链式二叉树】

《数据结构初阶》【链式二叉树】 前言&#xff1a;---------------树---------------什么是树&#xff1f;&#x1f4cc;爱心❤小贴士&#xff1a;树与非树&#xff1f;树的基本术语有哪些&#xff1f;关于节点的一些定义&#xff1a;关于树的一些定义&#xff1a;关于森林的定…...

Oracle免费认证来袭

1、Oracle Cloud Infrastructure 2025 Foundations Associate” &#x1f517; 考证地址&#xff1a;https://mylearn.oracle.com/ou/exam-unproctored/oracle-cloud-infrastructure-2025-foundations-associate-1z0-1085-25/148056/241954 2、Oracle Cloud Infrastructure 2…...

Vim 编辑器常用快捷键速查表

Vim 编辑器常用快捷键速查表 Vim 快捷键大全 **1. 基础操作****2. 光标移动****3. 编辑文本****4. 查找替换****5. 分屏操作****6. 可视化模式** **附&#xff1a;Vim 模式切换流程图** 1. 基础操作 快捷键功能说明i进入插入模式&#xff08;光标前&#xff09;a进入插入模式&…...

从父类到子类:C++ 继承的奇妙旅程(1)

前言&#xff1a; 在前文&#xff0c;小编讲述了C模板的进阶内容&#xff0c;下面我们就要结束C初阶的旅行&#xff0c;开始进入C进阶容的旅c程&#xff0c;今天旅程的第一站就是C三大特性之一——继承的旅程&#xff0c;各位扶好扶手&#xff0c;开始我们今天的C继承的奇妙旅程…...

HTML9:页面结构分析

页面结构分析 元素名描述header标题头部区域的内容&#xff08;用于页面或页面中的一块区域&#xff09;footer标记脚部区域的内容&#xff08;用于整个页面或页面的一块区域&#xff09;sectionWeb页面的一块独立区域article独立的文章内容aside相关的内容或应用&#xff08;…...

LabVIEW超声波液位计检定

在工业生产、运输和存储等环节&#xff0c;液位计的应用十分广泛&#xff0c;其中超声波液位计作为非接触式液位测量设备备受青睐。然而&#xff0c;传统立式水槽式液位计检定装置存在受建筑高度影响、量程范围受限、流程耗时长等问题&#xff0c;无法满足大量程超声波液位计的…...

maven 安装 本地 jar

命令&#xff1a; mvn install:install-file -DgroupIdnet.pingfang.application -DartifactIdjna -Dversion5.1.0 -Dpackagingjar -DfileD:\maven\repository1\jna\5.1.0\jna-5.1.0.jarmvn&#xff1a;这是Maven的执行命令。 install:install-file&#xff1a;这是Maven插件目…...

leetcode 141. Linked List Cycle

题目描述&#xff1a; 代码&#xff1a; 用哈希表也可以解决&#xff0c;但真正考察的是用快慢指针法。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Soluti…...

【Python】通过`Editable Install`模式详解,解决Python开发总是import出错的问题

摘要 田辛老师在很久以前&#xff0c;写过一篇关于Python的模块、包之间的内部关系的博客&#xff0c;叫做【Python】__init__.py 文件详解。 虽然我觉得这篇文章已经足够了&#xff0c; 但是还是有很多朋友碰到开发的过程中import包报错的问题。 今天&#xff0c; 田辛老师想…...

C 语言网络编程问题:E1696 无法打开 源 文件 “sys/socket.h“

#include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h>在 C 语言网络编程中&#xff0c;上述代码报如下错误 E1696 无法打开 源 文件 "sys/socket.h"E1696 无法打开 源 文件 "netinet/in.h" E1696 无法打开 源 文件…...

操作指南*

任务1: 环境搭建 1.1 创建Spring Boot项目 操作步骤&#xff1a; 使用IDEA创建项目&#xff1a; 打开IDEA → File → New → Project选择 Spring Initializr → 设置项目信息&#xff08;Group、Artifact、Java版本&#xff09;选择依赖&#xff1a;Spring Web、MySQL Drive…...

VRM Add-on for Blender 学习笔记

VRM Add-on for Blender 使用教程-CSDN博客 VRM Add-on for Blender 是 Blender 的一个官方插件&#xff0c;主要用于 导入和导出 VRM 格式的 3D 模型。VRM&#xff08;Virtual Reality Model&#xff09;是一种开放标准的 3D 人形角色模型格式&#xff0c;起源于日本&#xf…...

C++ 完美转发

C 完美转发逐步详解 1. 问题背景与核心目标 在 C 模板编程中&#xff0c;若直接将参数传递给其他函数&#xff0c;参数的 值类别&#xff08;左值/右值&#xff09;和 类型信息&#xff08;如 const&#xff09;可能会丢失。例如&#xff1a; template<typename T> voi…...

学习记录:DAY23

项目开发与学习记录&#xff1a;字段注入优化 前言 我总有一种什么大的要来了的危机感。还是尽快把项目做起来吧&#xff0c;现在全在弄底层的框架。这是一个两天的blog&#xff0c;前一天bug没修好&#xff0c;气到连blog都没写。 日程 5月7日 晚上7点&#xff1a;本来想玩…...

Linux 信号(下篇)

Linux 信号-CSDN博客&#xff08;上篇&#xff09; 前言&#xff1a;在我上一篇博客写到了信号产生的三种条件分别是键盘组合键、kill命令、系统调用接口&#xff1b; 接下来我要把信号产生剩余的两个条件介绍完毕并理解信号的保存&#xff0c;和信号从产生到保存到处理整个过…...

hadoop中的序列化和反序列化(1)

1. 什么是序列化和反序列化 序列化&#xff08;Serialization&#xff09; 是将对象的状态信息转换为可以存储或传输的格式的过程。序列化后的对象可以保存到文件中&#xff0c;或者通过网络传输。 反序列化&#xff08;Deserialization&#xff09; 是序列化的逆过程&#x…...

linux查java进程CPU高的原因

问题&#xff1a;linux查java进程CPU高的原因 解决&#xff1a;用jdk带的工具分析 被查的java最好也使用jdk启动 systemctl启动的注意要去掉PrivateTmptrue /opt/jdk1.8.0_441/bin/jps -l top -Hp 8156 printf "%x" 8533 /opt/jdk1.8.0_441/bin/jstack 8156 |…...

鸿蒙开发——3.ArkTS声明式开发:构建第一个ArkTS应用

鸿蒙开发——3.ArkTS声明式开发:构建第一个ArkTS应用 一、创建ArkTS工程二、ArkTS工程目录结构&#xff08;Stage模型&#xff09;三、构建第一个页面四、构建第二个页面五、实现页面之间的跳转六、模拟器运行 一、创建ArkTS工程 1、若首次打开DevEco Studio&#xff0c;请点击…...

vue3+ts的watch全解!

vue3中的watch只能监听以下四种数据&#xff1a; 1.ref定义的数据 2.reactive定义的数据 3.函数返回一个值&#xff08;getter函数&#xff09; 4.一个包含上述内容的数组 通常我们在使用watch的时候&#xff0c;通常会遇到以下几种情况&#xff1a; 情况一&#xff1a; …...

yarn的概述

1.Yarn的定义 2.Yarn的三大组件 3.Yarn的调度策略 1. YARN的定义 YARN&#xff08;Yet Another Resource Negotiator&#xff09; 是Hadoop生态系统中的一个资源管理框架&#xff0c;用于管理和调度集群中的计算资源。它允许多个应用程序在同一个集群上高效地运行&#xff0c;…...

C++初阶-string类4

目录 1.String operations 1.1string::c_str 1.2string::data 1.3string::copy 1.4string::find 1.5string::rfind 1.6string::find_first_of 1.7string::find_last_of 1.8string::find_first_not_of和string::find_last_not_of find_first_not_of 功能 典型用途 f…...

HarmonyOS NEXT深度解析:自研框架ArkUI-X的技术革命与跨平台实践

HarmonyOS NEXT&#xff5e;深度解析&#xff1a;自研框架ArkUI-X的技术革命与跨平台实践 引言&#xff1a;ArkUI-X的诞生背景与战略意义 在HarmonyOS NEXT全面摒弃AOSP代码的历史性转折点上&#xff0c;华为推出的ArkUI-X框架标志着国产操作系统研发进入深水区。根据华为202…...

CUDA:out of memory的解决方法(实测有效)

一、问题概述 1.问题分析 CUDA out of memory问题通常发生在深度学习训练过程中&#xff0c;当GPU的显存不足以容纳模型、输入数据以及中间计算结果时就会触发。这个问题可能由几个因素引起&#xff1a; 模型和数据规模&#xff1a;深度学习模型尤其是大型模…...

canal mysqltomysql增加同步的库操作

例如增加库 online 1、停止canal.adapter 服务。 ./bin/stop.sh2、备份数据库online&#xff0c;导入目标mysql 备份 mysqldump -h 127.0.0.1 -P 3307 --single-transaction -uroot -p -B online > online.sql导入 mysql -h 127.0.0.1 -P 3308 -uroot -p < onl…...

【AI】模型与权重的基本概念

在 ModelScope 平台上&#xff0c;「模型」和「权重」的定义与工程实践紧密结合&#xff0c;理解它们的区别需要从实际的文件结构和加载逻辑入手。以下是一个典型 ModelScope 模型仓库的组成及其概念解析&#xff1a; 1. ModelScope 模型仓库的典型结构 以 deepseek-ai/deepse…...