PyTorch加载MNIST数据集:从环境准备到可视化全流程拆解
做深度学习的同学应该都听过 MNIST 这个名字。它是手写数字识别数据集很多入门教程的第一站。我的零基础 PyTorch 旅程走到第二天任务很明确加载 MNIST 数据集。别看这一步在教程里经常被一带而过真动手才发现加载背后牵扯到张量形状、数据变换、批量读取这些概念每一个都能把人绕晕。这篇文章就是我那天的完整实操记录从环境准备到代码逐行拆解再到把数据可视化出来照着敲就能把 MNIST 稳稳加载进 PyTorch为后面写网络、跑训练清掉第一道坎。先说一个整体认知深度学习项目的第一步永远是“把数据送进管道”。数据读不进内存后面什么模型都免谈。MNIST 之所以经典是因为它足够小小到能让你把注意力集中在“数据是怎么流转的”这一件事上。所以这篇文章不只是贴代码我会把每一条为什么这么写都拆清楚你边看边敲基本不会卡壳。1. MNIST 数据集到底什么样先认清你要加载的对象1.1 数据集的组成与规格MNIST 是“手写数字识别数据集”收集了大量人手写的 0 到 9 这十个数字的扫描图像。标准情况下训练集有 60000 张图测试集有 10000 张图。每一张图都是 28 像素宽、28 像素高的灰度图所以单张图像就是一个 28×28 的矩阵矩阵里每个元素代表一个像素点的亮度取值范围是 0 到 2550 是纯黑255 是纯白。标签是同步提供的每张图对应一个 0 到 9 的数字比如某张图里面的手写数字是“5”这张图的标签就是 5。这里有个初学者容易忽略的细节标签虽然是数字但它在分类任务里不是数值而是“类别编号”。在加载阶段你不需要纠结这个问题但心里要清楚标签和图像是两套数据PyTorch 会把它们按顺序一一对应好。1.2 为什么这个数据集这么“老”还人人都在用MNIST 从诞生到现在已经很多年了放在今天的深度学习领域里它早就不是性能竞赛的主角但几乎所有人入门时都会碰它。原因其实很简单数据量适中下载下来也就十几 MB训练一版模型只要几分钟特别适合验证思路图像内容足够简单不需要复杂的预处理像素干干净净地摆在那里标签质量高几乎没有标注错误省去了初学者清洗数据的痛苦。更重要的是MNIST 的结构非常典型。它有训练集和测试集的划分有图像和标签的对应关系有灰度图像和多分类任务这些元素和真实项目里的数据组织方式完全一致。也就是说你在 MNIST 上学到的“加载数据”“组织 batch”“迭代训练”这套流程将来换到任何数据集上套路都是一样的。所以它不是一个过时的数据而是一个把复杂世界简化到极致的教学标本。2. 加载前 5 分钟环境与依赖说明2.1 版本要求和安装命令加载 MNIST 需要用到三样东西PyTorch 本体、torchvision、matplotlib。PyTorch 不用多说模型跑起来全靠它torchvision 是视觉任务的官方工具库MNIST 数据集的下载和读取逻辑已经封装在里面我们不需要自己写解析函数matplotlib 用来把加载进来的图像画出来验证数据对不对。版本方面Python 3.8 以上都行PyTorch 用 1.13 或者更新的 2.x 版本都可以。我实测下来这些版本在 MNIST 加载这一块 API 几乎没有变化不用太担心兼容性问题。安装命令很简单pip install torch torchvision matplotlib如果你想装 CPU 版本可以去 PyTorch 官网主页根据自己的操作系统复制对应命令。对 MNIST 这种规模的数据集CPU 足够应付前期的加载和可视化工作不必一上来就折腾 GPU 环境。2.2 一个好习惯从第一天就用虚拟环境我在第二天就已经开始体会到“环境隔离”的重要性了。做深度学习一定会装一堆库每个项目依赖的版本还可能互相打架。今天你可能只需要 torch 和 torchvision下周可能又装 transformers、opencv再过一阵子连你自己都说不清哪个项目依赖哪个版本。一旦包冲突排查起来非常头大。解决办法很朴素给每个项目建一个独立的虚拟环境。用 conda 的话就是conda create -n mnist_env python3.9用 venv 的话就是python -m venv mnist_env。MNIST 这个项目环境装好以后我建议把这个习惯固定下来后面换项目另起环境各自干净互不干扰。这个习惯越早养成后期省的时间越多。3. 真正加载 MNIST 的核心代码逐行拆开看3.1 导入模块先认识三个关键工具加载 MNIST 的代码其实很少但每一行都有它的作用。先从导入开始import torch from torch.utils.data import DataLoader from torchvision import datasets, transforms这三个导入各管一摊torch是基础库后面打印张量形状、做类型转换都要用它DataLoader是 PyTorch 里管理数据批量加载的工具后面会把整个数据集封装成可以一批一批取数据的对象datasets和transforms都来自 torchvision前者负责下载和存储 MNIST 原始数据后者负责对图像做预处理操作。3.2 数据预处理 transform为什么一定要做这一步加载代码里最关键的一行是 transform 的定义transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ])Compose的意思是“按顺序执行一系列变换”。它接收一个列表列表里的操作会依次作用在每张图像上。这里的两个操作缺一不可但很多初学者不理解它们到底干了什么。第一个ToTensor()做的事情有两件把 PIL 图像或者 numpy 数组转成 PyTorch 的张量Tensor同时把像素值从 0 到 255 的范围缩放到 0 到 1 之间。为什么因为神经网络对输入数值的尺度非常敏感如果输入是 0 到 255 的大数值梯度计算时很容易产生数值不稳定的问题。这件事一定要明白pytorch 模型默认的输入通道顺序是(C, H, W)即通道数在前、高和宽在后。PIL 打开彩色图是(H, W, C)的顺序中间有个通道顺序的转换细节ToTensor()会一并处理掉。MNIST 是灰度图转出来的张量形状是(1, 28, 28)这里的 1 就是通道数表示只有一个灰度通道。第二个Normalize((0.1307,), (0.3081,))做的是标准化也叫 z-score 归一化。它把每个像素值减去均值 0.1307再除以标准差 0.3081。这两个数字是 MNIST 整个数据集的像素均值和标准差是事先算好的官方参考值。标准化以后数据分布会变成近似均值为 0、方差为 1 的形态。这样做的好处是让模型训练时收敛得更快、更稳定。有同学问ToTensor 已经缩放到 0 到 1 了为什么还要再标准化一次因为 0 到 1 只是改变了数值范围数据分布的形状没变标准化则是把整个分布的“中心”拉到 0 附近这对很多优化算法来说更加友好。3.3 datasets.MNIST初始化数据集对象transform 定义好以后就可以创建数据集对象了train_dataset datasets.MNIST( root./data, trainTrue, transformtransform, downloadTrue ) test_dataset datasets.MNIST( root./data, trainFalse, transformtransform, downloadTrue )这里有四个参数每个背后都有讲究。root是数据集存放的根目录我填的是./data表示在当前工作目录下创建一个 data 文件夹来存放数据你可以改成任何路径但建议用一个统一的数据目录比如/path/to/datasets/mnist这样多个项目可以共用一份下载好的数据。trainTrue表示加载训练集trainFalse表示加载测试集。注意这里返回的是一个 Dataset 对象还不是能直接喂给模型的批次数据。你可以在 Jupyter 里打印一下train_dataset会看到它的长度是 60000这就是训练集样本总数。transformtransform把前面定义好的预处理流程绑定到这个数据集上。每当我们从这个数据集里取出一条数据时它都会自动执行一遍 transform输出的是处理好的张量而不是原始 PIL 图像。downloadTrue的意思是如果指定目录下还没有数据就自动下载如果已经有数据就跳过下载直接加载。注意downloadTrue 并不代表每次运行都会重新下载PyTorch 的机制是检查文件是否存在存在就直接用不存在才去网络下载。这个设计还是挺省心的但有一个坑我后面会在常见问题里专门展开。3.4 DataLoader把数据集包装成“可一批批取数据的管道”数据集对象建好以后还没法直接高效地训练。因为如果每次训练都从硬盘上读一张图CPU 和 GPU 的利用率都会被拖慢。PyTorch 提供 DataLoader 来解决这个问题它可以批量取数据、打乱顺序、甚至用多个子进程并行加载数据train_loader DataLoader( train_dataset, batch_size64, shuffleTrue, num_workers0 ) test_loader DataLoader( test_dataset, batch_size64, shuffleFalse )关键参数我列一张表对照着看会清楚很多参数含义我的建议值为什么这么选batch_size每次取出多少个样本64太小训练慢太大显存吃不消64 是折中选择shuffle每个 epoch 是否打乱数据顺序训练集 True测试集 False打乱能打破样本次序带来的偏差测试时不需要且要保证结果可复现num_workers用几个子进程加载数据Windows 和入门阶段填 00 表示主进程加载稳定不报错等熟悉了再调高提速batch_size 是一个超参数你可以试试 32、128 等不同的值。我第一版跑的时候用的 64训练一轮速度和显存占用都在合理区间。shuffle 的作用不能小看如果不打乱数据顺序模型可能会学到样本排列里的假规律尤其是当数据按类别排序存放时连续取出来的 64 张图可能是同一个数字训练效果会明显变差。num_workers 在 Windows 上如果填大于 0 的整数有时会遇到子进程启动异常的问题所以入门阶段直接设 0 最稳妥。3.5 取一个 batch 看看张量形状验证加载是否成功现在写一个几行的循环来实际验证一下这些对象能不能正常工作train_features, train_labels next(iter(train_loader)) print(fFeature batch shape: {train_features.size()}) print(fLabels batch shape: {train_labels.size()}) print(fBatch labels: {train_labels})运行后应该会看到类似下面的输出Feature batch shape: torch.Size([64, 1, 28, 28]) Labels batch shape: torch.Size([64]) Batch labels: tensor([5, 0, 4, 1, 9, 2, ...])这个输出把前面所有的概念都串联起来了。[64, 1, 28, 28]表示这个批次里有 64 张图每张图有 1 个通道高 28、宽 28。标签则是长度为 64 的一维张量每个元素是 0 到 9 中间的一个整数和图像一一对应。看到这个输出说明加载已经成功了数据已经以张量的形式躺在内存里随时可以送进模型。4. 把加载好的数据“画”出来可视化验证数据没问题4.1 不画图就开跑模型你会错过最关键的一步很多初学者加载完数据以后直接就开始写网络、跑训练中途发现 loss 异常、准确率上不去回头排查才发现连数据都是乱的。我的建议是模型一行代码都别写先把数据可视化出来看一眼。这一步成本极低但能提前杀掉一大批问题比如图像是不是倒的、标签对不对得上、灰度值范围是不是正常。可视化最常用的工具是 matplotlib代码不复杂import matplotlib.pyplot as plt figure, axes plt.subplots(2, 5, figsize(12, 6)) for i, ax in enumerate(axes.flatten()): ax.imshow(train_features[i].squeeze(), cmapgray) ax.set_title(flabel: {train_labels[i].item()}) ax.axis(off) plt.tight_layout() plt.show()这里有个关键点train_features[i]的形状是(1, 28, 28)这是一个带通道维度的三维张量。matplotlib 的imshow不认这种带通道维度的格式所以要先调用.squeeze()把这个长度为 1 的通道维度去掉变成(28, 28)的二维矩阵才能正常绘制灰度图。这个细节几乎每个人都会踩一次因为你不去掉的话要么报错要么显示出来的图颜色是乱的。跑完后你会看到一张 2 行 5 列的图每张子图上面都标着一个标签数字。这时候你应该肉眼检查图像是不是清晰的、标签对不对、有没有奇怪的拉伸或翻转。如果一切正常说明 transform 链路没有任何问题可以放心向后走。4.2 顺带看一眼像素分布加深对 ToTensor 和 Normalize 的理解可视化的另一个用途是观察数据预处理后的像素分布。你可以把某一个 batch 的张量拉平成一维数组然后用直方图看一看数值范围flattened train_features[0].flatten().numpy() plt.hist(flattened, bins50) plt.show()PNG 因为经过了 ToTensor 和 Normalize像素值不再是 0 到 255 的整数而是以 0 为中心、范围大致在 -0.4 到 2.8 之间的浮点数。看到这个分布以后你就能直观理解前面那两步 transform 到底做了什么一个把原始亮度值拉进 0 到 1 的区间一个把分布中心归到 0 附近。这也是为什么后面的模型里输入层不需要再做任何归一化处理因为数据在进入网络之前就已经“标准化”好了。5. 加载环节常见问题与排查把我们踩过的坑一次性告诉你5.1 下载失败、下载到一半中断离线手动放置数据MNIST 数据源在国外服务器上下载中断是入门时最高发的问题之一。最常见的现象是第一次运行datasets.MNIST(..., downloadTrue)时进度条卡住不动或者下载到一半报网络错误还有的会留下一个不完整的文件导致下次运行直接抛RuntimeError。处理办法其实很简单离线手动下载。打开 MNIST 官网的数据说明页面找到train-images-idx3-ubyte.gz、train-labels-idx1-ubyte.gz、t10k-images-idx3-ubyte.gz、t10k-labels-idx1-ubyte.gz这四个压缩包用浏览器下载到本地。然后把它们放到root参数指定的目录下的MNIST/raw文件夹里。比如 root 填的是./data那么文件路径应该是./data/MNIST/raw/train-images-idx3-ubyte.gz ./data/MNIST/raw/train-labels-idx1-ubyte.gz ./data/MNIST/raw/t10k-images-idx3-ubyte.gz ./data/MNIST/raw/t10k-labels-idx1-ubyte.gz放好以后再运行PyTorch 会检测到文件已经存在自动跳过下载。这里要注意目录结构如果直接平铺放在./data下PyTorch 是识别不了的必须放到MNIST/raw这个子目录里连压缩包的名字都不能改。5.2 已经下载过数据但每次运行还是重新下载这个问题多半出在 root 路径不一致上。比如第一次你用的 root 是./data第二次换成了./mnist_dataPyTorch 就会把它当成一个全新的目录重新下载一遍。更隐蔽的情况是脚本和 Jupyter 的工作目录不同导致相对路径指向了不同位置。解决办法有两个。第一把 root 固定写成一个绝对路径比如root/home/your_name/dl_data/mnist避免相对路径在不同运行环境下飘忽不定。第二只要MNIST/raw下四个 .gz 文件完整就算 downloadTrue 也不会真的重新下载所以如果你发现每次都在下载优先检查文件是否真的放在了正确的路径下。5.3 Windows 上 num_workers 报错或者程序卡死没反应在 Windows 上跑 DataLoader如果num_workers设置成大于 0 的数可能遇到BrokenPipeError或者子进程直接卡死。这是因为 Windows 没有 fork 机制多进程数据加载在实现上会和 Linux 有些差异尤其是你把脚本当作模块运行时更容易触发问题。入门阶段我的建议很简单num_workers0一用到底。MNIST 数据规模太小多进程提速带来的收益微乎其微但省心很多。等你把流程跑通再回头研究 num_workers 的进阶用法完全不迟。如果你在 macOS 上还遇到别的启动问题也可以先设成 0 排除变量。5.4 图像显示出来是倒的、翻转的或者标签对不上这一类问题的根源通常是你在 transform 里额外加了不该加的操作。比如你看到别人代码里写了transforms.RandomHorizontalFlip(p0.5)顺手抄过来结果 MNIST 上就乱了。MNIST 是手写数字随机翻转会改变数字语义“6”翻转可能变成“9”“7”翻转可能变成别的形状这在迁移学习数据增强时很常见但 MNIST 这种基础任务完全不需要做这种增强。加载阶段要守住一个原则训练集、测试集用的是同一套 transform增强操作后面再考虑。如果出现了“图对不上标签”的诡异现象先把这个 transform 列表简化到只有 ToTensor 和 Normalize再一个一个加回来排查多半就能定位到问题。5.5 一些容易被忽略的小细节依赖版本和中文路径还有一个我实际遇到的坑项目路径里带中文或者用户名是中文在一些环境配置下会导致文件读取失败。这是老问题了尽量避免在含中文、空格或特殊字符的路径下创建深度学习项目。另外如果你同时装了多个版本的 torch导入时用的不是当前环境里的那个也会出现奇怪的行为用前面说的虚拟环境能一劳永逸地解决这个问题。6. 第二天做完之后我对“加载数据”这件事的一些想法把 MNIST 加载完、可视化完以后我回头想了一个问题为什么这一步明明代码这么短却值得单独花一天来学答案是加载数据不是“把图片放进变量”那么简单它决定了我对整个模型训练流程的基础认知。首先是批次的概念。模型训练时从来不是一张一张地看数据而是一批一批地看。为什么要一批因为小批量梯度下降在计算效率和训练稳定性之间取得了平衡这是深度学习训练的一个核心机制。你今天学会了用 DataLoader 取[64, 1, 28, 28]的张量后面写训练循环的时候自然就知道for images, labels in train_loader里每次拿到的到底是什么了。然后是 transform 的意识。真实项目里的数据几乎不可能开箱即用裁剪、缩放、归一化、转 tensor每一步都有它的位置。MNIST 让你用最简单的数据把这条链路走一遍这个经验是可以直接复用的。最后我想说的是别嫌 MNIST“太简单”“太老”。我见过很多同学一上来就啃高难度的数据集结果光是数据预处理就调了一周最后也没分清是模型问题还是数据问题。用 MNIST 把你对整条流程的“手感”培养起来再去碰复杂任务路反而走得快。这个系列后续的内容会接着写如何构建一个简单的卷积网络把今天加载好的数据真正“喂”进去跑出第一个可观的准确率。到那个时候你再回头看今天这一步就会觉得它踏实得像地基一样了。

相关新闻

用Codex实现前端组件秒级生成:配置、实战与报错排查全解析

用Codex实现前端组件秒级生成:配置、实战与报错排查全解析

1. 从“写组件”到“说组件”:Codex 到底改变了什么做了这么多年前端,我最大的感受就是:我们花了太多时间在“翻译”上。把设计稿翻译成 HTML 结构,把交互意图翻译成状态逻辑,把接口文档翻译成类型定义。这些翻译工作不…

2026/10/14 17:16:40 阅读更多 →
nvidia_gpu_exporter 实战指南:只用 nvidia-smi 就能跨平台导出 GPU 指标的 Prometheus Exporter

nvidia_gpu_exporter 实战指南:只用 nvidia-smi 就能跨平台导出 GPU 指标的 Prometheus Exporter

可观测性指标监控 【免费下载链接】nvidia_gpu_exporter Nvidia GPU exporter for prometheus using nvidia-smi binary OR using NVML 项目地址: https://gitcode.com/gh_mirrors/nv/nvidia_gpu_exporter 点击查看 免费下载 nvidia_gpu_exporter 是一个面向 Prome…

2026/10/14 17:16:40 阅读更多 →
mcp-server-mysql 项目级数据库接入实战:SSH 隧道、.mcp.json 配置与 Claude Code Hooks 完整指南

mcp-server-mysql 项目级数据库接入实战:SSH 隧道、.mcp.json 配置与 Claude Code Hooks 完整指南

MCP 服务数据库客户端AI 应用 【免费下载链接】mcp-server-mysql A Model Context Protocol server that provides read-only access to MySQL databases. This server enables LLMs to inspect database schemas and execute read-only queries. 项目地址: https:/…

2026/10/14 17:16:40 阅读更多 →

最新新闻

数据库与缓存实战指南:从MySQL索引到Redis穿透与雪崩

数据库与缓存实战指南:从MySQL索引到Redis穿透与雪崩

得,直接开始正题。聊到互联网后端,我估计前面两篇已经把HTTP协议、Web框架、接口设计这些基础盘得差不多了,这篇咱们必须得换个频道,聊聊在“学习记录”这个系列里最劝退、也最躲不开的硬骨头——数据库与缓存。你去看各大招聘网站…

2026/10/14 18:00:22 阅读更多 →
aiogram 入门实战:用完全异步的 Python 框架快速构建 Telegram Bot

aiogram 入门实战:用完全异步的 Python 框架快速构建 Telegram Bot

后端即时通讯API设计 【免费下载链接】aiogram aiogram is a modern and fully asynchronous framework for Telegram Bot API written in Python using asyncio 项目地址: https://gitcode.com/gh_mirrors/ai/aiogram 点击查看 免费下载 aiogram 是一个基于 Pytho…

2026/10/14 18:00:22 阅读更多 →
高项论文质量管理写作指南:从过程组到工具用法的落地拆解

高项论文质量管理写作指南:从过程组到工具用法的落地拆解

每年软考成绩出来之后,评论区里最热闹的往往是论文。尤其是“论项目的质量管理”这个题目,经常出现在备选列表里,也年年有大把考生栽在它上面。按理说,质量管理是项目管理者最不陌生的领域:开发要做测试、交付要有验收…

2026/10/14 18:00:22 阅读更多 →
HarmonyOS 6.0+分布式App开发实战:跨端协同与设备重组

HarmonyOS 6.0+分布式App开发实战:跨端协同与设备重组

1. 跨端开发不是在“移植”,是在“重组”做了几年的多端应用,我越来越觉得“跨端”这个词被理解得太浅了。很多人以为跨端就是把手机上的页面缩一缩放到平板上,或者把App打包成能够在不同系统上跑一遍的安装包。但实际上,真正的跨…

2026/10/14 18:00:22 阅读更多 →
IT培训行业技术管理者的职业发展路径解析

IT培训行业技术管理者的职业发展路径解析

1. 项目背景解析这个标题看似夸张,实则反映了一个职场人从基层逆袭到高管的成长故事。作为在黑马程序员广州校区工作多年的老员工,我亲眼见证过不少技术人通过自身努力实现职业跃迁的真实案例。今天我们就来拆解一个技术管理者从校区基层做到集团高管的典…

2026/10/14 18:00:22 阅读更多 →
C#与松下PLC通信:Mewtocol协议串口/以太网例程与避坑指南

C#与松下PLC通信:Mewtocol协议串口/以太网例程与避坑指南

简介:面向工业自动化上位机开发者的C#与松下PLC通信完整示例工程,以手机屏幕异物检测为应用场景,演示通过串口、TCP/IP等方式与PLC交互,完成数据采集与指令下发。资源包共113个文件,以C#源码(.cs)为主,另有…

2026/10/14 17:59:21 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →