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

深度学习---Pytorch概览

一、PyTorch 是什么?

1. 定义与定位

  • 开源深度学习框架:由 Facebook(Meta)AI 实验室开发,基于 Lua 语言的 Torch 框架重构,2017 年正式开源,主打动态计算图易用性
  • 核心优势:灵活的动态图机制、Python 优先的开发体验、强大的 GPU 加速支持、丰富的生态系统。
  • 定位:兼顾科研快速迭代(动态图灵活性)与工业部署(TorchScript、ONNX 支持),是学术界和工业界的主流框架之一。

2. 设计哲学

  • 动态计算图(Dynamic Computation Graph):计算图在运行时动态构建,支持条件分支、循环等控制流,方便调试和灵活建模(对比 TensorFlow 1.x 的静态图)。
  • 自动微分(Automatic Differentiation):通过 autograd 模块自动推导梯度,无需手动推导复杂导数。
  • 张量为核心:所有数据和计算均基于张量(Tensor),支持 CPU/GPU 无缝切换,兼容 NumPy 操作。

二、PyTorch 的核心作用与应用场景

1. 核心功能

  • 数值计算引擎:支持高效的张量运算(矩阵乘法、卷积、激活函数等),天然适配 GPU/TPU 加速。
  • 自动微分框架:自动计算神经网络梯度,简化反向传播实现。
  • 神经网络构建工具:提供模块化的高层 API(如 nn.Module),支持快速定义复杂模型(CNN/RNN/Transformer 等)。
  • 数据流水线:内置数据加载器(DataLoader)和预处理工具,支持批量处理与数据增强。
  • 分布式训练:支持多 GPU/多节点训练(数据并行、模型并行、混合并行),提升训练效率。
  • 模型部署:通过 TorchScript 或 ONNX 导出模型,支持在 CPU/GPU/移动端(如手机、嵌入式设备)部署。

2. 典型应用场景

  • 计算机视觉:图像分类(ResNet)、目标检测(YOLO/Faster R-CNN)、图像生成(GANs)、语义分割(U-Net)等,集成于 torchvision 库。
  • 自然语言处理:词嵌入(Word2Vec/GloVe)、序列模型(LSTM/Transformer)、预训练模型(BERT/GPT),依赖 torchtext 库。
  • 强化学习:深度强化学习(DQN/PPO)、多智能体系统,支持动态环境下的实时计算。
  • 科学计算:物理模拟、分子建模(如 AlphaFold 部分基于 PyTorch)、时间序列预测(金融/天气)。
  • 研究与原型开发:快速验证新算法(动态图支持即时调试),是顶会(NeurIPS/ICCV)论文复现的主流工具。

三、核心知识点详解

pytorch的入门学习,笔者在此推荐B站的小土堆的快速入门视频,尽管是19的教程,但依然很有引导意义。

(一)张量(Tensor):PyTorch 的数据基石

1. 基本概念
  • 定义:多维数组,是 PyTorch 中数据的基本载体,类似 NumPy 的 ndarray,但支持 GPU 加速和自动微分。
  • 数据类型
    • 数值型:float32(默认)、float64int32int64bool 等。
    • 特殊类型:复数张量(complex64)、量化张量(用于模型压缩)。
  • 设备无关性:通过 .to(device) 方法在 CPU/GPU/NPU 之间无缝迁移,device = torch.device('cuda:0')'cpu'
2. 创建张量
  • 基础方法
    import torch
    tensor = torch.tensor([1, 2, 3])  # 从列表创建
    zeros = torch.zeros((3, 4))       # 全零张量
    ones = torch.ones((2, 2, 2))      # 全一张量
    rand = torch.rand((2, 2))         # 均匀分布随机数(0-1)
    randn = torch.randn((2, 2))        # 标准正态分布随机数
    
  • 与 NumPy 互操作
    numpy_array = np.array([1, 2, 3])
    torch_tensor = torch.from_numpy(numpy_array)  # NumPy 转 Tensor
    numpy_array_again = torch_tensor.numpy()       # Tensor 转 NumPy(需在 CPU 上)
    
3. 张量操作
  • 数学运算:加减乘除(+, -, *, /)、矩阵乘法(@torch.matmul)、逐元素乘法(*)、约简操作(mean(), sum(), max())。
  • 形状操作reshape(), view(), transpose(), squeeze(), unsqueeze(),注意 view() 要求内存连续,可先用 contiguous() 转换。
  • 广播机制:自动扩展张量维度以适配运算(如标量与矩阵相加)。
  • 内存管理
    • 原地操作:方法名带 _(如 add_(), resize_()),直接修改张量内存,需谨慎使用(可能破坏自动微分)。
    • 分离梯度:detach() 生成不参与梯度计算的张量,requires_grad=False 禁用梯度跟踪。
4. 张量属性
  • shape:维度大小(如 torch.Size([3, 4]))。
  • dtype:数据类型(如 torch.float32)。
  • device:所在设备(如 cuda:0cpu)。

(二)自动微分(Autograd):梯度计算的核心

1. 核心原理
  • 计算图记录张量运算历史,反向传播时沿图反向推导梯度
  • 梯度张量:每个可微分张量(requires_grad=True)会自动生成 grad 属性,存储反向传播的梯度。
2. 关键模块:torch.autograd
  • 启用梯度跟踪
    x = torch.tensor([1.0, 2.0], requires_grad=True)  # 标记为需要梯度
    y = x.sum()
    y.backward()  # 反向传播,计算梯度
    print(x.grad)  # 输出 tensor([1., 1.])
    
  • 梯度清零:优化器.step() 前通常需要 optimizer.zero_grad(),避免梯度累加。
  • 自定义反向传播:通过重写 backward() 方法或使用 torch.autograd.Function 定义自定义操作的梯度(高级用法,如实现自定义激活函数)。
3. 梯度计算控制
  • with torch.no_grad():禁用梯度跟踪,用于推理阶段加速(减少内存消耗)。
  • torch.autograd.grad():手动计算梯度(非链式反向传播时使用):
    grads = torch.autograd.grad(outputs=y, inputs=x)
    

(三)动态计算图:PyTorch 的灵魂

1. 动态图 vs 静态图(如 TensorFlow 1.x)
  • 动态图:运算与图构建同时进行,支持 Python 控制流(if/else/循环),方便调试(可打印中间变量),适合科研迭代。
  • 静态图:先定义图结构,再执行运算,需通过 Session 运行,优化效率高但灵活性低,适合工业部署(PyTorch 通过 TorchScript 可生成静态图)。
2. 动态图的优势
  • 即时反馈:代码逐行执行,可实时查看中间结果。
  • 自然支持控制流:循环次数可变的 RNN、条件生成模型(如 Conditional GAN)更易实现。
  • 调试友好:可使用 Python 调试工具(如 pdb)跟踪张量值。

(四)神经网络构建:nn.Module 与模块化设计

1. 基本流程
  1. 定义网络结构:继承 nn.Module,在 __init__ 中定义层,在 forward 中定义前向传播逻辑。
  2. 初始化参数:自动管理可学习参数(parameters() 方法获取),支持自定义初始化(如 Xavier/He 初始化)。
  3. 前向传播:通过调用实例对象(model(inputs))触发 forward 方法,反向传播由 autograd 自动处理。
2. 常用层与模块
  • 基础层
    • 线性层:nn.Linear(in_features, out_features)
    • 卷积层:nn.Conv2d(in_channels, out_channels, kernel_size),支持 1D/2D/3D 卷积。
    • 池化层:nn.MaxPool2d, nn.AvgPool2d
    • 激活函数:nn.ReLU(), nn.Sigmoid(), nn.LeakyReLU() 等(也可直接使用函数形式 torch.relu())。
  • 序列模型nn.LSTM(), nn.GRU(),支持双向和多层。
  • 注意力机制nn.MultiheadAttention(原生支持 Transformer 多头注意力)。
  • 归一化层nn.BatchNorm2d, nn.LayerNorm, nn.InstanceNorm2d
  • 容器类nn.Sequential(顺序连接层)、nn.ModuleList(动态层列表)、nn.ModuleDict(层字典)。
3. 自定义层
class MyLayer(nn.Module):def __init__(self, in_dim, out_dim):super().__init__()self.weight = nn.Parameter(torch.randn(in_dim, out_dim))  # 自定义可学习参数def forward(self, x):return x @ self.weight  # 矩阵乘法
4. 参数初始化
for m in model.modules():if isinstance(m, nn.Conv2d):nn.init.kaiming_normal_(m.weight, mode='fan_out')  # He 初始化elif isinstance(m, nn.BatchNorm2d):nn.init.constant_(m.weight, 1)nn.init.constant_(m.bias, 0)

(五)数据处理与加载:DatasetDataLoader

1. 自定义数据集
from torch.utils.data import Dataset, DataLoaderclass MyDataset(Dataset):def __init__(self, data, labels):self.data = dataself.labels = labelsdef __len__(self):return len(self.data)def __getitem__(self, idx):return self.data[idx], self.labels[idx]
2. 数据加载器
dataset = MyDataset(images, labels)
dataloader = DataLoader(dataset,batch_size=32,shuffle=True,num_workers=4,  # 多进程加载数据pin_memory=True  # GPU 训练时加速数据传输
)
3. 数据增强(结合 torchvision.transforms
import torchvision.transforms as T
transform = T.Compose([T.RandomResizedCrop(224),T.RandomHorizontalFlip(),T.ToTensor(),T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # ImageNet 标准化
])

(六)模型训练:损失函数、优化器与训练循环

1. 损失函数
  • 分类任务nn.CrossEntropyLoss(整合 LogSoftmaxNLLLoss)、nn.NLLLossnn.BCEWithLogitsLoss(二分类,带 sigmoid)。
  • 回归任务nn.MSELoss(均方误差)、nn.L1Loss(平均绝对误差)。
  • 度量学习nn.MarginRankingLossTripletMarginLoss
  • 自定义损失:直接计算张量差异并调用 .backward()
2. 优化器
  • 基础优化器torch.optim.SGD, Adam, RMSprop, Adagrad 等。
  • 参数分组:对不同层设置不同学习率(如冻结预训练层):
    optimizer = torch.optim.Adam([{'params': model.base_params, 'lr': 1e-4},{'params': model.new_params, 'lr': 1e-3}
    ])
    
  • 学习率调度torch.optim.lr_scheduler.StepLR, CosineAnnealingLR, ReduceLROnPlateau(根据验证集表现调整)。
3. 典型训练循环
model.train()  # 启用训练模式(激活 BatchNorm/Dropout)
for epoch in range(num_epochs):for inputs, labels in dataloader:inputs = inputs.to(device)labels = labels.to(device)optimizer.zero_grad()  # 梯度清零outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()  # 反向传播optimizer.step()  # 更新参数

(七)模型保存与加载

1. 保存方式
  • 仅保存参数(推荐)
    torch.save(model.state_dict(), 'model.pth')  # 保存
    model.load_state_dict(torch.load('model.pth'))  # 加载
    
  • 保存整个模型(不推荐,依赖类定义)
    torch.save(model, 'model.pt')
    model = torch.load('model.pt')
    
2. 多 GPU 模型加载
  • 保存时无需特殊处理,加载时指定设备:
    state_dict = torch.load('model.pth', map_location=torch.device('cpu'))
    

(八)GPU 加速与分布式训练

1. 单 GPU 训练
  • 张量和模型转移至 GPU:
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    model = model.to(device)
    inputs, labels = inputs.to(device), labels.to(device)
    
2. 多 GPU 数据并行(最常用)
  • 使用 nn.DataParallel(简单封装,单进程多线程,适合单机多卡):
    model = nn.DataParallel(model, device_ids=[0, 1])  # 指定 GPU 编号
    
  • 或更高效的 DistributedDataParallel(DDP,多进程模式,支持多机多卡):
    # 初始化分布式环境
    torch.distributed.init_process_group(backend='nccl')
    model = model.to(device)
    model = nn.parallel.DistributedDataParallel(model, device_ids=[local_rank])
    
3. 模型并行
  • 跨 GPU 分割模型(如深层网络分层到不同卡),复杂度较高,适用于模型过大无法装入单卡的场景。

(九)高级特性与生态

1. TorchScript:桥梁工业部署
  • 定义:PyTorch 的静态图表示,支持将动态图模型转换为可序列化、可优化的中间表示。
  • 用法
    • 追踪模式(Trace):适用于无控制流的模型:
      traced_model = torch.jit.trace(model, example_input)
      
    • 脚本模式(Script):显式注解控制流,支持完整 Python 语法:
      @torch.jit.script
      def my_function(x):return x + x
      
  • 优势:支持 C++ 部署、移动端(iOS/Android)、边缘设备(如 NVIDIA Jetson)。
2. 混合精度训练(Mixed Precision Training)
  • 利用 FP16(半精度)加速计算,减少显存占用,结合 FP32 保持数值稳定性:
    from torch.cuda.amp import autocast, GradScaler
    scaler = GradScaler()
    for inputs, labels in dataloader:with autocast():  # 自动切换为 FP16 计算outputs = model(inputs)loss = criterion(outputs, labels)scaler.scale(loss).backward()  # 缩放损失以避免下溢scaler.step(optimizer)scaler.update()
    
3. 自定义 Autograd 函数
  • 实现复杂操作的梯度定义,例如自定义激活函数的导数:
    class MyReLU(torch.autograd.Function):@staticmethoddef forward(ctx, x):ctx.save_for_backward(x)return x.clamp(min=0)@staticmethoddef backward(ctx, grad_output):x, = ctx.saved_tensorsgrad_x = grad_output.clone()grad_x[x < 0] = 0return grad_x
    # 使用:my_relu = MyReLU.apply
    
4. 生态系统库
  • 视觉torchvision(含预训练模型、数据加载器、增强工具)。
  • 自然语言处理torchtext(文本预处理、词嵌入、数据集)。
  • 音频torchaudio(音频数据加载、变换、模型)。
  • 强化学习torchrl(官方强化学习库,支持算法实现与数据管道)。
  • 分布式训练torch.distributed(底层接口)、torch.nn.parallel(高层封装)。
  • 模型压缩torch.quantization(量化工具)、torch.pruning(剪枝工具)。
5. 与其他框架对比
特性PyTorchTensorFlowJAX
动态图支持原生支持(默认)TensorFlow 2.x 引入jax.jit 编译
易用性Python 友好,动态调试方便初期学习曲线较陡偏向数学,需函数式编程
工业部署支持TorchScript/ONNXSavedModel/TFLiteTFLite/PMAP
科研友好度最高(动态图+灵活控制流)中等高等(自动微分+JIT)

(十)最佳实践与常见问题

1. 内存优化
  • 避免在循环中重复创建大张量,使用 torch.empty() 预分配内存。
  • 及时释放不再使用的张量:del tensor; torch.cuda.empty_cache()
  • 梯度累积:当批量过大无法装入显存时,分批次计算梯度并累加。
2. 调试技巧
  • 检查张量是否在正确设备上:print(tensor.device)
  • 梯度为 None:确保张量 requires_grad=True,且反向传播前未被 detach()
  • 内存泄漏:使用 torch.cuda.memory_summary() 分析显存占用。
3. 社区与资源
  • 官方文档:PyTorch Documentation(权威但偏技术)。强烈推荐看官方文档学习
  • 教程:PyTorch 官方教程、Deep Learning with PyTorch 书籍、Fast.ai 课程。
  • 论坛:PyTorch Forums(问题解答)、Stack Overflow(标签 pytorch)。
  • 示例库:GitHub 上的 PyTorch Examples 仓库,Kaggle 上的大量实战案例。

四、总结:PyTorch 的核心价值

  • 灵活性:动态图与 Python 原生支持,适合快速实验与创新。
  • 效率:GPU 加速、分布式训练、混合精度优化,满足大规模训练需求。
  • 生态闭环:从数据处理(TorchData)、模型构建(nn.Module)、训练(优化器)到部署(TorchScript/ONNX),提供全流程工具链。
  • 社区活跃:全球开发者贡献,丰富的第三方库(如 Hugging Face Transformers 对 PyTorch 的深度支持)。

无论是学术研究中的新算法探索,还是工业落地中的模型部署,PyTorch 均以其易用性和强大性能成为首选框架。

相关文章:

深度学习---Pytorch概览

一、PyTorch 是什么&#xff1f; 1. 定义与定位 开源深度学习框架&#xff1a;由 Facebook&#xff08;Meta&#xff09;AI 实验室开发&#xff0c;基于 Lua 语言的 Torch 框架重构&#xff0c;2017 年正式开源&#xff0c;主打动态计算图和易用性。核心优势&#xff1a;灵活…...

第33周JavaSpringCloud微服务 分布式综合应用

第33周JavaSpringCloud微服务 分布式综合应用 一、分布式综合应用概述 分布式知识体系内容广泛&#xff0c;主要包括分布式事务、分布式锁、RabbitMQ等消息中间件的应用以及跨域问题的解决。 1.1 课程重点内容介绍 分布式事务 &#xff1a;在大型项目中普遍存在&#xff0c;…...

Paramiko 完全指南

目录 Paramiko 概述核心功能与模块框架安装与依赖基础用法与案例详解 SSH 连接与命令执行密钥认证SFTP 文件传输交互式会话端口转发 高级功能与实战技巧常见问题与解决方案总结与资源推荐 1. Paramiko 概述 是什么&#xff1f; Paramiko 是一个纯 Python 实现的 SSHv2 协议库…...

夜莺监控V8(Nightingale)二进制部署教程(保姆级)

夜莺监控部署 前置工作 1. 部署好mysql 2. 部署好redis 3. 部署好prometheus夜莺压缩包下载 本教程基于Centos7系统下的二进制方式部署&#xff0c;先去官网进行压缩包下载 在系统创建/opt/n9etest目录,并将压缩包拖进目录 mkdir /opt/n9etest进入/opt/n9etest&#xff0…...

鸿蒙应用开发 知识点 官网快速定位表

ArkTS 语言介绍 ArkTS 语言介绍 基础入门 资源分类与访问 添加组件(基础组件) 显示图片 (Image) 按钮 (Button) 单选框 (Radio) 切换按钮 (Toggle) 进度条 (Progress) 视频播放 (Video) 使用文本 文本显示 (Text/Span) 文本输入 (TextInput/TextArea) 使用弹窗 使用弹…...

【神经网络与深度学习】两种加载 pickle 文件方式(joblib、pickle)的差异

引言 从深度学习应用到数据分析的多元化需求出发&#xff0c;Python 提供了丰富的工具和模块&#xff0c;其中 pickle 和 joblib 两种方式在加载数据文件方面表现尤为突出。不同场景对性能、兼容性以及后续处理的要求不尽相同&#xff0c;使得这两种方式各显优势。本文将通过深…...

quickbi finebi 测评(案例讲解)

quickbi & finebi 测评 国产BI中入门门槛比较低的有两个&#xff0c;分别是quickbi和finebi。根据我的经验通过这篇文章做一个关于这两款BI的测评文章。 quickbi分为个人版、高级版、专业版、私有化部署四种。这篇文章以quickbi高级版为例&#xff0c;对quickbi进行分享。…...

vue的生命周期 以及钩子

最早可以在created 时调用后端接口获取数据&#xff0c;因为beforecreated的时候 那个data 都还还是初始化出来 修改数据的时候触发 update 案例1&#xff1a;create 案例2:一进来页面获取搜索框焦点 echarts 饼图渲染 初始化dom后才去准备实例&#xff0c;所以必须要在dom之后…...

Mariadb 防火墙服务器和端口:mysql | 3306

Centos7 Mariadb 理解&#xff1a;Mariadb数据库就类似于我们生活中常见的Excel。 主要工作原理就是我们创造一个数据库其中创造一个数据表再在数据表中输入内容&#xff0c;分为三类。在详细点就是打开Excel&#xff08;数据库&#xff09;&#xff0c;我们在其中加入…...

爬虫学习笔记(二)--web请求过程

Web请求全过程&#xff08;重要&#xff09; 从输入完网址&#xff08;如输入百度网址&#xff09;到返回页面以及页面中的数据这一完整的过程发生了什么事情&#xff1f; 服务器端渲染 在服务器端直接把数据和html整合&#xff0c;统一返回给浏览器&#xff0c;在页面源代码…...

开发vue项目所需要安装的依赖包

在开发Vue项目时&#xff0c;通常需要安装以下几个核心依赖包&#xff1a;1、Vue CLI、2、Vue Router、3、Vuex、4、Axios。这些依赖包可以确保你的Vue项目拥有基础的功能和良好的开发体验。接下来&#xff0c;我们将详细介绍每个依赖包的作用、安装方法以及使用案例。 一、VUE…...

Java SE(4)——方法详解

1.方法的概念&使用 1.1 什么是方法&#xff1f; Java中的方法类似于C语言中的函数&#xff0c;是用于执行特定任务的代码块。 那么用方法组织起来的代码块和普通的代码相比有什么优势呢&#xff1f; 1.当代码规模较大且应用场景较为复杂时&#xff0c;方法能够模块化地组…...

网络安全实战指南:从安全巡检到权限维持的应急响应与木马查杀全(命令查收表)

目录 一、安全巡检的具体内容 1. 巡检的频率与目标是什么 2. 巡检的内容是什么以及巡检后如何加固 二、Windows环境下应急响应的主要流程 1. 流程概述及每个步骤详细解释 步骤1&#xff1a;隔离与遏制 步骤2&#xff1a;识别与分析 步骤3&#xff1a;清除与恢复 步骤4…...

Infrared Finance:Berachain 生态的流动性支柱

在加密市场中&#xff0c;用户除了参与一级和二级交易&#xff0c;还有一种低门槛参与的就是空投。从 2021 年 DeFi 成为主流开始&#xff0c;空投一直都是“以小搏大”的机会&#xff0c;通过参与项目早期的链上交互和任务以获取空投奖励&#xff0c;近几年已成为一种广受欢迎…...

Hadoop和Spark大数据挖掘与实战

1.概述 本节将系统讲解大数据分析的完整流程&#xff0c;包括数据采集、预处理、存储管理、分析挖掘与结果可视化等核心环节。与此同时&#xff0c;我们还将对主流数据分析工具进行横向对比&#xff0c;帮助读者根据实际需求选用最合适的工具&#xff0c;提升数据价值挖掘的效…...

TCP vs UDP:核心区别、握手过程与应用场景(附对比图)

&#x1f310; 引言 在网络通信中&#xff0c;TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;是两大核心传输层协议。它们各有优劣&#xff0c;适用于不同场景。本文将用图文对比实战示例&#xff0c;帮你彻底理解两者的区别&#xff0…...

人工智能-深度学习之多层感知器

深度学习 任务任务1任务2任务3 机器学习的弊端多层感知器 &#xff08;MLP/人工神经网络&#xff09;MLP实现非线性分类Keras介绍与实战准备Keras or TensorflowKeras建立MLP模型 实战&#xff08;1&#xff09;: 建立MLP实现非线性二分类实战&#xff08;2&#xff09;: MLP实…...

Improving Deep Learning For Airbnb Search

解决问题 问题1: 解决推荐酒店与用户实际预定酒店价格存在偏差问题&#xff0c;实际预定比推荐要更便宜&#xff1a; 所以问题为是否更低价格的list更倾向于用户偏好&#xff0c;应该被优先推荐&#xff1f; 1. 该文通过数据分析与模型演进&#xff0c;将模型改造为item sco…...

多模态大型模型,实现以人为中心的精细视频理解

大家看完觉得有帮助记得点赞和关注&#xff01;&#xff01;&#xff01; 抽象 精细理解视频中人类的动作和姿势对于以人为中心的 AI 应用程序至关重要。在这项工作中&#xff0c;我们介绍了 ActionArt&#xff0c;这是一个细粒度的视频字幕数据集&#xff0c;旨在推进以人为中…...

向量数据库Milvus的部署与使用

Milvus介绍 Milvus是一个开源、高性能、高扩展性的向量数据库&#xff0c;Milvus可以用来存储文本、图像、音频等非结构化数据&#xff0c;本质上是用Embeddings将非结构化数据转换成能够捕捉其基本特征的数字向量&#xff0c;然后将这些向量存储在向量数据库中&#xff0c;从…...

1.文档搜索软件Everything 的使用介绍

Everything 是 Windows 文件搜索的效率天花板&#xff0c;通过灵活语法和极速响应&#xff0c;彻底告别「找文件焦虑」。 定位&#xff1a;一款专注于 极速文件名搜索 的 Windows 工具&#xff0c;免费且轻量&#xff08;安装包仅几 MB&#xff09;。 核心优势…...

2025系统架构师---论企业集成平台的技术与应用

摘要 本文探讨了企业集成平台的技术与应用,以某商业银行开发的绩效考核平台系统为例,分析了企业集成平台的基本功能及关键技术,并详细阐述了在表示集成、数据集成、控制集成和业务流程集成方面的应用和实施方式。通过异构系统之间的集成,绩效考核平台与其他系统实现了有机…...

STM32Cubemx-H7-16-FreeRTOS-1-创建工程,实现两个灯的基本亮灭

前言 裸机也是开发到一半快要结束了&#xff0c;接下来开始上操作系统&#xff0c;然后先能使用基本的&#xff0c;后面再讲理论。 Cubemx创建工程 基本打开生成就不说了&#xff0c;直接从界面开始 从这里开始吧 1.首先开启外部高速晶振 2.先这样选择 选择HSE时钟环&#xff…...

深入浅出限流算法(二):更平滑的滑动窗口

好的&#xff0c;接续上一篇关于固定窗口计数器的讨论&#xff0c;我们现在来看看它的改进版——滑动窗口算法&#xff0c;它旨在解决固定窗口那个恼人的“临界突变”问题。 在上一篇文章中&#xff0c;我们探讨了最简单的固定窗口计数器限流算法&#xff0c;并指出了它最大的缺…...

纷析云开源财务软件:基于Spring Boot的轻量化财务中台实践

一、技术架构与核心设计 全栈开源技术栈 后端框架&#xff1a;基于Spring Boot 3.x构建&#xff0c;集成MyBatis-Plus作为ORM层&#xff0c;支持JDK 17特性&#xff08;如虚拟线程并发处理&#xff09;&#xff0c;确保高吞吐与稳定性。 前端框架&#xff1a;采用Vue 3 TypeS…...

软考-软件设计师中级备考 5、数据结构 树和二叉树

1、树的基本概念 节点的度&#xff1a;节点拥有的子树数目。例如&#xff0c;若一个节点有 3 棵子树&#xff0c;其度为 3。树的度&#xff1a;树中节点的最大度数。如树中所有节点的度最大为 4&#xff0c;则树的度是 4。叶子节点&#xff1a;度为 0 的节点&#xff0c;也…...

php 需要学会哪些技术栈,掌握哪些框架

作为一个「野生」程序员&#xff0c;我的学习过程比较急功近利。 我记得自己写的第一个 PHP 程序是留言本。一上来对 PHP 一窍不通&#xff0c;所以直接去网上找了个留言本的源码&#xff0c;下载下来后先想办法让它在自己电脑上运行起来。通过这个过程掌握了 PHP 开发环境的搭…...

短视频矩阵系统贴牌批量剪辑功能开发,支持OEM

一、引言 在短视频行业蓬勃发展的当下&#xff0c;短视频矩阵运营已成为企业和个人实现品牌推广、流量增长的重要策略。然而&#xff0c;面对大量的视频素材和多个运营账号&#xff0c;传统的单个视频剪辑、发布方式效率极低&#xff0c;难以满足矩阵运营的需求。为了提高内容…...

【Java EE初阶】多线程(二)

1.在图中代码&#xff0c;我们调用了start方法&#xff0c;真正让系统调用api创建了一个新线程&#xff0c;而在这个线程跑起来之后&#xff0c;就会自动执行到run。调用start方法动作本身速度非常快&#xff0c;一旦执行&#xff0c;代码就会立即往下走&#xff0c;不会产生任…...

分布式链路追踪理论

基本概念 分布式调用链标准-openTracing Span-节点组成跟踪树结构 有一些特定的变量&#xff0c;SpanName SpanId traceId spanParentId Trace&#xff08;追踪&#xff09;&#xff1a;代表一个完整的请求流程&#xff08;如用户下单&#xff09;&#xff0c;由多个Span组成…...

conda和bash主环境的清理

好的&#xff01;要管理和清理 Conda&#xff08;或 Bash&#xff09;安装的包&#xff0c;可以按照以下步骤进行&#xff0c;避免冗余依赖&#xff0c;节省磁盘空间。 &#x1f4cc; 1. 查看已安装的包 先列出当前环境的所有安装包&#xff0c;找出哪些可能需要清理&#xff…...

Linux系统管理与编程14:Shell变量及定制bash登录界面

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1.准备工作 创建用户wu useradd wu passwd wu 修改权限 chmod uw /etc/sudoers 编辑 visudo 在root行下&#xff0c;添加&#xff1a;“wu ALL……” 图14- 1 恢复文件权限并…...

微信小程序开发笔记

一、首先&#xff0c;下载一个微信开发者工具。前端项目就正常创建&#xff0c;由于本人的前端一塌糊涂&#xff0c;就让AI给我生成了一个我想要的前端项目&#xff08;包括后面写功能&#xff09;。 这里开发的时候会用到这个&#xff0c;但是一定注意服务部署到服务器上再本…...

SEO长尾关键词优化核心策略

内容概要 在搜索引擎优化领域&#xff0c;长尾关键词因其精准的流量捕获能力与较低的竞争强度&#xff0c;已成为提升网站自然流量的核心突破口。本文围绕长尾关键词优化的全链路逻辑&#xff0c;系统拆解从需求洞察到落地执行的五大策略模块&#xff0c;涵盖用户搜索意图解析…...

第一节:Linux系统简介

理论知识 Linux的起源与发展&#xff1a;1991 年&#xff0c;芬兰赫尔辛基大学的学生林纳斯托瓦兹受到 Minix 和 Unix 思想的启发&#xff0c;开始编写 Linux 内核。最初&#xff0c;它只是一个个人项目&#xff0c;但随着开源社区的加入&#xff0c;Linux 迅速发展壮大。如今…...

微信聊天机器人搭建 教程/开发

创建标签 简要描述&#xff1a; 添加标签 请求URL&#xff1a; http://域名地址/addContactLabel 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必…...

Ubuntu中C++项目安装二次规划库——qpOASES 库

一、在Ubuntu安装qpOASES 库 步骤 1&#xff1a;更新系统包列表 首先&#xff0c;打开终端&#xff0c;执行以下命令更新系统的包列表&#xff0c;以确保你能获取到最新的软件包信息。 sudo apt update 步骤 2&#xff1a;安装必要的依赖 qpOASES库的编译和安装需要一些基…...

JavaScript-基础语法

前言&#xff1a; 一个网页由三个部分组成&#xff1a; 1.html&#xff1a;超文本标记语言&#xff0c;用于控制网页的结构(页面元素和内容&#xff09; 2.css&#xff1a;级联样式表&#xff0c;用于控制网页布局&#xff0c;涉及对网页文字&#xff0c;背景&#xff0c;布局进…...

已有 npm 项目,如何下载依赖、编译并运行项目

诸神缄默不语-个人技术博文与视频目录 这篇博文的适用场景是比如说反正你现在有了一个现成的npm项目&#xff0c;然后无论如何&#xff0c;你要把前端挂起来。 文章目录 一、准备工作1. 安装 Node.js 和 npm2. 克隆或获取项目代码 二、安装项目依赖三、了解 npm 脚本命令四、构…...

第四章:Messaging and Memory

Chapter 4: Messaging and Memory 从配置管理到消息记忆&#xff1a;如何让AI记住对话内容&#xff1f; 在上一章的配置管理中&#xff0c;我们已经能让系统记住所有参数设置。但你是否想过&#xff1a;如果用户连续提问“今天天气如何&#xff1f;”和“明天呢&#xff1f;”…...

iPhone闹钟无法识别调休致用户迟到,苹果客服称会记录反馈

iPhone闹钟无法识别调休致用户迟到&#xff0c;苹果客服称会记录反馈 基于 6 个来源 因“五一”劳动节调休&#xff0c;4月27日&#xff08;周日&#xff09;本应上班&#xff0c;不少iPhone用户却因闹钟未响迟到&#xff0c;“调休”“当苹果闹钟遇到调休”话题登上热搜。苹…...

npm error code CERT_HAS_EXPIRED

npm error code CERT_HAS_EXPIRED 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社区主理人 擅长.net、C、python开发&#xff0c; 如果遇到技术问题&#xff0c;即可私…...

C++ 之 【list的简介、list 的构造函数、iterator、容量操作、元素访问、增删查改与迭代器失效】

目录 1.list的介绍 2.list的使用 2.1 构造函数 2.2 iterator 的使用 2.3 容量操作 2.4 元素访问 2.5 增删查改 2.5.1头插头删与尾插尾删 2.5.2 insert 、erase 函数 2.5.3 clear、swap函数 2.5.4 关于find函数 3.迭代器失效 1.list的介绍 (1)list的底层通常实现为带…...

使用手机录制rosbag包

文章目录 简介录制工具录制步骤录制设置设置IMU录制频率设置相机分辨率拍照模式录制模式数据制作获取数据数据转为rosbag查看rosbag简介 ROS数据包(rosbag)是ROS系统中用于记录和回放传感器数据的重要工具,通常用于算法调试、系统测试和数据采集。传统上,rosbag依赖于ROS环…...

使用阿里云 CDN 保护网站真实 IP:完整配置指南

使用阿里云 CDN 保护网站真实 IP&#xff1a;完整配置指南 一、宝塔面板准备工作1. 确认网站部署状态2. 宝塔中检查网站配置 二、配置阿里云 CDN1. 添加域名到 CDN2. 配置 DNS 解析3. 配置成功确认 三、宝塔面板安全加固&#xff08;隐藏 IP 的关键步骤&#xff09;1. 禁止通过…...

JAVA-StringBuilder使用方法

JAVA-StringBuilder使用方法 常用方法 append(Object obj) 追加内容到末尾 sb.append(" World"); insert(int offset, Object obj) 在指定位置插入内容 sb.insert(5, “Java”); delete(int start, int end) 删除指定范围的字符 sb.delete(0, 5); replace(int start…...

Milvus(9):字符串字段、数字字段

1 字符串字段 在 Milvus 中&#xff0c;VARCHAR 是用于存储字符串数据的数据类型。定义VARCHAR 字段时&#xff0c;有两个参数是必须的&#xff1a; 将datatype 设置为DataType.VARCHAR 。指定max_length &#xff0c;它定义了VARCHAR 字段可存储的最大字符数。max_length 的有…...

locust压力测试

安装 pip install locust验证是否安装成功 locust -V使用 网上的教程基本上是前几年的&#xff0c;locust已经更新了好几个版本&#xff0c;有点过时了&#xff0c;在此做一个总结 启动 默认是使用浏览器进行设置的 # 使用浏览器 locust -f .\main.py其他参数 Usage: locust […...

Uniapp:showLoading(等待加载)

目录 一、出现场景二、效果展示三、具体使用一、出现场景 在项目的开发中,我们经常会请求后台接口返回数据,但是每一个接口返回数据的时间不一致,有的快,有的慢,这个时候如果不加一个遮罩层,接口返回慢的时候,非常影响用户体验 二、效果展示 三、具体使用 显示加载框…...

线性代数的本质大白话理解

先一句话总结的如下&#xff1a; 线性代数的本质&#xff0c;就是研究“线性变化”——包括空间中点、向量、矩阵之间如何通过线性规则&#xff08;加法、数乘&#xff09;变化和联系&#xff0c;并理解这些变化背后的结构。 1. 向量&#xff08;Vector&#xff09;——不是数据…...