PyTorch学习率调整策略全解析:从StepLR到CosineAnnealingLR实战指南
1. 学习率调整的底层逻辑与整体设计思路做深度学习训练的人迟早都会撞上同一个问题模型训练到一半loss 不降了准确率卡在一个尴尬的位置上不去。很多人第一反应是换模型、加数据、调 batch size但折腾一圈之后发现真正卡住训练效果的往往是那个最不起眼的超参数——学习率。学习率决定了每次参数更新的步长。步子太小训练慢得像蜗牛爬loss 曲线几乎是一条平线步子太大loss 直接震荡甚至发散模型根本收敛不了。更关键的是一个固定的学习率几乎不可能从头到尾都好用训练初期需要较大的步长快速下降训练后期则需要较小的步长精细收敛。这就是学习率调整策略存在的意义。PyTorch 在torch.optim.lr_scheduler模块里提供了一整套学习率调整工具从最经典的 StepLR、MultiStepLR到平滑衰减的 ExponentialLR、CosineAnnealingLR再到基于指标动态调整的 ReduceLROnPlateau基本覆盖了主流训练场景的需求。但工具多不代表好用很多人用错了 scheduler 的调用时机或者搞混了 epoch 级和 iteration 级的调整节奏结果训练效果反而更差。这篇文章面向的是已经能跑通基本训练流程、但在学习率调优上还比较模糊的读者。我会从 scheduler 的设计逻辑讲起把每种策略的适用场景、参数含义、调用方式拆开说清楚然后给出可以直接复现的完整代码最后把我自己在实际训练中踩过的坑和排查经验整理出来。读完你应该能做到拿到一个训练任务能判断该用哪种 scheduler参数怎么设代码怎么写出问题怎么查。1.1 为什么固定学习率不够用先把这个核心问题讲透。假设你有一个损失函数曲面训练的过程就是在这个曲面上找最低点。学习率就是你每一步迈多大。训练刚开始的时候参数离最优点很远梯度方向比较明确这时候大步走效率高。如果一开始就用很小的学习率可能几百个 epoch 都走不到有效区域。反过来训练后期参数已经接近最优点了曲面局部比较平坦这时候还迈大步就会在最低点附近来回跳永远落不到那个坑里。我用一个实际场景说明。之前做一个图像分类任务数据集大概五万张图用 ResNet 结构训练。固定学习率设 0.1前 30 个 epoch loss 降得很快从 2.3 降到 0.8但之后就一直卡在 0.75 到 0.85 之间震荡验证集准确率停在 72% 左右上不去。后来换成每 30 个 epoch 把学习率乘以 0.1同样的网络和数据最终验证准确率到了 79%。差别就是这么直接。所以学习率调整不是锦上添花而是训练策略里必须认真对待的一环。它的本质是让优化过程在不同阶段有不同的“步长预算”前期敢走后期敢收。1.2 PyTorch scheduler 的设计哲学PyTorch 把学习率调整抽象成了一个独立的 scheduler 对象和 optimizer 解耦。这个设计有好有坏。好处是灵活。你可以自由组合 optimizer 和 scheduler换策略不用改优化器代码。scheduler 内部维护一个last_epoch计数每次调用step()就更新一次然后根据策略计算新的学习率写回 optimizer 的 param_group。需要注意的是scheduler 并不直接修改 optimizer 的学习率而是通过optimizer.param_groups里的lr字段来间接生效。也就是说如果你手动改过 optimizer 的 lrscheduler 下一次 step 时会覆盖掉你的修改。这一点后面讲坑的时候还会细说。另一个设计点是scheduler 的step()调用频率决定了调整的粒度。有的策略是按 epoch 调有的是按 iteration 调还有的是根据验证指标调。调用频率搞错策略效果会完全走样。2. 主流学习率调整策略逐一拆解PyTorch 提供的 scheduler 大概可以分成几类按固定步长衰减的、按平滑曲线衰减的、按指标动态调整的、以及自定义的。下面逐个说清楚每种的特点和适用场景。2.1 StepLR 与 MultiStepLR最经典的阶梯衰减StepLR 的逻辑最简单每隔固定的 epoch 数学习率乘以一个衰减系数。import torch import torch.optim as optim from torch.optim.lr_scheduler import StepLR optimizer optim.SGD(model.parameters(), lr0.1, momentum0.9) scheduler StepLR(optimizer, step_size30, gamma0.1)这段代码的意思是每训练 30 个 epoch学习率变成原来的 0.1 倍。初始 0.1第 30 个 epoch 后变 0.01第 60 个 epoch 后变 0.001以此类推。step_size和gamma是两个核心参数。step_size设太小学习率掉得太快模型还没学好就没步长可用了设太大衰减效果不明显。gamma一般取 0.1 或 0.5取 0.1 是断崖式下降取 0.5 相对温和。MultiStepLR 是 StepLR 的升级版可以指定在哪些 epoch 衰减而不是等间隔。from torch.optim.lr_scheduler import MultiStepLR scheduler MultiStepLR(optimizer, milestones[30, 60, 90], gamma0.1)milestones列表里的数字就是衰减点。这种策略适合你对训练节奏有明确预期的情况比如你知道模型大概在 30 epoch 左右收敛变慢就在那里降一次。注意milestones必须递增且不能有重复值否则行为未定义。2.2 ExponentialLR 与 CosineAnnealingLR平滑衰减路线阶梯衰减的问题是学习率变化不平滑每次衰减都会给训练带来一个小的“冲击”。如果你的任务对训练稳定性要求高可以考虑平滑衰减策略。ExponentialLR 每个 epoch 都把学习率乘以gammafrom torch.optim.lr_scheduler import ExponentialLR scheduler ExponentialLR(optimizer, gamma0.95)gamma0.95意味着每个 epoch 学习率降 5%100 个 epoch 后大概降到初始值的 0.6%。这种衰减很温和适合训练周期长、不想让学习率掉太快的场景。CosineAnnealingLR 走的是余弦曲线from torch.optim.lr_scheduler import CosineAnnealingLR scheduler CosineAnnealingLR(optimizer, T_max50, eta_min1e-5)T_max是半个余弦周期的长度eta_min是学习率的下限。学习率会从初始值按余弦曲线降到eta_min然后再升回去如果训练超过T_max的话。这种策略在近几年的论文里很常见尤其是配合 warm restarts 使用时效果不错。2.3 ReduceLROnPlateau看指标说话的动态策略前面几种策略都是“按计划”衰减不管模型实际学得怎么样。ReduceLROnPlateau 不一样它盯着一个指标通常是验证集 loss指标不降了就降学习率。from torch.optim.lr_scheduler import ReduceLROnPlateau scheduler ReduceLROnPlateau(optimizer, modemin, factor0.1, patience10, verboseTrue)参数含义modemin指标越小越好loss如果是准确率就设maxfactor0.1指标停滞时学习率乘以 0.1patience10连续 10 个 epoch 指标没改善才触发衰减verboseTrue衰减时打印日志这个策略的好处是自适应不需要你猜衰减点。坏处是它依赖验证指标的质量如果验证集太小或噪声大可能会误判。注意ReduceLROnPlateau 的step()必须传入指标值即scheduler.step(val_loss)不能空调用。2.4 自定义 LambdaLR想怎么调就怎么调如果内置策略都不满足需求可以用 LambdaLR 自定义学习率曲线from torch.optim.lr_scheduler import LambdaLR lambda_fn lambda epoch: 0.5 ** (epoch // 20) scheduler LambdaLR(optimizer, lr_lambdalambda_fn)lr_lambda接收 epoch 数返回一个乘数因子实际学习率 初始学习率 × 因子。上面这个例子等价于每 20 个 epoch 学习率减半。LambdaLR 的灵活性最高但需要你自己设计曲线适合对训练过程有深入理解的情况。3. 实操流程与完整代码实现光看参数说明不够得把 scheduler 放进完整的训练循环里才能看出门道。这一节给出一个可以直接跑的模板然后逐段解释关键点。3.1 标准训练循环中的 scheduler 调用import torch import torch.nn as nn import torch.optim as optim from torch.optim.lr_scheduler import CosineAnnealingLR # 假设 model, train_loader, val_loader 已经定义好 device torch.device(cuda if torch.cuda.is_available() else cpu) model model.to(device) criterion nn.CrossEntropyLoss() optimizer optim.SGD(model.parameters(), lr0.1, momentum0.9, weight_decay5e-4) scheduler CosineAnnealingLR(optimizer, T_max100, eta_min1e-5) num_epochs 100 for epoch in range(num_epochs): # 训练阶段 model.train() train_loss 0.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() train_loss loss.item() # 验证阶段 model.eval() val_loss 0.0 correct 0 total 0 with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) loss criterion(outputs, labels) val_loss loss.item() _, predicted outputs.max(1) total labels.size(0) correct predicted.eq(labels).sum().item() val_loss / len(val_loader) val_acc 100.0 * correct / total # 关键scheduler.step() 的位置 scheduler.step() current_lr optimizer.param_groups[0][lr] print(fEpoch [{epoch1}/{num_epochs}] fTrain Loss: {train_loss/len(train_loader):.4f} fVal Loss: {val_loss:.4f} Val Acc: {val_acc:.2f}% fLR: {current_lr:.6f})这段代码里最关键的一行是scheduler.step()的位置。它放在 epoch 循环的末尾验证阶段之后。对于 CosineAnnealingLR、StepLR 这类按 epoch 调整的策略这个位置是对的。但如果你用的是 ReduceLROnPlateau就得改成scheduler.step(val_loss)而且必须放在验证阶段之后因为你需要 val_loss 这个值。3.2 参数选择的具体计算过程很多人设 scheduler 参数是拍脑袋其实可以算。以 CosineAnnealingLR 为例学习率的变化公式是lr eta_min (base_lr - eta_min) * (1 cos(pi * epoch / T_max)) / 2假设base_lr0.1eta_min1e-5T_max100。在第 50 个 epoch 时lr 1e-5 (0.1 - 1e-5) * (1 cos(pi * 0.5)) / 2 1e-5 0.09999 * (1 0) / 2 1e-5 0.049995 ≈ 0.05也就是说训练到一半时学习率降到初始值的一半左右。到第 100 个 epoch 时cos(pi) -1学习率降到eta_min。这个曲线的好处是前期降得慢、中期降得快、后期又变慢整体比较符合训练的实际需求。对于 StepLRstep_size可以这样估假设你计划训练 100 个 epoch希望学习率衰减 3 次那step_size大概取 30 左右。gamma取 0.1 的话最终学习率是0.1 * 0.1^3 1e-4这个量级对大多数任务来说是合理的收敛步长。3.3 学习率预热Warmup的配合使用有些训练任务在初期需要 warmup就是让学习率从很小的值慢慢升上去避免一开始的大梯度把参数带偏。PyTorch 没有内置 warmup但可以用 LambdaLR 组合实现from torch.optim.lr_scheduler import LambdaLR def warmup_cosine(epoch): warmup_epochs 5 total_epochs 100 if epoch warmup_epochs: return (epoch 1) / warmup_epochs else: progress (epoch - warmup_epochs) / (total_epochs - warmup_epochs) return 0.5 * (1 math.cos(math.pi * progress)) scheduler LambdaLR(optimizer, lr_lambdawarmup_cosine)前 5 个 epoch 学习率从 0 线性升到初始值之后按余弦曲线衰减。这种组合在 Transformer 类模型训练里几乎是标配。4. 常见问题与排查技巧实录scheduler 用起来不难但坑不少。这一节把我遇到过和自己踩过的问题整理出来附上排查思路。4.1 scheduler.step() 调用位置错误这是最常见的问题。症状是学习率变化不符合预期或者训练效果比不用 scheduler 还差。排查方法很简单在每个 epoch 结束后打印optimizer.param_groups[0][lr]看学习率序列对不对。常见错误包括把scheduler.step()放在了 batch 循环里导致每个 iteration 都调整一次学习率掉得飞快把scheduler.step()放在了optimizer.step()之前导致第一次更新用的是错误的学习率用 ReduceLROnPlateau 时忘了传指标值提示PyTorch 1.1 之后scheduler.step()必须在optimizer.step()之后调用。虽然旧版本允许在之前调用但新版本会给出警告。4.2 恢复训练时学习率不对如果你用 checkpoint 保存和恢复训练scheduler 的状态也需要保存# 保存 torch.save({ epoch: epoch, model_state_dict: model.state_dict(), optimizer_state_dict: optimizer.state_dict(), scheduler_state_dict: scheduler.state_dict(), }, checkpoint.pth) # 恢复 checkpoint torch.load(checkpoint.pth) model.load_state_dict(checkpoint[model_state_dict]) optimizer.load_state_dict(checkpoint[optimizer_state_dict]) scheduler.load_state_dict(checkpoint[scheduler_state_dict])只保存 model 和 optimizer 是不够的。scheduler 内部有last_epoch计数不恢复的话它会从 0 重新开始学习率会跳回初始值。4.3 学习率衰减太快导致欠拟合有时候你会发现训练后期 loss 几乎不动了验证准确率也上不去。打印学习率一看已经降到 1e-7 这种量级了。这种情况通常是衰减策略太激进。解决办法增大step_size或T_max增大gamma比如从 0.1 改成 0.5设置eta_min或学习率下限不让它降到太低我一般会在训练脚本里加一个学习率下限检查如果低于 1e-6 就手动停掉或调整策略。4.4 常见问题速查表问题现象可能原因排查方法解决方案学习率不变化scheduler.step() 没调用打印 lr 序列检查调用位置学习率掉太快step 调用频率过高确认在 epoch 级调用移到 epoch 循环末尾恢复训练后 lr 跳变scheduler 状态未保存检查 checkpoint 内容保存/加载 scheduler state_dictReduceLROnPlateau 不触发patience 太大或指标没改善打印指标序列减小 patience 或检查验证集训练后期 loss 不动学习率过低打印当前 lr调整衰减参数或设下限warmup 阶段 loss 爆炸warmup 太短检查 warmup epoch 数增加 warmup 长度4.5 几个实战中总结的小技巧第一训练初期先跑几个 epoch 不调学习率观察 loss 下降情况再决定用哪种 scheduler。不要一上来就套模板。第二如果拿不准参数先用 ReduceLROnPlateau 跑一遍它会自动帮你找到合适的衰减点。然后根据它的衰减时机反推 StepLR 或 CosineAnnealingLR 的参数。第三学习率曲线要配合 batch size 看。batch size 增大时梯度估计更准可以用更大的学习率。有个经验公式是 lr 和 batch size 的平方根成正比但不是绝对的还是要实验验证。第四别忘了在 TensorBoard 或 WandB 里记录学习率曲线。训练出问题时学习率曲线往往能直接告诉你哪里不对。5. 不同任务场景下的策略选择建议说了这么多策略实际用的时候到底怎么选我按任务类型给一些建议。图像分类任务数据量中等几万到几十万张训练周期 50 到 200 epoch。这种场景我一般用 CosineAnnealingLR 配合 5 个 epoch 的 warmupT_max设为总 epoch 数。如果训练不太稳定换成 StepLRstep_size设为总 epoch 数的三分之一gamma0.1。目标检测和分割任务训练周期通常更长loss 波动也更大。这种场景 ReduceLROnPlateau 更合适patience设大一点15 到 20让它有足够的时间观察。factor取 0.1 或 0.5。自然语言处理任务尤其是 Transformer 类模型warmup 几乎是必须的。warmup 长度一般是总步数的 5% 到 10%之后用线性衰减或余弦衰减。LambdaLR 是最灵活的选择。小数据集微调任务训练 epoch 少10 到 30学习率本身就应该设小一点1e-4 到 1e-5。这种场景用简单的 StepLR 就够了甚至可以不调固定学习率也能跑。提示不管用什么策略都建议先跑一个短周期比如 10 个 epoch的试验确认学习率曲线和 loss 曲线都正常再开完整训练。5.1 策略对比与选型参考策略调整粒度适用场景参数敏感度推荐指数StepLRepoch通用训练周期明确中四星MultiStepLRepoch已知衰减点中四星ExponentialLRepoch长周期平滑衰减低三星CosineAnnealingLRepoch中短周期配合 warmup中五星ReduceLROnPlateauepoch不确定衰减点指标驱动高四星LambdaLRepoch自定义曲线warmup高四星这个表是我个人经验的总结不是绝对标准。实际选型还是要结合具体任务和数据特点。5.2 学习率与 batch size 的配合关系最后说一个容易被忽略的点学习率和 batch size 是联动的。batch size 增大每次更新用的样本更多梯度估计的方差更小理论上可以用更大的学习率。有个经验法则是线性缩放batch size 翻倍学习率也翻倍。但这个法则在 batch size 很大时会失效这时候用平方根缩放更稳。实际操作中我一般先固定 batch size根据显存能开多大开多大然后在这个 batch size 下调学习率。调好之后再考虑要不要改 batch size改了就重新调学习率。不要两个一起动否则出了问题很难定位。另外如果你用了梯度累积来模拟大 batch学习率也要相应调整。梯度累积 N 次相当于 batch size 扩大了 N 倍学习率可以适当放大但不用严格按线性缩放因为梯度累积的方差特性和真实大 batch 不完全一样。这些细节看起来琐碎但训练效果往往就藏在这些地方。学习率调整没有万能公式多试、多记录、多对比慢慢就能找到适合自己任务的那套参数。

相关新闻

PyTorch OneCycleLR学习率调度器:原理、参数与实战指南

PyTorch OneCycleLR学习率调度器:原理、参数与实战指南

训练深度学习模型最耗时的不是等loss下降,而是反复试那个学习率到底该设多少。设小了loss半天不动,设大了直接NaN,好不容易跑通一轮,发现衰减时机又不对。后来我开始用torch.optim.lr_scheduler.OneCycleLR,训练曲线一…

2026/10/17 17:32:26 阅读更多 →
华为云Hadoop 3.3.6+OBS实战:OpenJDK 11版本适配与免密配置

华为云Hadoop 3.3.6+OBS实战:OpenJDK 11版本适配与免密配置

简介:本资源是一份完整的华为云大数据实验教学报告,面向高校大数据、云计算相关课程的学习者与实践者,聚焦云上大数据平台的部署、集成与交互式分析能力培养。报告系统覆盖四大核心实验:基于弹性云服务器(ECS&#xff…

2026/10/17 17:32:26 阅读更多 →
红酒评分数据分析全流程:R回归与Python KNN实战解析

红酒评分数据分析全流程:R回归与Python KNN实战解析

简介:一份面向高校数据分析课程的完整大作业报告,以经典红酒品质数据集作为研究对象,系统展示从数据导入、清洗到统计建模与分类的全过程。文档首先介绍红葡萄酒成分与评分的背景,针对十一项物理属性(非挥发性酸度、挥…

2026/10/17 17:32:25 阅读更多 →

最新新闻

YC 总裁亲测:一个人顶 20 人团队的 AI 编程工作流 gstack 完全指南|TaoToken 统一 Key 接入实践

YC 总裁亲测:一个人顶 20 人团队的 AI 编程工作流 gstack 完全指南|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/17 18:32:58 阅读更多 →
写小说卡文怎么办?2026年10款写小说软件真实测评与优缺点对比|TaoToken 统一 Key 接入实测

写小说卡文怎么办?2026年10款写小说软件真实测评与优缺点对比|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/17 18:32:58 阅读更多 →
IO多路复用详解:从select、poll到epoll的高并发基石

IO多路复用详解:从select、poll到epoll的高并发基石

不知道你有没有算过这样一笔账:一台普通的服务器上,Nginx 可以轻松扛住几万个并发连接,而如果用早期的“每连接一个线程”模型,几千个连接就能把 CPU 拖到 100%。差距为什么这么大?关键就在 IO 多路复用模型。这个模型…

2026/10/17 18:32:58 阅读更多 →
36套前端网站源码拆解:从个人主页到电商前台的落地路径

36套前端网站源码拆解:从个人主页到电商前台的落地路径

简介:这份资源面向前端初学者与进阶开发者,提供36个可直接参考的网站源代码实例,帮助理解不同布局与交互效果的实现方式,解决从模仿到独立搭建页面的过渡问题。压缩包为rar格式,共约2000个文件,整体65.63MB…

2026/10/17 18:32:58 阅读更多 →
CC-Switch v3.16.1 免费下载与使用方法:Windows/macOS/Linux 三端配置指南【2026.6.11】

CC-Switch v3.16.1 免费下载与使用方法:Windows/macOS/Linux 三端配置指南【2026.6.11】

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

2026/10/17 18:32:58 阅读更多 →
Pod生命周期管理:Init容器、探针与优雅终止配置实战

Pod生命周期管理:Init容器、探针与优雅终止配置实战

很多人写Pod配置,习惯从网上抄一份YAML就往集群里丢,表面上跑得挺正常,可一遇到发布、故障、流量抖动,问题就全冒出来了。这些年我排查过的线上事故里,至少有一半的根因都能归结到Pod生命周期管理上——要么Init容器卡…

2026/10/17 18:31:58 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →