动手学深度学习(PyTorch版)深度详解(5):深度学习计算核心 —— 卷积操作、填充步幅、汇聚层与 LeNet 完整精讲

news2026/5/1 1:30:10
前言在深度学习的学习体系中多层感知机MLP是基础入门模型依托全连接层实现对数据特征的拟合能够处理简单的表格数据、一维结构化数据分类与回归任务。但当我们面对图像、视频、二维空间序列这类具备空间结构特征的数据时单纯的全连接多层感知机就暴露出致命缺陷。全连接网络处理图像时必须将二维像素矩阵展平为一维向量这一操作直接破坏了图像的空间局部关联性。图像中相邻像素、边缘轮廓、纹理特征都是紧密关联的比如人脸的五官、物体的轮廓边界空间位置关系决定了特征含义展平为一维向量后像素之间的空间位置被打乱模型无法捕捉局部特征、边缘特征和纹理特征。同时全连接网络参数数量爆炸式增长一张 28×28 的灰度图像展平后有 784 个像素若隐藏层设置 1024 个神经元单层参数就达到数十万深层网络极易出现过拟合、训练速度慢、泛化能力差等问题。为解决图像等空间结构数据的建模难题卷积神经网络CNN应运而生成为计算机视觉领域的基石。《动手学深度学习PyTorch 版》聚焦卷积神经网络核心基础组件从底层原理到实战落地依次讲解卷积操作原理、填充与步幅机制、汇聚层作用最后落地经典入门卷积网络LeNet 模型实现与图像分类实战。本章内容是后续学习 AlexNet、VGG、ResNet、MobileNet 等经典网络的前置必备知识也是掌握计算机视觉图像分类、目标检测、语义分割任务的底层根基。本文从零拆解卷积底层逻辑、数学原理、运算过程、超参数设计规则搭配 PyTorch 代码实战、实际学习场景解析、高频避坑指南、系统化学习计划并附上下章内容预告与文末互动引导适合深度学习入门者零基础吃透卷积神经网络基础。一、从全连接层到卷积为什么需要卷积神经网络1.1 多层感知机处理图像的核心局限多层感知机由全连接层堆叠而成全连接层的核心特性是层与层之间所有神经元两两相连无局部连接、无权重共享。应用在图像任务中存在三大无法规避的短板第一空间结构信息丢失。图像是典型的二维网格数据像素的相对位置具备语义信息比如横向边缘、纵向轮廓、圆形纹理都依赖局部像素组合。全连接层强制将二维矩阵拉平为一维向量像素位置顺序被线性排列模型无法感知 “相邻像素”“局部区域” 的特征关联只能孤立学习每个像素的数值特征提取效率极低。第二参数量过大模型冗余严重。假设输入一张 224×224 的 RGB 彩色图像通道数为 3总像素数量为 224×224×3150528。若第一层全连接层设置 1000 个神经元仅这一层的权重参数数量就达到 150528×10001.5 亿还不包含偏置参数。深层堆叠全连接层后参数量会达到数十亿级别不仅占用海量显存训练时需要海量数据集支撑否则必然严重过拟合。第三缺乏平移不变性。现实图像中同一个物体轻微平移、小幅缩放后仍然属于同一类别。但全连接网络对像素位置极度敏感物体稍微偏移像素位置输入一维向量的数值排列发生变化模型就会出现分类错误无法适配现实场景的图像变化。1.2 卷积神经网络的三大核心优势卷积神经网络针对全连接层的缺陷引入局部连接、权重共享、下采样三大核心设计思想完美适配图像空间数据局部连接卷积层的神经元不再与上一层所有神经元连接只感知输入特征图的局部感受野。图像的底层特征边缘、纹理、角点只和局部像素相关无需全局关联局部连接大幅减少参数量。权重共享同一卷积核在整张特征图上滑动运算时共享同一组权重参数。无需为每个局部区域单独设置权重进一步压缩参数量同时让模型具备平移不变性无论特征出现在图像哪个位置都能被同一卷积核检测。下采样机制通过步幅卷积和汇聚层降低特征图宽高尺寸压缩冗余空间信息减少后续层参数量同时增强模型对轻微缩放、偏移的鲁棒性。正是这三大设计让 CNN 以极少的参数实现高效的空间特征提取成为计算机视觉的标配模型。而理解 CNN 的第一步就是吃透图像卷积操作的底层原理。二、图像卷积操作底层原理、运算过程与核心概念2.1 互相关运算卷积操作的实际落地在深度学习工程实现中我们常说的卷积本质上数学定义的互相关运算。严格数学卷积需要对卷积核进行翻转上下、左右翻转而 PyTorch、TensorFlow 等框架的卷积层默认采用互相关运算无卷积核翻转操作这也是入门最容易混淆的知识点。2.1.1 互相关运算定义给定一个二维输入矩阵可以理解为单通道灰度图像和一个二维卷积核滤波器互相关运算的流程为将卷积核从输入矩阵左上角开始按照固定步幅从左到右、从上到下滑动每滑动到一个位置将卷积核与输入矩阵对应位置的像素逐元素相乘后求和得到输出特征图的一个像素值遍历所有滑动位置后生成完整的输出特征图。举极简示例设输入矩阵为 3×3 大小卷积核为 2×2 大小。输入矩阵[[1,2,3],[4,5,6],[7,8,9]]卷积核[[0,1],[2,3]]第一次滑动匹配左上角 2×2 区域1×0 2×1 4×2 5×3 0281525向右滑动一个位置匹配右侧 2×2 区域2×0 3×1 5×2 6×3 03101831向下滑动一行匹配左下 2×2 区域4×0 5×1 7×2 8×3 05142443最后匹配右下角 2×2 区域5×0 6×1 8×2 9×3 06162749最终输出特征图为 2×2 矩阵[[25,31],[43,49]]这就是最基础的单通道、无填充、步幅为 1 的互相关运算全过程也是卷积层底层的计算逻辑。2.1.2 卷积层的结构组成深度学习中的卷积层由卷积核、偏置项、激活函数三部分组成卷积核也叫滤波器是可学习的权重参数尺寸常见 1×1、3×3、5×5、7×7。浅层卷积核学习边缘、纹理特征深层卷积核组合底层特征学习轮廓、部件、整体物体特征。偏置项每个输出通道对应一个偏置参数用于拟合数据基线提升模型拟合能力。激活函数卷积运算本身是线性运算叠加 ReLU、Sigmoid、GELU 等激活函数引入非线性让卷积网络能够拟合复杂特征分布。2.2 边缘检测卷积核的手工设计示例为直观理解卷积核的作用我们可以手动设计固定卷积核实现图像边缘检测无需训练即可看到卷积的特征提取效果纵向边缘检测核[[1,0,-1],[1,0,-1],[1,0,-1]]可以检测图像垂直方向的边缘轮廓横向边缘检测核[[1,1,1],[0,0,0],[-1,-1,-1]]检测图像水平方向边缘浮雕、模糊、锐化卷积核均可通过固定矩阵实现对应图像处理效果。这也印证了卷积核的本质不同数值的卷积核对应不同的特征提取规则。而深度学习的核心就是模型通过反向传播自动学习最优的卷积核参数无需人工设计。2.3 特征映射与感受野核心概念2.3.1 特征映射输入图像经过卷积运算后生成的输出矩阵称为特征图Feature Map也叫特征映射。卷积核相当于特征检测器每一个卷积核都会生成一张特征图提取一类特定的空间特征。多卷积核可以同时提取边缘、纹理、角点等多种特征这也是后续多输入多输出通道的基础。2.3.2 感受野感受野指输出特征图上某一个像素点对应输入原始图像的区域大小。例如 3×3 卷积核、步幅 1 的情况下输出每个像素感受野为 3×3堆叠两层 3×3 卷积后感受野会扩大到 5×5。感受野越大模型能捕捉的全局特征越强深层网络依靠堆叠卷积层扩大感受野实现全局特征建模。2.4 互相关与数学卷积的区别总结数学标准卷积先翻转卷积核上下翻转 左右翻转再做加权求和深度学习框架卷积层直接做互相关运算无卷积核翻转权重共享特性不受影响模型训练收敛逻辑一致工程上统一默认互相关运算即可。三、填充和步幅卷积超参数核心设计机制在基础卷积运算中若输入尺寸为nh​×nw​卷积核尺寸为kh​×kw​步幅为 1、无填充时输出特征图尺寸会变为(nh​−kh​1)×(nw​−kw​1)。每经过一次卷积特征图宽高都会缩小深层网络堆叠后特征图尺寸会快速衰减甚至缩为 1×1丢失大量边缘特征。为解决特征图尺寸收缩、边缘特征丢失、自定义下采样倍率三大问题引入填充Padding和步幅Stride两个核心超参数是卷积网络设计必须掌握的基础。3.1 填充Padding原理与应用3.1.1 填充定义填充指在输入特征图的上下左右边缘补充像素最常用零填充即补充的像素数值全部为 0。填充大小用p表示上下各填充p行左右各填充p列。3.1.2 填充的核心作用保持特征图尺寸不变这是最常用的场景选择合适的填充值让卷积前后宽高一致。公式当卷积核尺寸为k设置填充p⌊k/2⌋即可实现尺寸不变。例如 3×3 卷积核填充 p15×5 卷积核填充 p2。保留边缘特征无填充时图像边缘像素只会参与一次卷积运算中心像素参与多次运算边缘特征容易丢失填充后边缘像素被补充边缘特征能被充分提取。适配网络结构设计现代经典网络VGG、ResNet大量使用 same 填充尺寸不变填充方便网络模块化堆叠。3.1.3 填充后输出尺寸计算公式设输入高度nh​、宽度nw​卷积核高kh​、宽kw​上下填充ph​左右填充pw​步幅sh​1,sw​1输出高度oh​nh​2ph​−kh​1输出宽度ow​nw​2pw​−kw​13.2 步幅Stride原理与应用3.2.1 步幅定义步幅指卷积核在输入特征图上每次滑动的像素间隔垂直步幅sh​控制纵向滑动距离水平步幅sw​控制横向滑动距离。默认步幅为 1即每次滑动 1 个像素。3.2.2 步幅的核心作用实现下采样降维设置步幅大于 1可直接缩小特征图宽高无需额外汇聚层减少参数量和计算量。例如步幅为 2特征图宽高直接减半。扩大感受野大步幅卷积可以让输出像素映射更大的输入区域快速扩大感受野。控制特征图尺寸自由自定义输出特征图大小适配不同任务的特征粒度需求。3.2.3 填充 步幅通用输出尺寸公式这是深度学习最核心的通用公式所有卷积层输出尺寸都可通过该公式计算oh​⌊(sh​nh​2ph​−kh)/sh​​⌋1ow​⌊(sw​nw​2pw​−kw​​)/sw⌋1公式中向下取整是为了适配无法整除的情况PyTorch 卷积层严格遵循该计算规则。3.3 填充与步幅实战场景分类Same 卷积填充 步幅组合让输出特征图与输入尺寸完全一致常用于网络主干特征提取层Valid 卷积无填充、步幅 1特征图尺寸持续缩小适合浅层初步特征提取下采样卷积步幅设为 2、无填充或少量填充替代汇聚层实现降维轻量化网络常用设计。四、汇聚层池化层下采样与特征鲁棒性增强卷积层提取空间特征后特征图仍存在冗余信息且对像素偏移、微小形变过于敏感。汇聚层Pooling Layer池化层是卷积神经网络另一核心基础组件不包含可学习的权重参数仅对局部区域做聚合统计运算实现下采样、特征降噪、增强模型鲁棒性。4.1 最大汇聚层与平均汇聚层汇聚层同样有窗口尺寸、填充、步幅三大超参数运算逻辑与卷积类似汇聚窗口在特征图上滑动对窗口内像素做聚合计算生成输出像素。主要分为两种类型4.1.1 最大汇聚层Max Pooling取汇聚窗口内所有像素的最大值作为输出值。核心作用保留最强特征、抑制噪声。图像特征中最大值往往代表边缘、纹理、轮廓的显著特征忽略微弱噪声像素是工业界最常用的汇聚方式。经典 LeNet、VGG 网络均以最大汇聚层为主。4.1.2 平均汇聚层Avg Pooling取汇聚窗口内所有像素的平均值作为输出值。核心作用平滑特征、全局均值统计。适合需要保留整体特征分布、弱化局部极值的场景常用于网络全局池化、特征归一化环节。4.2 汇聚层的填充与步幅规则汇聚层的填充、步幅超参数定义与卷积层完全一致输出尺寸同样沿用通用公式o⌊(sn2p−k​)/s⌋1工程中最常用配置汇聚窗口 2×2、步幅 2、无填充直接将特征图宽高减半是 LeNet 等经典网络的标准配置。4.3 汇聚层多通道特性汇聚层不会改变通道数量对每个输入通道独立进行汇聚运算输出通道数与输入通道数保持一致。这一点和卷积层不同卷积层可通过设置卷积核数量改变输出通道数。4.4 汇聚层核心四大作用下采样降维快速缩小特征图宽高减少后续网络的参数量、计算量加速训练与推理平移鲁棒性轻微平移输入图像汇聚层输出结果基本不变适配现实图像的位置偏移特征降噪最大汇聚保留核心特征过滤局部冗余噪声平均汇聚平滑随机噪声降低过拟合通过下采样压缩冗余特征减少模型对训练集局部噪声的拟合提升泛化能力。4.5 汇聚层与步幅卷积的区别很多初学者会混淆步幅为 2 的卷积和 2×2 步幅 2 的汇聚层核心区别卷积层带可学习权重能学习特征汇聚层无参数仅做固定聚合运算卷积层可改变通道数汇聚层通道数固定不变步幅卷积侧重特征提取 降维汇聚层侧重特征聚合 降噪降维。五、经典卷积网络 LeNet 原理、结构与 PyTorch 完整实现5.1 LeNet 网络背景与定位LeNet 诞生于 1998 年是世界上第一个成功落地商用的卷积神经网络由 LeCun 等人提出最初用于手写数字识别任务MNIST 数据集。LeNet 奠定了现代卷积神经网络的基础架构范式卷积层→激活函数→汇聚层→卷积层→激活函数→汇聚层→全连接层→输出分类。后续所有经典 CNN 网络AlexNet、VGG、ResNet都沿用 LeNet 的层堆叠逻辑是深度学习入门必须吃透的基准模型。5.2 LeNet 整体网络结构LeNet 针对 MNIST 手写数字数据集28×28 单通道灰度图像10 分类设计完整结构分为特征提取模块和分类输出模块两部分5.2.1 特征提取模块第一层卷积层 16 个 5×5 卷积核填充 2步幅 1输入 1 通道输出 6 通道特征图尺寸 28×28激活函数 Sigmoid第一层汇聚2×2 最大汇聚步幅 2特征图尺寸缩小为 14×14第二层卷积层 216 个 5×5 卷积核无填充步幅 1输入 6 通道输出 16 通道特征图尺寸 10×10激活函数 Sigmoid第二层汇聚2×2 最大汇聚步幅 2特征图尺寸缩小为 5×55.2.2 分类输出模块将 16 张 5×5 特征图展平为一维向量16×5×5400 维堆叠三层全连接层全连接层 1400→120 神经元Sigmoid 激活全连接层 2120→84 神经元Sigmoid 激活全连接层 384→10 神经元无激活输出 10 分类逻辑值。5.3 PyTorch 从零实现 LeNet 模型以下为可直接运行的完整代码包含网络定义、数据集加载、训练配置、训练循环、测试评估适配 PyTorch 最新版本import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader # 1. 定义LeNet网络结构 class LeNet(nn.Module): def __init__(self): super(LeNet, self).__init__() # 特征提取层 self.features nn.Sequential( nn.Conv2d(1, 6, kernel_size5, padding2), nn.Sigmoid(), nn.MaxPool2d(kernel_size2, stride2), nn.Conv2d(6, 16, kernel_size5), nn.Sigmoid(), nn.MaxPool2d(kernel_size2, stride2) ) # 分类全连接层 self.classifier nn.Sequential( nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(), nn.Linear(120, 84), nn.Sigmoid(), nn.Linear(84, 10) ) def forward(self, x): x self.features(x) # 展平操作 x torch.flatten(x, 1) x self.classifier(x) return x # 2. 数据预处理与加载 transform transforms.Compose([ transforms.Resize((28,28)), transforms.ToTensor(), ]) # 加载MNIST手写数字数据集 train_dataset datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) test_dataset datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransform) train_loader DataLoader(train_dataset, batch_size64, shuffleTrue) test_loader DataLoader(test_dataset, batch_size64, shuffleFalse) # 3. 设备配置、模型、损失函数、优化器 device torch.device(cuda if torch.cuda.is_available() else cpu) model LeNet().to(device) criterion nn.CrossEntropyLoss() optimizer optim.SGD(model.parameters(), lr0.8) # 4. 训练函数 def train(model, loader, epoch): model.train() running_loss 0.0 for batch_idx, (data, target) in enumerate(loader): data, target data.to(device), target.to(device) optimizer.zero_grad() output model(data) loss criterion(output, target) loss.backward() optimizer.step() running_loss loss.item() print(f第{epoch1}轮训练 平均损失: {running_loss/len(loader):.4f}) # 5. 测试评估函数 def test(model, loader): model.eval() correct 0 total 0 with torch.no_grad(): for data, target in loader: data, target data.to(device), target.to(device) output model(data) _, predicted torch.max(output.data, 1) total target.size(0) correct (predicted target).sum().item() print(f测试集准确率: {100 * correct / total:.2f}%) # 6. 开始训练与测试 if __name__ __main__: epochs 10 for epoch in range(epochs): train(model, train_loader, epoch) test(model, test_loader)5.4 模型训练结果与原理解析训练配置批量大小 64、学习率 0.8、SGD 优化器、交叉熵损失训练 10 轮后 MNIST 测试集准确率可达 98% 以上核心逻辑卷积层自动学习手写数字的边缘、轮廓特征汇聚层降维降噪全连接层完成特征映射与分类适配拓展将输入通道改为 3即可适配 RGB 彩色图像分类仅需调整第一层卷积输入通道数。六、深度学习卷积章节实际学习场景 高频避坑指南6.1 实际学习应用场景场景 1零基础入门深度学习计算机视觉本章是从全连接 MLP 过渡到 CNN 的唯一必经之路所有计算机视觉方向学习者必须先吃透卷积、填充步幅、汇聚层、LeNet才能后续学习复杂网络。场景 2图像分类项目入门实战MNIST 手写数字、Fashion-MNIST 服饰分类等入门数据集均可直接基于 LeNet 修改微调快速搭建可落地的图像分类模型适合课程作业、入门项目练手。场景 3网络结构调参基础掌握填充、步幅、卷积核尺寸、汇聚层配置后可自主计算任意网络的特征图尺寸自定义搭建轻量化卷积网络理解经典网络的结构设计逻辑。场景 4面试笔试核心考点卷积运算原理、填充步幅尺寸公式、汇聚层作用、LeNet 网络结构与参数配置是深度学习算法岗、CV 算法岗面试必问基础知识点。6.2 高频学习避坑指南新手最易犯错点汇总坑 1混淆数学卷积与框架卷积新手容易死磕数学卷积核翻转忽略 PyTorch 实际用的是互相关运算浪费大量时间。记住工程不用翻转卷积核只需掌握互相关运算流程即可。坑 2死记尺寸公式不会灵活计算不理解填充步幅尺寸公式的推导逻辑只会死记硬背遇到自定义卷积核、步幅配置就无法计算特征图尺寸。建议手动推导 2~3 次尺寸计算吃透公式原理。坑 3填充 p 值设置混乱不知道 3×3 卷积核填充 1、5×5 填充 2 的对应关系随意设置填充导致特征图尺寸错乱。牢记k×k 卷积核same 填充 pk//2。坑 4汇聚层和卷积层步幅混淆误以为汇聚层可以改变通道数混淆最大汇聚与平均汇聚的适用场景。记住汇聚层只降宽高、不改通道特征提取用最大汇聚全局统计用平均汇聚。坑 5LeNet 代码照搬不理解维度直接复制代码运行不懂 16×5×5 展平维度的来源修改图像尺寸后模型报错。必须手动逐层计算 LeNet 每一层的特征图尺寸理解维度变换逻辑。坑 6激活函数乱用LeNet 原生用 Sigmoid新手随意替换为 ReLU 后不调整学习率导致训练不收敛。Sigmoid 易梯度消失现代网络优先用 ReLU同时需配套调小学习率。坑 7忽略通道维度概念单通道灰度图、三通道 RGB 图像卷积通道配置混乱不知道卷积核数量对应输出通道数搭建多通道网络时维度报错。七、本章系统化学习计划7 天循序渐进学习方案第 1 天基础理论学习学习全连接层缺陷、CNN 三大核心优势理解局部连接、权重共享、平移不变性的底层逻辑掌握卷积神经网络诞生的背景意义。第 2 天卷积运算原理手动演算互相关运算示例理解卷积核、特征映射、感受野概念区分数学卷积与深度学习卷积的差异手写边缘检测卷积核验证效果。第 3 天填充与步幅精通牢记输出尺寸通用计算公式手动计算不同卷积核、填充、步幅组合的输出尺寸掌握 Same 卷积、Valid 卷积的应用场景。第 4 天汇聚层学习区分最大汇聚与平均汇聚的作用掌握汇聚层超参数配置、通道特性对比步幅卷积与汇聚层的区别能根据任务选择合适的汇聚方式。第 5 天LeNet 网络结构拆解逐层拆解 LeNet 的卷积层、汇聚层、全连接层维度手动计算每一层特征图尺寸熟记 LeNet 的设计范式与各层作用。第 6 天代码实战调试运行完整 LeNet PyTorch 代码调试训练参数学习率、批量大小、迭代轮数观察损失与准确率变化修改输入为彩色图像适配三通道。第 7 天复盘总结与避坑梳理整理本章核心公式、关键概念、高频易错点独立从零手写 LeNet 网络代码不参考模板完成模型搭建与训练。八、下章内容预告本章我们完成了卷积神经网络底层基础组件与经典入门模型 LeNet 的学习掌握了卷积、填充步幅、汇聚层的原理与实战。下一章将进阶学习现代经典卷积神经网络依次讲解 AlexNet、VGG、NiN、GoogLeNet、ResNet 等工业级网络的创新点、结构设计、原理优势与 PyTorch 完整实现带你理解深层卷积网络如何解决梯度消失、提升特征提取能力、实现高精度图像分类从入门级 LeNet 进阶到工业可用的 CV 经典模型。九、结尾互动本文详细拆解了《动手学深度学习》卷积神经网络全部核心知识点从底层原理、数学运算、超参数设计、模型实战到避坑指南、学习计划全覆盖零基础也能完整吃透卷积基础。觉得本文内容干货满满的朋友点赞 收藏不迷路专注深度学习与 PyTorch 实战精讲后续持续更新经典网络、计算机视觉项目、深度学习避坑教程点个关注第一时间获取进阶干货跟着系统化教程从零入门深度学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2570531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…