这次我们来看一个常被“名词吓住”、但实际非常基础的内容CNN 卷积神经网络。如果你搜过“CNN 原理”大概率看到的是卷积公式、填充、步长、感受野一堆术语堆在一起最后也没搞懂它到底在算什么。这篇文章换一种方式讲先用最直白的方式说清楚卷积在干什么再直接把一个可运行的 CNN 代码跑起来最后看特征图、验证效果、调参、排查踩坑。先给结论CNN 不需要 4090 才能学也不需要你先精通高等数学。它的核心只有三件事卷积层提取局部特征、池化层压缩尺寸、全连接层做分类。本文会带你在本地完成 Python 环境准备、用 PyTorch 写一个手写数字识别模型、在 CPU 和 GPU 上分别观察训练差异、查看卷积层输出的特征图并说明训练不收敛、显存不足、GPU 没被识别等常见问题的排查思路。如果你是零基础这篇文章可以直接按顺序读如果你已经跑过一些模型但没细看结构可以直接跳到第 5 章看卷积层的可视化和第 7 章的性能对比那里更贴近实际开发视角。1. CNN 核心能力速览先把 CNN 的关键信息集中放在一起方便快速判断它适不适合你当前的任务。能力项说明神经网络类型前馈神经网络的一种主要使用卷积运算提取特征适用任务图像分类、目标检测、图像分割、OCR、人脸识别、医学影像分析硬件需求纯 CPU 可运行有 NVIDIA 显卡可显著加速训练框架选择PyTorch、TensorFlow、PaddlePaddle、Keras典型数据集MNIST、CIFAR-10、ImageNet、自定义图片文件夹训练流程数据加载、模型构建、损失函数、反向传播、迭代优化批量任务支持 Batch 训练和批量推理一次处理多张图片接口调用训练完成后可导出模型封装为 HTTP 服务或嵌入应用资源占用与模型深度、输入分辨率、Batch Size 直接相关部署方式本地脚本、Web 服务、移动端转换、嵌入式部署适合人群刚入门深度学习的学生、转行 AI 工程的开发者注意一点CNN 不是万能的。它擅长处理有局部空间结构的网格数据比如图像。如果输入是纯文本序列先用 Transformer 或 RNN 类模型更合适如果是图结构数据则考虑图卷积网络 GCN。后面第 2 章会明确说明边界。2. 适用场景与使用边界2.1 CNN 最擅长的任务CNN 的核心假设是图像中相邻像素之间存在局部相关性。一个物体通常由边缘、纹理、颜色块组合而成这些局部模式在空间上不断重复。卷积层做的事情就是把“识别某种局部模式”的参数在整张图上共享。所以 CNN 特别适合以下场景图像分类判断一张图里是猫还是狗、是正常零件还是缺陷零件。目标检测不仅分类还要框出物体位置经典模型有 Faster R-CNN、YOLO 系列。语义分割对每个像素分类判断哪些像素属于人、哪些属于背景。OCR 文字识别先检测文字区域再对字符图像分类。医学影像分析肺结节检测、眼底图像分类、病理切片识别。从实际工程角度看CNN 还有两个非常适合落地的特点第一支持批量任务。训练时可以把几十张甚至上百张图片打包成一个 Batch 输入网络推理时同样可以批量处理一个文件夹里的所有图片。这意味着它非常适合做“给定一批图片自动输出结果”的自动化流程。第二模型可以部署为接口服务。训练好的 CNN 模型可以保存为权重文件然后加载到 Flask、FastAPI 等服务框架中对外提供预测 API。这几乎是工业部署的标准路径。2.2 不适合的场景CNN 不擅长处理没有空间结构关系的数据。比如纯数值表格数据特征之间没有二维局部相关性用梯度提升树或 MLP 效果通常更好。超长距离依赖问题比如一段长文本中跨越多段落的关键信息关联CNN 的感受野受限Transformer 更合适。图结构数据比如社交网络、分子结构这类数据需要用图神经网络 GNN。2.3 使用边界与合规提醒如果你用 CNN 做人脸识别、声音分类、医学图像分析等场景需要特别注意授权和数据合规问题训练数据来源必须合法涉及个人人脸、医疗影像等敏感数据时需要脱敏和授权。人脸识别类应用要遵守相关法律法规不能未经许可采集和使用人脸信息。医学影像模型只能作为辅助工具不能直接替代医生诊断实际部署前需要严格测试。从开源数据集下载的图片要确认数据集的使用条款部分数据集仅限研究用途不能直接商用。3. 环境准备与前置条件CNN 开发最大的门槛不是显卡而是环境依赖。先给出一套通用检查清单然后逐个说明。3.1 硬件要求CPU大部分 x86 架构 CPU 都可以Intel、AMD 均可建议 4 核以上。内存8GB 起步16GB 更稳妥。处理高分辨率图片时内存占用会明显升高。显卡NVIDIA GPU 优先支持 CUDA 的显卡可以直接用 GPU 加速。纯 CPU 也能跑通全部实验只是速度慢。磁盘安装 PyTorch 和依赖库预留 10GB 左右空间数据集按需下载。3.2 软件要求操作系统Windows 10/11、Ubuntu 20.04 及以上、macOS 均可。Python建议 3.9 到 3.11 之间过高的版本可能遇到部分依赖库还没适配的问题。深度学习框架PyTorch 是当前最常用的选择安装命令可参考 PyTorch 官网不同 CUDA 版本对应的安装命令不同。CUDA如果使用 NVIDIA 显卡需要先查看显卡驱动支持的 CUDA 版本然后安装对应版本的 PyTorch。不是必须装完整的 CUDA ToolkitPyTorch 自带运行时组件。先运行下面的命令检查基础环境# 查看系统 Python 版本 python --version # 查看 NVIDIA 显卡信息确认驱动是否正常 nvidia-smi # 查看已安装的 PyTorch 版本和 CUDA 是否可用 python -c import torch; print(torch.__version__); print(torch.cuda.is_available())如果在 Windows 上运行python --version提示找不到命令需要先在系统环境变量中添加 Python 的安装路径。更稳妥的判断是先把 PyTorch 装好再单独验证 CUDA 是否可用。即使 CUDA 不可用CPU 模式也能跑通本文所有代码只是训练要比 GPU 慢很多。4. 第一个 CNN 实战MNIST 手写数字识别这一节直接写代码。不绕弯目标是训练一个能识别 0-9 手写数字的 CNN并把完整训练流程跑通。4.1 安装依赖建议新建一个虚拟环境避免依赖冲突# 创建虚拟环境 python -m venv cnn_env # 激活虚拟环境Windows 下运行 cnn_env\Scripts\activate # Linux/macOS 下运行 # source cnn_env/bin/activate # 安装依赖 pip install torch torchvision如果显卡驱动较新PyTorch 默认安装版本可能已经支持。如果后续验证 CUDA 不可用再根据实际驱动版本去 PyTorch 官网找对应安装命令。4.2 数据集准备这里使用 MNIST 数据集。它包含 60000 张训练图片和 10000 张测试图片每张都是 28x28 的灰度图目标是识别图中的数字。PyTorch 的 torchvision 可以直接下载不需要手动处理。import torch from torchvision import datasets, transforms # 数据预处理转为张量并标准化到 [-1, 1] 区间 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) # 下载并加载训练集 train_dataset datasets.MNIST( root./data, trainTrue, transformtransform, downloadTrue ) # 下载并加载测试集 test_dataset datasets.MNIST( root./data, trainFalse, transformtransform, downloadTrue ) train_loader torch.utils.data.DataLoader( train_dataset, batch_size64, shuffleTrue ) test_loader torch.utils.data.DataLoader( test_dataset, batch_size64, shuffleFalse ) print(f训练集大小: {len(train_dataset)}) print(f测试集大小: {len(test_dataset)}) print(f每次迭代加载图片数: {len(train_loader.dataset) / 64:.0f})首次运行会自动下载数据集文件保存到./data目录。下载速度取决于网络环境如果卡住可以检查网络连接或者从其他镜像源下载 MNIST 数据文件后放到对应目录。4.3 定义 CNN 网络结构下面这段代码定义了一个经典结构的 CNN包含两个卷积块和一个全连接分类头。启动训练前可以先读一遍理解每一层的数据维度变化。import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() # 第一个卷积块输入 1 通道输出 32 通道 self.conv_block1 nn.Sequential( nn.Conv2d(1, 32, kernel_size3, stride1, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size2, stride2) ) # 第二个卷积块输入 32 通道输出 64 通道 self.conv_block2 nn.Sequential( nn.Conv2d(32, 64, kernel_size3, stride1, padding1), nn.ReLU(), nn.MaxPool2d(kernel_size2, stride2) ) # 全连接分类层 self.classifier nn.Sequential( nn.Flatten(), nn.Linear(64 * 7 * 7, 128), nn.ReLU(), nn.Linear(128, 10) ) def forward(self, x): x self.conv_block1(x) x self.conv_block2(x) x self.classifier(x) return x model SimpleCNN() print(model)先手动算一下数据维度变化输入图片28x281 通道。第一个卷积块卷积层 padding1、kernel3 时尺寸不变仍是 28x28。池化层 stride2 后尺寸减半变成 14x14。第二个卷积块卷积层继续保持尺寸池化后 14x14 变为 7x7。全连接层输入维度是 64 通道乘以 7x7即 64x7x73136。把维度算清楚可以避免后面报维度不匹配的错误。这是 CNN 开发中最常见的报错点。4.4 编写训练与评估代码import torch.optim as optim device torch.device(cuda if torch.cuda.is_available() else cpu) print(f当前使用设备: {device}) model SimpleCNN().to(device) criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001) epochs 5 for epoch in range(epochs): model.train() running_loss 0.0 correct 0 total 0 for images, labels in train_loader: images, labels images.to(device), labels.to(device) # 梯度清零 optimizer.zero_grad() # 前向传播 outputs model(images) # 计算损失 loss criterion(outputs, labels) # 反向传播 loss.backward() # 更新参数 optimizer.step() running_loss loss.item() _, predicted torch.max(outputs, 1) total labels.size(0) correct (predicted labels).sum().item() train_acc 100.0 * correct / total print(fEpoch [{epoch1}/{epochs}], Loss: {running_loss/len(train_loader):.4f}, Accuracy: {train_acc:.2f}%) # 测试 model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in test_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, 1) total labels.size(0) correct (predicted labels).sum().item() print(f测试集准确率: {100.0 * correct / total:.2f}%)这段代码就是 CNN 训练的标准模板。后面换任何数据集只需要修改数据加载部分和网络结构的输入通道数、输出类别数即可。4.5 保存并加载模型模型训练完成后通常需要保存权重文件供后续推理使用。# 保存模型权重 torch.save(model.state_dict(), cnn_mnist.pth) print(模型已保存到 cnn_mnist.pth) # 加载模型权重 loaded_model SimpleCNN() loaded_model.load_state_dict(torch.load(cnn_mnist.pth)) loaded_model.to(device) loaded_model.eval() print(模型加载完成)推理时记得调用model.eval()这会把 Dropout 和 BatchNorm 切换到评估模式避免推理结果不稳定。5. CNN 核心原理拆解跑通代码之后再回来理解 CNN 的结构。只背概念记不住但你已经看过实际输出了这时候再讲原理就能对上号。5.1 卷积层局部特征提取卷积层的核心是一个小窗口称为卷积核或滤波器。常见尺寸是 3x3、5x5。这个窗口在输入图像上从左到右、从上到下滑动每次滑动时窗口内的像素值与卷积核权重逐元素相乘再求和得到输出特征图上的一个值。实际使用中一个卷积层通常有多个卷积核。每个卷积核负责识别一种局部模式比如有的核专门检测水平边缘有的核检测垂直边缘有的核检测纹理变化。卷积核数量就是输出通道数。卷积核尺寸感受野大小参数量单通道特点1x11x11只做通道变换不提取空间特征3x33x39最常用参数量小堆叠后感受野足够5x55x525一次覆盖范围大但参数量多7x77x749早期网络常用现代网络很少直接用5.2 感受野与权值共享CNN 的两个关键特性是局部连接和权值共享。局部连接的意思是每个输出神经元只和输入图像上一个小区域相连。这符合图像的局部相关性特点。全连接网络也可以处理图像但一张 1000x1000 的彩色图如果全连接第一层参数量就是 300 万 x 隐含层节点数计算量完全不可接受。权值共享的意思是同一个卷积核在整张图上滑动时权重保持不变。这就把参数量降到了极小。一个 3x3 卷积核只有 9 个权重参数却有 9 个偏置就 10 个参数不需要随图片尺寸增长。5.3 池化层压缩空间尺寸池化层的目的是在保留主要特征的前提下减小特征图尺寸。最常见的最大池化取窗口内最大值平均池化取窗口内平均值。池化的好处有两个第一降低后续层的计算量。一个 28x28 特征图经过 2x2 最大池化后变成 14x14数据量减少到四分之一。第二增强平移不变性。物体稍微移动几个像素池化后的结果仍然相似这有助于模型对微小位移更鲁棒。5.4 激活函数与非线性如果只有卷积和池化无论叠加多少层网络都等价于线性变换。激活函数的作用是引入非线性。CNN 中最常用的激活函数是 ReLU公式是y max(0, x)。它的优点是计算快、梯度消失问题比 Sigmoid 轻。在嵌入式或低精度推理场景中还有一个值得注意的点FP8 卷积在某些硬件上不支持大于 32 的卷积核尺寸比如 7x7 卷积可能自动回退到 FP16 或 FP32。如果做模型推理优化时发现卷积层速度异常优先检查是不是大卷积核触发了精度回退。5.5 全连接层输出分类结果卷积层和池化层负责把原始图像转换成高维特征全连接层负责把特征映射到最终的分类结果。以 MNIST 为例最后输出的 10 个数分别对应 0-9 的置信度分数取最大值对应的数字就是分类结果。比较完整的 CNN 结构是输入层 - 卷积层 - 激活函数 - 池化层 - 重复若干次 - 展平 - 全连接层 - 输出层。ResNet、VGG、GoogLeNet 等经典网络都是在这个基础上演进来的。6. CNN 关键参数与训练调优6.1 超参数速览参数作用常见取值调优方向学习率控制参数更新步长0.0001 到 0.01过大不收敛过小收敛慢Batch Size每次迭代使用的样本数16、32、64受显存限制太大容易 OOM迭代轮数 Epoch整个数据集遍历次数5 到 100结合验证集防止过拟合优化器参数更新策略Adam、SGDAdam 适合快速起步SGD 适合精调卷积核数量特征提取能力32、64、128逐层增加不能盲目加大6.2 数据增强数据增强是训练 CNN 最常见的提升手段通过对已有图片做随机变换来扩充数据集降低过拟合。transform_augmented transforms.Compose([ transforms.RandomRotation(10), transforms.RandomAffine(degrees0, translate(0.1, 0.1)), transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ])数据增强不是越多越好过度增强反而会让模型学不到有效特征。要根据任务类型选择比如 OCR 任务常用随机旋转医学影像分类则不宜做大幅旋转。6.3 训练观察点训练过程中需要重点观察四个指标Loss 是否下降。如果 Loss 震荡不降大概率学习率过大。训练准确率是否上升。训练集准确率高但测试集低说明过拟合。训练集和验证集准确率差距。差距逐渐拉大时需要加正则或数据增强。每一轮训练耗时。时间突然变长可能是数据加载或显存交换出了问题。7. 资源占用与性能观察CNN 训练中的显存占用是部署时最需要关心的指标。7.1 显存占用观察方法训练过程中另开一个终端使用nvidia-smi持续监控显存变化# 每 1 秒刷新一次显存状态 nvidia-smi -l 1更精细的方式是在训练代码中打印 GPU 显存占用import torch def print_gpu_memory(): if torch.cuda.is_available(): print(f已分配显存: {torch.cuda.memory_allocated() / 1024**3:.2f} GB) print(f缓存显存: {torch.cuda.memory_reserved() / 1024**3:.2f} GB) # 每个训练轮次后调用 print_gpu_memory()7.2 CNN 显存占用规律显存占用主要由五个因素决定输入图片分辨率。分辨率越高中间特征图越大显存占用越高。Batch Size。Batch Size 越大显存占用近似线性增长。网络深度和卷积核数量。通道数越多特征图越多显存占用越大。是否使用混合精度。FP16 可以比 FP32 节省约一半显存。训练还是推理。训练需要保存中间激活值用于反向传播显存占用远大于推理。如果显存不够但必须调大 Batch Size可以尝试梯度累积或加 torch.utils.checkpoint。对 MNIST 这种小数据集用 CPU 训练其实也能接受但一旦换成 CIFAR-10 或自定义高清数据集GPU 加速的优势就非常明显。7.3 降低显存占用的通用手段降低显存占用最直接的几个方法调小 Batch Size比如从 64 改为 32 或 16。调低输入图片分辨率比如从 224x224 降到 160x160。使用 FP16 混合精度训练在 PyTorch 中调用torch.cuda.amp.autocast()。减少卷积核数量比如第一层从 64 改为 32。使用更深的模型但开启梯度检查点。8. 接口 API 与批量推理CNN 模型训练完之后最常见的使用方式有两种批量文件夹推理以及封装 HTTP 服务。8.1 批量文件夹推理假设有一个文件夹test_images/里面放了几张手写数字图片可以通过下面的代码批量推理import os from PIL import Image import torch import torchvision.transforms as transforms device torch.device(cuda if torch.cuda.is_available() else cpu) model SimpleCNN() model.load_state_dict(torch.load(cnn_mnist.pth)) model.to(device) model.eval() transform transforms.Compose([ transforms.Resize((28, 28)), transforms.Grayscale(num_output_channels1), transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) image_dir ./test_images results [] for filename in sorted(os.listdir(image_dir)): if not filename.lower().endswith((.png, .jpg, .jpeg)): continue image_path os.path.join(image_dir, filename) image Image.open(image_path) input_tensor transform(image).unsqueeze(0).to(device) with torch.no_grad(): outputs model(input_tensor) _, predicted torch.max(outputs, 1) results.append((filename, predicted.item())) for filename, label in results: print(f{filename}: 预测数字 {label})8.2 封装为 HTTP API 服务用 FastAPI 封装一个最小的预测接口from fastapi import FastAPI, UploadFile, File from PIL import Image import io import torch import torchvision.transforms as transforms app FastAPI() device torch.device(cuda if torch.cuda.is_available() else cpu) model SimpleCNN() model.load_state_dict(torch.load(cnn_mnist.pth)) model.to(device) model.eval() transform transforms.Compose([ transforms.Resize((28, 28)), transforms.Grayscale(num_output_channels1), transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) app.post(/predict) async def predict(file: UploadFile File(...)): image_bytes await file.read() image Image.open(io.BytesIO(image_bytes)) input_tensor transform(image).unsqueeze(0).to(device) with torch.no_grad(): outputs model(input_tensor) _, predicted torch.max(outputs, 1) return {label: predicted.item()}启动服务uvicorn main:app --host 127.0.0.1 --port 8000调用接口curl -X POST -F filetest_image.png http://127.0.0.1:8000/predict接口服务部署之后需要注意访问范围限制。不要在公网直接暴露未设置鉴权的推理服务至少加上 Token 校验或只在局域网内使用。如果固定范围内有大量图片需要推理建议在批量推理脚本中加入失败重试和日志记录避免单张图片损坏导致整个任务中断。9. 常见问题与排查方法问题现象可能原因排查方式解决方案torch.cuda.is_available() 返回 FalsePyTorch 版本与 CUDA 不匹配打印 torch.version.cuda 和显卡驱动版本重新安装对应 CUDA 版本的 PyTorch训练 Loss 不下降或震荡学习率过大打印历史 Loss 曲线调小学习率到 0.0001 或 0.0005GPU 训练时显存不足 OOMBatch Size 过大或分辨率过高看报错发生在哪一层调小 Batch Size或降低输入分辨率模型报维度不匹配全连接层输入维度算错打印每一层输出的 shape在 forward 中插入 print(x.shape) 逐层检查训练集准确率高、测试集低过拟合对比 train_acc 与 test_acc增加数据增强、增大训练数据、加 Dropout数据集下载卡住网络问题或证书问题检查下载进度和连接手动下载数据文件放入 root 对应目录CPU 训练非常慢输入尺寸过大或网络过深观察每轮耗时缩小图片分辨率或用 GPU 训练推理结果和训练结果差别大忘记调用 model.eval()检查推理代码推理前添加 model.eval() 和 with torch.no_grad()加载模型时 key 不匹配网络结构定义与保存时不一致打印 state_dict 的 key 列表保证加载模型结构参数与保存时完全一致补充说明一个常见误解torch.load默认保存路径中的模型如果用了 GPU 训练在纯 CPU 环境加载需要指定map_locationtorch.device(cpu)否则会报 CUDA 不可用的错误。10. CNN 训练最佳实践把这一年多跑 CNN 项目的经验浓缩成几条原则照着做能少踩很多坑。第一第一次运行先小参数。不要一上来就 224x224、ResNet50、100 轮。先用 MNIST 或 CIFAR-10 跑通流程确认数据加载、训练循环、模型保存、推理加载全部没有报错再放大模型和数据规模。第二保留一套最小可运行配置。把数据预处理、模型定义、训练参数固定成一个配置文件后续实验都基于这套配置修改。这样可以随时回到一个确定可运行的状态排查问题时非常有用。第三训练日志要完整。训练过程输出到控制台的同时最好同时保存到日志文件。推荐记录epoch、训练 loss、训练准确率、验证准确率、学习率、每轮耗时。批量任务的日志尤为重要否则任务中断后很难定位问题。第四模型文件和目录分开管理。建议这样组织目录project/ ├── data/ # 原始数据集 ├── models/ # 训练好的权重文件 ├── logs/ # 训练日志 ├── scripts/ # 训练和推理脚本 ├── test_images/ # 测试图片 └── outputs/ # 推理输出结果第五验证集和测试集不能混用。验证集用于调整超参数测试集只能最后评估一次。如果反复用测试集调参测试集准确率就会失去参考价值。第六批量任务要加失败重试机制。一次处理上千张图片时总会有个别图片损坏、格式异常或读取超时。建议每个批次记录成功数和失败数失败任务放入重试队列而不是直接中断整个任务。11. 从 CNN 理解到实战扩展CNN 是整个深度学习视觉方向的地基。跑通 MNIST 之后可以按这个顺序继续扩展用 CIFAR-10 替换 MNIST图片变成 32x32 三通道网络输入通道从 1 改为 3理解彩色图像处理。实现一个 ResNet 或 MobileNet感受残差连接和深度网络在训练稳定性的差异。接入 TensorBoard 或 Visdom可视化 Loss 曲线和特征图观察不同层到底提取了什么特征。把训练好的模型导出为 ONNX在推理引擎中加速体验完整的工业部署流程。换一个自定义数据集比如给定一批零件缺陷图片训练一个二分类模型理解真实工程任务的数据处理流程。从原理角度看CNN 最核心的思想就是“用滑动窗口 权值共享减少参数用多层结构从局部到整体提取特征”。这个概念理解了后面看 ResNet、EfficientNet、YOLO 等模型时会轻松非常多。如果你需要在一周内快速上手建议顺序是先跑通本文的 MNIST 代码再手动把数据维度变化算清楚最后把网络换成 CIFAR-10 做一次完整对比实验。这三步做完CNN 的底层逻辑基本就通了。如果后续遇到具体问题比如训练不收敛、显存不够、部署环境不兼容可以回到第 9 章的排查清单逐项定位。建议先收藏备用动手实践时随时可以回来对照检查。
企业数字化 ERP 产品动态
相关推荐
吃透《数据结构与算法分析C++》参考答案:考点拆解与可运行代码验证 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:08:07
Winform定时自动删除指定文件夹下文件:安全清理与无人值守实现 简介:面向Windows环境的Winform定时自动删除工具,基于.NET 3.5框架开发,适用于需要定期清理或按条件删除指定文件夹文件的运维人员与普通用户。程序支持选择或直接粘贴文件夹路径,按照日期前后天数、文件后缀名或文件大小筛选文件… · 2026/9/25 2:08:01
网络安全应急演练实践:勒索病毒场景下的快照回滚与备份恢复 简介:某市发展和改革委员会2020年度网络安全应急演练实施报告,面向政府信息化管理、网络安全运维及应急响应相关人员,用于了解如何通过模拟勒索病毒攻击等安全事件,验证日常备份与应急恢复机制的有效性。报告以办公自动化系统为演… · 2026/9/25 2:08:01
MySQL后台注入靶场实战:从环境搭建到提权完整链路 简介:这份资源是一套存在SQL注入漏洞的网站源码,面向正在学习Web安全、需要动手复现注入攻击的初学者与进阶者,可用于本地或空间搭建靶场环境,练习后台注入的探测与利用思路。压缩包共844个文件,约4.95MB,以… · 2026/9/25 2:37:40
源师兄BH1750光照扩展完整入门:从接线到第一个积木,5分钟测出环境光照 源师兄BH1750光照扩展完整入门:从接线到第一个积木,5分钟测出环境光照 【免费下载链接】CupCode_BH1750光线模块 该模块用于测量环境光线强度 项目地址: https://gitcode.com/yuanshixiong/test
想给自己的开发板加一块能"看光"的传感器… · 2026/9/25 2:37:22
Aliens Eye递归扩展完全指南:用--recurse-depth从简介里自动挖出关联账号 Aliens Eye递归扩展完全指南:用--recurse-depth从简介里自动挖出关联账号 【免费下载链接】Aliens_eye Hunt down 840 social media accounts using AI 项目地址: https://gitcode.com/gh_mirrors/al/Aliens_eye
Aliens Eye 是一款 AI 驱动的用户名扫描工具&… · 2026/9/25 2:37:15
【Dify】腾讯云智能字幕解析应用 音视频内容的自动转写和结构化处理已成为内容管理的重要一环。腾讯云SubtitleInfo智能字幕解析工作流,面向各类音视频数据,提供了自动提取、整理字幕信息的高效方案。
本文介绍腾讯云SubtitleInfo智能字幕解析的整体流程设计、节点拆解与应用案例,重点分析如何利用自动化工… · 2026/9/25 2:37:15
【Dify】数据统计分析可视化应用 数据统计分析是理解与利用数据的基础能力,无论是商业、科研还是日常运营,数据洞察已成为必备技能。通过自动化节点协作和可视化技术,数据分析工作流不仅大大简化了操作流程,还提升了分析效率。
本文介绍一种基于自动化节点的统计分析方法,涵盖数据导入、清洗、特征工程、… · 2026/9/25 2:37:15
【Dify】诗句封面生成与语音播报应用 以AI为核心的自动化创作工具已经进入内容生产的各个领域。古诗自动生成、配套视觉封面设计、诗句语音合成等多模态创新,正成为数字内容表达的新方式。
本文介绍一种利用大模型与多种AI工具自动生成古诗、诗句封面与语音播报的完整流程,覆盖主要技术节点及实际操作方法,适合… · 2026/9/25 2:37:15
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37