PyTorch CIFAR-10图像识别实战:从环境搭建到95%+准确率调优
简介这份资源面向深度学习入门者与计算机视觉方向的初学者围绕PyTorch框架与CIFAR-10数据集提供一套可直接运行的图像识别实践材料帮助读者理解卷积神经网络从数据加载到模型训练、再到权重复用的完整链路。压缩包共5个文件以2个Python脚本为核心分别负责CIFAR-10图片数据的读取与预处理、CNN网络结构定义及训练流程另含1个已训练好的模型权重文件可直接加载用于预测或微调以及1个说明文档和1个数据集元信息文件整体约7.15MB结构紧凑、便于快速上手。目前已有53人学习。通过动手运行这些代码读者能掌握图像标准化与数据增强、损失函数与优化器选择、模型保存与加载等关键环节并借助现成权重省去从零训练的时间成本适合作为图像识别与机器学习入门练手、课程实验或项目原型的参考起点。1. 拆开这个 PyTorch CIFAR-10 图像识别包它到底能跑出什么结果如果你手头正好有一个基于PyTorch的CIFAR-10图像识别.zip别急着双击解压然后对着目录发呆。CIFAR-10 这个数据集在图像识别圈子里算是「Hello World」级别的存在——10 个类别、60000 张 32×32 彩色图、50000 训练 10000 测试标准得不能再标准。但恰恰因为它太标准网上流传的代码质量参差不齐有的跑出来准确率 60% 就敢说「完成」有的连数据增强都没做就硬训。这个包的核心价值在于它把「PyTorch 环境搭建 → 数据加载与增强 → 模型定义 → 训练循环 → 评估与推理」这条链路完整地串起来了。适合两类人一是刚装完 PyTorch、想找个能跑通的项目练手的新手二是需要快速验证某个 backbone 或训练策略在 CIFAR-10 上表现的老手。我拆过不少类似的包最怕的就是「代码能跑但结果不可复现」——随机种子没固定、归一化参数写错、验证集划分有泄漏这些坑后面会一个个说。2. 环境与数据管线从 conda 到 DataLoader 的完整链路2.1 环境搭建CUDA、cuDNN 与 PyTorch 版本对齐拿到包第一件事不是pip install -r requirements.txt而是先确认你的显卡驱动和 CUDA 版本。PyTorch 官方现在推荐用 conda 装因为 conda 会把 CUDA runtime 和 cuDNN 一起打包省得你手动配环境变量。我一般这么干# 创建独立环境Python 版本别太新3.9~3.11 最稳 conda create -n cifar10 python3.10 -y conda activate cifar10 # 去 PyTorch 官网查对应 CUDA 版本的安装命令这里以 CUDA 11.8 为例 conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia -y # 验证 GPU 是否可用 python -c import torch; print(torch.__version__, torch.cuda.is_available(), torch.cuda.get_device_name(0))逻辑说明pytorch-cuda11.8这个参数是关键它决定了 PyTorch 编译时链接的 CUDA 版本。如果你装完发现torch.cuda.is_available()返回False九成是版本没对齐——要么驱动太老要么 conda 源里没有对应包。参数上python3.10是保守选择3.12 在某些旧版 torchvision 上会有兼容问题。提示如果你用的是 WSL2记得在 Windows 侧装好显卡驱动WSL 里不需要再装驱动直接装 CUDA toolkit 即可。2.2 数据加载CIFAR-10 的下载、归一化与增强策略CIFAR-10 用torchvision.datasets.CIFAR10一行就能下载但归一化参数别乱填。它的 RGB 三通道均值是(0.4914, 0.4822, 0.4465)标准差是(0.2023, 0.1994, 0.2010)——这是官方统计出来的用(0.5, 0.5, 0.5)也能跑但收敛会慢一点。import torch from torchvision import datasets, transforms from torch.utils.data import DataLoader # 训练集增强随机裁剪 随机水平翻转这是 CIFAR-10 的标配 train_transform transforms.Compose([ transforms.RandomCrop(32, padding4), # 先 pad 4 像素再随机裁回 32×32 transforms.RandomHorizontalFlip(p0.5), # 一半概率水平翻转 transforms.ToTensor(), # 转成 [0,1] 的 tensor transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)) ]) # 测试集只做 ToTensor Normalize不做增强 test_transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)) ]) train_set datasets.CIFAR10(root./data, trainTrue, downloadTrue, transformtrain_transform) test_set datasets.CIFAR10(root./data, trainFalse, downloadTrue, transformtest_transform) train_loader DataLoader(train_set, batch_size128, shuffleTrue, num_workers4, pin_memoryTrue) test_loader DataLoader(test_set, batch_size256, shuffleFalse, num_workers4, pin_memoryTrue)逻辑说明RandomCrop(32, padding4)是 CIFAR-10 的经典增强先四周补零再随机裁等价于让物体位置有微小偏移。pin_memoryTrue在 GPU 训练时能加速 CPU 到 GPU 的数据搬运。num_workers设成 4 是折中值设太大在 Windows 上容易出多进程问题设 0 则数据加载会成为瓶颈。参数上batch_size128对 8GB 显存的卡比较友好如果你用 3090/4090 可以拉到 256 甚至 512但学习率要相应调大。shuffleTrue只对训练集开测试集必须关否则评估结果没有意义。2.3 模型选型ResNet-18 还是自己搭 CNN包里的模型定义通常是两种路子一种是手写一个 3 层卷积 全连接的小网络另一种是直接调torchvision.models.resnet18(pretrainedFalse)然后改第一层和最后一层。我建议用 ResNet-18因为它在 CIFAR-10 上不加任何 trick 就能到 93% 以上而手写小网络往往卡在 75% 左右。import torch.nn as nn from torchvision import models def build_resnet18(num_classes10): model models.resnet18(weightsNone) # 不加载 ImageNet 预训练 # CIFAR-10 是 32×32ImageNet 是 224×224第一层卷积要改 model.conv1 nn.Conv2d(3, 64, kernel_size3, stride1, padding1, biasFalse) model.maxpool nn.Identity() # 去掉 maxpool保留更多空间信息 model.fc nn.Linear(512, num_classes) # 改输出维度 return model device torch.device(cuda if torch.cuda.is_available() else cpu) model build_resnet18().to(device)逻辑说明ResNet-18 原版第一层是7×7, stride2加maxpool对 32×32 的图来说下采样太狠改完以后特征图尺寸才够用。weightsNone表示从随机初始化开始训如果你数据量特别小可以考虑加载 ImageNet 预训练权重但 CIFAR-10 有 5 万张训练图从头训完全够。参数上biasFalse是因为后面接了 BatchNorm卷积层的 bias 会被抵消省掉能减少参数量。nn.Identity()是 PyTorch 里常用的「占位不做事」模块比写lambda x: x更规范。3. 训练循环与调参让 loss 真正降下去3.1 损失函数、优化器与学习率调度CIFAR-10 是单标签多分类损失函数用CrossEntropyLoss没悬念。优化器我习惯用 SGD momentum虽然 Adam 收敛快但在 CIFAR-10 上 SGD 最终精度通常更高。学习率调度用 CosineAnnealingLR比 StepLR 更平滑。import torch.optim as optim from torch.optim.lr_scheduler import CosineAnnealingLR criterion nn.CrossEntropyLoss() optimizer optim.SGD(model.parameters(), lr0.1, momentum0.9, weight_decay5e-4) scheduler CosineAnnealingLR(optimizer, T_max200) # 200 个 epoch 内余弦衰减逻辑说明weight_decay5e-4就是 L2 正则化在 PyTorch 里通过优化器的weight_decay参数实现等价于在 loss 里加λ/2 * ||w||²。T_max200要和你的总 epoch 数一致否则学习率衰减节奏会乱。参数上初始lr0.1是 SGD 在 CIFAR-10 上的经验值如果你把 batch_size 翻倍到 256学习率也可以翻到 0.2。momentum0.9几乎是默认值不用改。3.2 训练循环每个 epoch 该做什么训练循环的骨架很固定但细节决定成败。下面是一个带训练 验证的完整循环def train_one_epoch(model, loader, criterion, optimizer, device): model.train() total_loss, correct, total 0.0, 0, 0 for imgs, labels in loader: imgs, labels imgs.to(device), labels.to(device) optimizer.zero_grad() outputs model(imgs) loss criterion(outputs, labels) loss.backward() optimizer.step() total_loss loss.item() * imgs.size(0) correct (outputs.argmax(1) labels).sum().item() total imgs.size(0) return total_loss / total, correct / total def evaluate(model, loader, criterion, device): model.eval() total_loss, correct, total 0.0, 0, 0 with torch.no_grad(): for imgs, labels in loader: imgs, labels imgs.to(device), labels.to(device) outputs model(imgs) loss criterion(outputs, labels) total_loss loss.item() * imgs.size(0) correct (outputs.argmax(1) labels).sum().item() total imgs.size(0) return total_loss / total, correct / total for epoch in range(200): train_loss, train_acc train_one_epoch(model, train_loader, criterion, optimizer, device) val_loss, val_acc evaluate(model, test_loader, criterion, device) scheduler.step() if (epoch 1) % 10 0: print(fEpoch {epoch1:3d} | train loss {train_loss:.4f} facc {train_acc:.4f} | val loss {val_loss:.4f} acc {val_acc:.4f})逻辑说明model.train()和model.eval()必须成对出现前者启用 BatchNorm 的 running stats 更新和 Dropout后者冻结它们。optimizer.zero_grad()放在前向之前或之后都行但一定要在每个 batch 开头清一次否则梯度会累加。参数上loss.item() * imgs.size(0)是为了按样本数加权平均避免最后一个 batch 不满时拉偏均值。torch.no_grad()在验证时关掉梯度计算能省显存也能提速。3.3 学习率与 batch size 的联动关系很多人调参时只改一个不动另一个结果要么 loss 震荡要么收敛慢。经验公式是batch size 翻倍学习率也翻倍。比如bs128, lr0.1对应bs256, lr0.2。但这不是线性的当 batch size 超过 1024 以后学习率再大反而会发散这时候需要 warmup。# 简单的 warmup前 5 个 epoch 线性从 0.01 升到 0.1 def adjust_lr(optimizer, epoch, base_lr0.1, warmup5): if epoch warmup: lr base_lr * (epoch 1) / warmup else: lr base_lr for param_group in optimizer.param_groups: param_group[lr] lr逻辑说明warmup 的作用是让模型在训练初期不要因为随机初始化的大梯度把权重带偏。param_groups是优化器里管理参数组的列表直接改lr键就能生效。4. 避坑与排查那些让准确率卡在 60% 的坑4.1 现象训练 loss 不降准确率在 10% 附近晃原因最常见的是标签和输出维度对不上或者数据归一化把像素值压到了负数区间但模型第一层没适配。另一个可能是学习率太大梯度直接炸了。解决先打印一个 batch 的imgs.min(), imgs.max(), labels[:10]确认数据范围在[-2.5, 2.5]左右、标签是 0~9 的整数。然后把学习率降到 0.01 试跑 2 个 epoch如果 loss 开始降了说明是 lr 问题。4.2 现象训练准确率 99%测试准确率只有 70%原因过拟合。CIFAR-10 虽然简单但如果你把数据增强关了、weight_decay 设成 0、模型又特别大过拟合是必然的。解决把RandomCrop和RandomHorizontalFlip加回来weight_decay调到5e-4或1e-3如果还不行就加 Dropout 或者用更小的模型。我见过有人用 ResNet-50 跑 CIFAR-10训练集 100% 测试集 75%纯属杀鸡用牛刀还过拟合。4.3 现象CUDA out of memory但显存明明够原因PyTorch 的缓存分配器会预留显存有时候前一个进程没退干净或者num_workers太多导致每个 worker 都占一份内存。解决先nvidia-smi看有没有僵尸进程有就kill -9。然后把batch_size减半num_workers降到 2。如果还不行在代码开头加torch.cuda.empty_cache()但这只是缓解根本办法是减小模型或 batch。4.4 现象每次跑出来的结果都不一样没法复现原因随机种子没固定。PyTorch、NumPy、Python 内置 random 三处的种子都要设而且cudnn的 benchmark 模式也会引入随机性。解决import random, numpy as np, torch def set_seed(seed42): random.seed(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) torch.backends.cudnn.deterministic True torch.backends.cudnn.benchmark False set_seed(42)逻辑说明deterministicTrue会让 cuDNN 只用确定性算法benchmarkFalse关掉自动调优。代价是训练速度可能慢 10%~20%但换来的是可复现。4.5 现象验证集准确率比训练集还高原因如果验证集用了shuffleTrue或者做了数据增强评估结果会虚高。另一种可能是 BatchNorm 在eval()模式下用的 running stats 还没更新充分。解决确认test_loader的shuffleFalsetest_transform里没有RandomCrop和RandomHorizontalFlip。如果是训练初期出现这种情况等几个 epoch 让 running stats 稳定就好了。5. 进阶技巧把 CIFAR-10 准确率推到 95% 以上5.1 测试时增强TTA与模型集成单模型 ResNet-18 在 CIFAR-10 上大概能到 94%~95%想再往上走TTA 是最省事的办法。思路很简单对同一张测试图做多次不同变换原始、水平翻转、小幅度平移分别推理后把 softmax 输出平均。def tta_predict(model, imgs, device): model.eval() probs [] with torch.no_grad(): # 原始 probs.append(torch.softmax(model(imgs.to(device)), dim1)) # 水平翻转 probs.append(torch.softmax(model(torch.flip(imgs, dims[3]).to(device)), dim1)) # 上下翻转CIFAR-10 里飞机和船可能受益但汽车会受损慎用 # probs.append(torch.softmax(model(torch.flip(imgs, dims[2]).to(device)), dim1)) return torch.stack(probs).mean(0)逻辑说明torch.flip(imgs, dims[3])是沿宽度方向翻转对应水平镜像。TTA 的收益通常在 0.5%~1.5% 之间取决于数据集和模型。注意不是所有翻转都有用上下翻转对 CIFAR-10 里的汽车、卡车可能反而有害因为车轮位置变了。参数上TTA 的推理时间会成倍增加如果只做水平翻转就是 2 倍加上原始就是 3 倍。线上服务要权衡延迟和精度。5.2 混合精度训练省显存、提速但要注意 loss scalingPyTorch 从 1.6 开始内置了torch.cuda.amp用起来很简单from torch.cuda.amp import autocast, GradScaler scaler GradScaler() for imgs, labels in train_loader: imgs, labels imgs.to(device), labels.to(device) optimizer.zero_grad() with autocast(): outputs model(imgs) loss criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()逻辑说明autocast()会自动把部分算子转成 float16GradScaler负责在反向传播时放大 loss 防止梯度下溢。scaler.update()会根据梯度情况动态调整缩放因子。参数上混合精度在支持 Tensor Core 的卡上如 V100、A100、30/40 系提速明显能到 1.5~2 倍。但在老卡上可能没效果甚至更慢。另外用了 AMP 以后weight_decay的行为可能略有变化建议先跑一个 baseline 再对比。5.3 用 TensorBoard 盯住训练过程别只靠 printTensorBoard 能让你看到 loss 曲线、学习率变化、权重分布。装好tensorboard后from torch.utils.tensorboard import SummaryWriter writer SummaryWriter(runs/cifar10_resnet18) for epoch in range(200): train_loss, train_acc train_one_epoch(...) val_loss, val_acc evaluate(...) writer.add_scalar(Loss/train, train_loss, epoch) writer.add_scalar(Loss/val, val_loss, epoch) writer.add_scalar(Acc/train, train_acc, epoch) writer.add_scalar(Acc/val, val_acc, epoch) writer.add_scalar(LR, scheduler.get_last_lr()[0], epoch) writer.close()逻辑说明SummaryWriter会把数据写到runs/目录然后tensorboard --logdirruns启动服务浏览器打开就能看。scheduler.get_last_lr()返回的是列表取第一个元素就是当前学习率。我自己的习惯是每次开新实验前先固定种子跑一遍 baseline把 TensorBoard 曲线截图存下来后面任何改动都跟这张图对比。如果 val loss 在某个 epoch 突然翘起来八成是学习率太大或者数据增强太猛。从那以后我每次调参都强制走一遍「固定种子 → 跑 baseline → 改一个变量 → 对比曲线」的流程再也没出现过「改了啥也不知道为啥变好」的情况。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

GameBryo 2.5开发实战:环境配置、版本迁移与ABI兼容性指南

GameBryo 2.5开发实战:环境配置、版本迁移与ABI兼容性指南

简介:本资源是GameBryo 2.3引擎官方PDF版帮助手册,专为游戏开发工程师、技术美术及引擎集成人员设计,有效解决该引擎中文资料稀缺、CHM格式不兼容移动设备、文档结构分散等实际痛点。手册覆盖从入门到进阶的全链路开发支持:包含核…

2026/10/11 18:35:56 阅读更多 →
具身智能模型加速实战:从仿真到实机的部署与优化

具身智能模型加速实战:从仿真到实机的部署与优化

简介:本资源面向从事具身智能与边缘智能部署的开发者、算法工程师及高年级学生,聚焦智能体在真实硬件上运行时的模型选型与推理加速问题。内容围绕深度学习、强化学习等典型网络架构,梳理模型剪枝、量化、混合精度训练、分布式训练与模型蒸馏…

2026/10/11 18:35:56 阅读更多 →
PyTorch人脸表情识别实战:从CNN训练到OpenCV实时部署

PyTorch人脸表情识别实战:从CNN训练到OpenCV实时部署

简介:基于 PyTorch 的卷积神经网络人脸面部表情识别项目,面向深度学习和计算机视觉初学者及实战开发者,覆盖人脸检测、表情分类到模型训练评估完整流程。利用 PyTorch 动态图优势,结合数据增强与可视化工具,便于灵活调…

2026/10/11 18:35:56 阅读更多 →

最新新闻

Vibe Coding 的边界:从“70% 问题“到“80% 墙“,AI 编程五大局限性与人机分工深度解析

Vibe Coding 的边界:从“70% 问题“到“80% 墙“,AI 编程五大局限性与人机分工深度解析

文档教程Vibe Coding示例工程 【免费下载链接】vibe-vibe The First Systematic Vibe Coding Open-Source Tutorial | From Zero to Full-Stack, Empowering Everyone to Build Products with AI | Live at: www.vibevibe.cn ;首个系统化 Vibe Coding 开源教程 | 零…

2026/10/12 0:53:26 阅读更多 →
不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V

不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V

不用模拟器也能玩PS5游戏?拆解AnyPS5的"非模拟器魔法":relinker重链接PRX库RDNA到SPIR-V 【免费下载链接】AnyPS5 Tool for automatic PS5 executables porting to Linux and Windows 项目地址: https://gitcode.com/GitHub_Trending/an/Any…

2026/10/12 0:53:26 阅读更多 →
基于A星算法的无人机三维路径规划Matlab实现与优化

基于A星算法的无人机三维路径规划Matlab实现与优化

做无人机的人基本都绕不开路径规划这道坎。“基于A星算法的无人机三维路径规划算法研究(Matlab代码实现)” 这个题目看着规整,但真正落地的时候,坑比想象的多:地图怎么建、邻居节点怎么扩展、启发函数怎么写才能既快又…

2026/10/12 0:51:25 阅读更多 →
VS Code 中直接使用 Codex 教程及连接失败解决方案:TaoToken 统一 Key 接入与排错实录

VS Code 中直接使用 Codex 教程及连接失败解决方案: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/12 0:50:24 阅读更多 →
企业 Agent 提示词注入防御实战:双重护栏与对抗语义检测

企业 Agent 提示词注入防御实战:双重护栏与对抗语义检测

在企业将多智能体(Multi-Agent)系统接入客服咨询、内部知识检索或自动化办公流后,安全攻防的对抗维度发生了一场根本性范式转移:传统的 SQL 注入或跨站脚本攻击(XSS)正在退居二线,而以自然语言为…

2026/10/12 0:47:23 阅读更多 →
Cursor怎么使用:3分钟上手Cursor键盘快捷键速查,用TaoToken统一Key接入GPT4与Claude 3.5辅助编程

Cursor怎么使用:3分钟上手Cursor键盘快捷键速查,用TaoToken统一Key接入GPT4与Claude 3.5辅助编程

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

2026/10/12 0:46:23 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →