MATLAB GAN实战:从全灰图到稳定收敛的DCGAN调参指南
简介这份资源是面向深度学习初学者与科研人员的GAN生成对抗网络MATLAB实现代码包旨在帮助读者在无需Python环境的前提下直观理解生成器与判别器相互博弈的训练机制并快速上手生成与训练数据分布相似的新样本。压缩包共14个文件以13个m脚本和1个bmp图像为主整体约65KB脚本涵盖网络搭建、前向与反向传播、损失函数、优化更新及训练主循环等模块bmp则作为真实样本数据参与训练。目前已有6526人学习下载适合数据增强、图像合成等场景的入门实践。代码结构清晰包含生成器与判别器的网络定义、Leaky ReLU与sigmoid等激活函数、交叉熵损失计算以及交替训练流程并配有代码说明文件逐项解释学习率、批次大小、训练轮数等参数配置方式便于读者按需调整网络层数、滤波器大小与步长训练完成后还可保存模型并生成新样本与真实数据对比是理解GAN原理与MATLAB深度学习API的实用参考。1. 从一次“生成器输出全灰图”说起GAN 的 MATLAB 版本到底能跑出什么如果你在 MATLAB 里手写过生成对抗网络大概率经历过这个场景训练了 200 个 epoch生成器输出的还是一张全灰图判别器 loss 稳如泰山看起来一切正常但就是什么都没学到。这不是 MATLAB 的锅而是 GAN 本身对超参数、网络结构、训练节奏极度敏感。标题里说的“GAN生成对抗网络MATLAB版本可直接运行”核心价值就在于把那些容易翻车的细节——学习率配比、判别器更新频率、批归一化的位置、噪声输入的尺度——全部固定下来让你拿到一个能出图的基线再在这个基线上做自己的实验。这篇文章面向两类人一是需要在 MATLAB 环境里快速验证 GAN 想法、不想从零调参的算法工程师二是做课程设计或科研复现、手头只有 MATLAB 授权、不想折腾 Python 环境的学生和研究者。我会用一个生成手写数字的 DCGAN 作为贯穿案例把网络定义、训练循环、损失函数、可视化监控全部拆开讲清楚最后给出一个可以直接复制运行的完整脚本结构。你不需要 GPU 集群一块普通显卡甚至 CPU 都能跑起来看效果只是速度差异。2. MATLAB 里搭一个能收敛的 DCGAN从网络层到损失函数2.1 为什么选 DCGAN 结构而不是原始 GAN原始 GAN 用全连接层就能实现但在图像生成任务上极不稳定生成器很容易退化成只输出少数几种样本。DCGAN 的核心改进是用卷积层替代全连接层并在生成器和判别器中分别使用转置卷积和步长卷积同时引入批归一化和 LeakyReLU。这些设计在 MATLAB 的 Deep Learning Toolbox 里都有现成层不需要自己写 CUDA 核。我一般会按这个比例来配生成器和判别器的容量生成器从 100 维噪声映射到 7×7×256 的特征图再经过两次转置卷积上采样到 28×28判别器则反过来两次步长卷积下采样后接全连接输出标量。这个规模在 MNIST 和类似尺寸的数据集上足够用参数少、训练快适合做基线。2.2 用 dlnetwork 定义生成器和判别器MATLAB 从 R2019b 开始推荐用dlnetwork配合自定义训练循环而不是trainNetwork。原因是 GAN 需要交替更新两个网络trainNetwork的封装程度太高拿不到中间梯度。下面是我常用的生成器定义方式% 生成器输入 1x1x100 的噪声输出 28x28x1 的图像 latentDim 100; genLayers [ featureInputLayer(latentDim, Normalization, none, Name, noise) projectAndReshapeLayer([7 7 256], Name, project) batchNormalizationLayer(Name, bn1) reluLayer(Name, relu1) transposedConv2dLayer(5, 128, Stride, 2, Cropping, 2, ... Name, deconv1) batchNormalizationLayer(Name, bn2) reluLayer(Name, relu2) transposedConv2dLayer(5, 1, Stride, 2, Cropping, 2, ... Name, deconv2) tanhLayer(Name, tanh) ]; genNet dlnetwork(genLayers);projectAndReshapeLayer是 MATLAB 专门为 GAN 提供的层把 1×1×100 的噪声向量通过全连接映射成 7×7×256 的张量省去了手动 reshape 的麻烦。转置卷积层的Cropping参数用来控制输出尺寸这里设成 2 是为了让 7×7 经过 stride2 的转置卷积后得到 14×14再经过一次得到 28×28。如果你把 Cropping 设错输出尺寸会对不上后面判别器接收时直接报维度错误。判别器的定义对称但方向相反% 判别器输入 28x28x1 的图像输出一个标量分数 discLayers [ imageInputLayer([28 28 1], Normalization, none, Name, image) convolution2dLayer(5, 64, Stride, 2, Padding, 2, ... Name, conv1) leakyReluLayer(0.2, Name, lrelu1) convolution2dLayer(5, 128, Stride, 2, Padding, 2, ... Name, conv2) batchNormalizationLayer(Name, bn_d1) leakyReluLayer(0.2, Name, lrelu2) fullyConnectedLayer(1, Name, fc) ]; discNet dlnetwork(discLayers);判别器里没有用 sigmoid因为后面损失函数会用sigmoidCrossEntropy或者直接对 logits 做操作。LeakyReLU 的斜率设 0.2 是 DCGAN 论文里的推荐值实测比 0.1 或 0.3 都稳。批归一化放在卷积之后、激活之前这一点和生成器一致。2.3 损失函数与梯度计算别让判别器“赢太快”GAN 的训练难点在于平衡。如果判别器太强生成器梯度消失如果判别器太弱生成器学不到有意义的梯度。我一般用非饱和损失也就是生成器的目标从“骗过判别器”改成“让判别器输出高分数”这样梯度更稳定。function [lossG, lossD, gradG, gradD] ganLoss(genNet, discNet, realImages, latentDim, batchSize) % 生成噪声 Z randn(1, 1, latentDim, batchSize, single); Z dlarray(Z, SSCB); % 生成器前向 fakeImages forward(genNet, Z); % 判别器对真实和生成图像的输出 realScores forward(discNet, dlarray(realImages, SSCB)); fakeScores forward(discNet, fakeImages); % 判别器损失真实样本分数越高越好生成样本分数越低越好 lossD mean(sigmoidCrossEntropy(realScores, ones(size(realScores), like, realScores))) ... mean(sigmoidCrossEntropy(fakeScores, zeros(size(fakeScores), like, fakeScores))); % 生成器损失让生成样本的分数越高越好 lossG mean(sigmoidCrossEntropy(fakeScores, ones(size(fakeScores), like, fakeScores))); % 计算梯度 gradG dlgradient(lossG, genNet.Learnables); gradD dlgradient(lossD, discNet.Learnables); end这里的关键参数是batchSize我一般设 64 或 128。太小的话梯度噪声大太大的话显存吃紧且更新次数少。sigmoidCrossEntropy内部会对 logits 做 sigmoid 再算交叉熵数值上比先 sigmoid 再算 BCE 更稳定。注意dlarray的维度标记SSCB分别对应空间高、空间宽、通道、批这是 MATLAB 自定义训练循环里的标准格式标错会导致dlgradient报错。2.4 训练循环两个优化器的更新节奏有了损失和梯度训练循环本身不复杂但有几个细节容易翻车。我用两个独立的adamupdate分别更新生成器和判别器学习率都设 0.0002beta1 设 0.5——这是 DCGAN 论文里的经典配置比默认的 0.9 更适合 GAN。numEpochs 50; lr 0.0002; beta1 0.5; avgG []; avgGSq []; avgD []; avgDSq []; for epoch 1:numEpochs while hasdata(mnistTrain) [realImages, ~] next(mnistTrain); realImages single(realImages) / 127.5 - 1; % 归一化到 [-1,1] [lossG, lossD, gradG, gradD] dlfeval(ganLoss, ... genNet, discNet, realImages, latentDim, size(realImages, 4)); [genNet, avgG, avgGSq] adamupdate(genNet, gradG, avgG, avgGSq, ... epoch, lr, beta1); [discNet, avgD, avgDSq] adamupdate(discNet, gradD, avgD, avgDSq, ... epoch, lr, beta1); end endadamupdate的第三个参数是迭代次数这里传 epoch 是为了让偏差校正正常工作。如果你在一个 epoch 内多次调用应该传全局迭代计数而不是 epoch 数。归一化那一步把像素从 [0,255] 映射到 [-1,1]和生成器最后一层的 tanh 输出范围匹配这一步漏掉的话生成器会一直输出灰蒙蒙的图。3. 训练监控与调参怎么判断 GAN 是在学习还是在崩溃3.1 用固定噪声看生成质量的演变GAN 训练不像分类任务那样看准确率就行loss 曲线经常看不出问题。我的习惯是每 5 个 epoch 用同一组固定噪声生成一批图像拼成网格保存下来。这样你能直观看到生成器是从噪声慢慢变成数字轮廓还是突然崩成一片同色。fixedZ dlarray(randn(1, 1, latentDim, 25, single), SSCB); if mod(epoch, 5) 0 generated forward(genNet, fixedZ); generated extractdata(generated); generated (generated 1) / 2; % 反归一化到 [0,1] montage(generated, Size, [5 5]); drawnow; endextractdata把 dlarray 转回普通数组montage是 MATLAB 图像处理工具箱里的函数没有的话可以用imtile替代。固定噪声的好处是排除随机性干扰如果同一组噪声在不同 epoch 生成的图像越来越清晰说明生成器确实在进步。3.2 判别器 loss 趋近于零意味着什么很多人看到判别器 loss 降到 0.01 以下就以为训练得很好实际上这通常意味着判别器太强、生成器梯度消失。健康的训练里判别器 loss 应该在 0.3 到 0.7 之间波动生成器 loss 在 1.0 到 3.0 之间缓慢下降。如果判别器 loss 持续低于 0.1我会做两件事一是降低判别器的学习率比如从 0.0002 降到 0.0001二是给判别器的标签加一点噪声把真实样本的标签从 1.0 改成 0.9这叫标签平滑能防止判别器过度自信。% 标签平滑真实样本用 0.9 而不是 1.0 realLabels 0.9 * ones(size(realScores), like, realScores); lossD mean(sigmoidCrossEntropy(realScores, realLabels)) ... mean(sigmoidCrossEntropy(fakeScores, zeros(size(fakeScores), like, fakeScores)));标签平滑的代价是判别器输出不再那么极端但换来的是更稳定的训练。这个技巧在 WGAN 里被更优雅地解决了但如果你不想改损失函数结构标签平滑是最省事的补救手段。3.3 学习率和批大小的联动关系学习率和批大小不是独立的。批大小翻倍时梯度估计的方差减半理论上学习率可以适当提高。但在 GAN 里我反而会保守一些批大小从 64 提到 128 时学习率保持 0.0002 不变或者只提到 0.0003。因为判别器和生成器的平衡很脆弱学习率太高会让某一方突然占优。另一个容易忽略的参数是beta1。Adam 默认 beta10.9动量很大适合分类任务。但 GAN 的梯度方向变化剧烈动量太大会导致更新方向滞后。DCGAN 论文推荐 0.5我实测下来 0.5 确实比 0.9 稳生成器不容易陷入模式崩溃。4. 避坑与排查MATLAB 跑 GAN 最常见的五个翻车现场4.1 生成器输出全灰或全黑现象训练几十个 epoch 后生成图像仍然是一张均匀的灰色或黑色图没有任何数字轮廓。原因最常见的是归一化范围不匹配。生成器最后一层是 tanh输出范围 [-1,1]但真实图像没有归一化到同一范围判别器很容易区分真假生成器梯度消失。另一个可能是噪声输入的尺度太小randn默认方差为 1如果生成器第一层没有合适的缩放信号会逐层衰减。解决确认真实图像做了single(images)/127.5 - 1的归一化。检查生成器第一层projectAndReshapeLayer的输出是否用了批归一化如果没有加一个batchNormalizationLayer。噪声用randn而不是rand后者范围 [0,1] 太小。4.2 训练中途 loss 突然变成 NaN现象前几个 epoch 正常突然某一批数据后 loss 变成 NaN之后所有输出都是 NaN。原因梯度爆炸。GAN 的梯度有时会非常大尤其是判别器更新次数多于生成器时。MATLAB 的dlgradient不会自动做梯度裁剪。解决在adamupdate之前手动裁剪梯度。可以用dlupdate对每个梯度张量做范数裁剪function grad clipGradient(grad, maxNorm) grad dlupdate((g) g * min(1, maxNorm / (norm(extractdata(g)) 1e-8)), grad); end % 使用gradG clipGradient(gradG, 1.0);maxNorm设 1.0 到 5.0 之间我一般用 1.0。裁剪后再传给adamupdateNaN 基本不会再出现。4.3 生成的数字只有一种或少数几种现象生成器能出清晰的数字但翻来覆去只有 1 和 0其他数字不出现。原因模式崩溃。生成器发现只要骗过判别器就行不需要覆盖所有模式。判别器也没有足够的能力区分“多样性不足”和“真实”。解决一是用 minibatch discrimination但 MATLAB 没有现成的层需要自己写更简单的做法是降低判别器的学习率让生成器有更多机会探索。另外可以增大噪声维度从 100 提到 128 或 256给生成器更多自由度。如果还不行考虑换成 WGAN-GP 损失但那需要改判别器输出和损失函数结构。4.4 GPU 显存不足或训练速度极慢现象batch size 设 64 就报显存错误或者每个 epoch 要跑十几分钟。原因MATLAB 默认把数据放在 CPU 内存每次迭代才传到 GPU。如果数据加载和预处理也在 CPU 上做GPU 利用率很低。解决用gpuArray把数据和网络参数提前放到 GPU。dlnetwork的Learnables可以用dlupdate(gpuArray, net.Learnables)迁移。数据方面用minibatchqueue配合preprocessMiniBatch函数设置OutputEnvironment为gpu。这样数据在后台预取GPU 不会等数据。4.5 换了数据集后完全训不起来现象在 MNIST 上跑得好好的代码换成自己的 64×64 彩色图像后生成器输出全是噪点。原因网络容量和数据集复杂度不匹配。28×28 灰度图的生成器只有两层转置卷积换成 64×64 彩色图后感受野不够生成器表达能力不足。解决增加转置卷积层数把 7×7 的投影改成 4×4 或 8×8中间加一层 16×16 的上采样。通道数也要相应增加从 256 提到 512。判别器同样加深。另外学习率可能要降到 0.0001因为参数多了之后更新幅度需要更保守。5. 从能跑到好用把 MATLAB GAN 嵌进自己的实验流程5.1 用自定义数据存储替换 MNISTMATLAB 自带的 MNIST 数据存储只是为了演示。实际项目里你大概率有自己的图像文件夹。用imageDatastore加transform和combine就能构造训练流imds imageDatastore(your_image_folder, IncludeSubfolders, true, ... LabelSource, foldernames); augImds augmentedImageDatastore([64 64], imds, ColorPreprocessing, gray2rgb); ds transform(augImds, (x) single(x)/127.5 - 1);augmentedImageDatastore会自动做 resize省去手动预处理的代码。如果你的图像不是正方形resize 会变形这时候需要在transform里自己做 padding 或裁剪。5.2 保存和加载训练好的生成器训练完不保存等于白跑。dlnetwork可以直接savesave(gan_generator.mat, genNet); % 加载 loaded load(gan_generator.mat); genNet loaded.genNet;注意保存的是dlnetwork对象不是SeriesNetwork或DAGNetwork加载后可以直接forward。如果你要把生成器导出成 ONNX 给其他框架用MATLAB 也支持exportONNXNetwork但自定义层可能不被支持需要先替换成标准层。5.3 用验证指标判断什么时候该停GAN 没有天然的验证集准确率我一般用两个指标一是固定噪声生成图像的方差方差太低说明模式崩溃二是判别器对真实和生成样本的平均输出差差值太小说明判别器已经分不清真假再训练下去生成器也不会进步。realScoreMean mean(extractdata(forward(discNet, dlarray(realBatch, SSCB)))); fakeScoreMean mean(extractdata(forward(discNet, fakeBatch))); scoreGap realScoreMean - fakeScoreMean; % scoreGap 低于 0.1 时可以考虑停止这个判断不是绝对的但比盯着 loss 曲线靠谱。我自己的习惯是每 10 个 epoch 算一次 scoreGap如果连续三次都低于 0.1就手动停掉把当前生成器保存下来。5.4 一个我踩过的坑别在训练中途改网络结构有一次我觉得生成器输出不够清晰训练到一半给生成器加了一层转置卷积。结果dlnetwork的Learnables数量变了之前累积的avgG和avgGSq维度对不上adamupdate直接报错。更麻烦的是即使我重新初始化优化器状态生成器已经学到的特征也被打乱了相当于从头开始。血泪经验网络结构在训练前定好中途要改就重新开一个训练脚本把之前训练好的权重用initialize迁移过去但优化器状态必须重置。MATLAB 没有 PyTorch 那种load_state_dict的灵活机制dlnetwork的层名和参数形状必须完全匹配才能加载。5.5 把训练循环封装成函数的好处最后分享一个习惯把整个训练循环写成一个函数输入是数据存储、网络结构参数、超参数输出是训练好的生成器和判别器。这样你可以用不同的超参数组合批量跑实验不用每次改脚本。function [genNet, discNet, history] trainGAN(ds, latentDim, numEpochs, lr, beta1) % 初始化网络 genNet buildGenerator(latentDim); discNet buildDiscriminator(); % 训练循环 history struct(lossG, [], lossD, []); for epoch 1:numEpochs % ... 训练代码 ... history.lossG(end1) lossG; history.lossD(end1) lossD; end endhistory结构体记录 loss 曲线方便后面画图对比不同超参数的效果。这个封装方式让我在一个下午跑了 12 组不同学习率和批大小的组合最后找到一组在 64×64 彩色数据集上稳定收敛的配置。MATLAB 的 GAN 训练确实比 PyTorch 啰嗦一些但把模板搭好之后调参效率并不低。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

基于约束差分进化算法的多微电网拓扑设计:大规模矩阵优化实战解析

基于约束差分进化算法的多微电网拓扑设计:大规模矩阵优化实战解析

1. 多微电网拓扑设计:为什么我们最终选了约束差分进化算法 这几年多微电网系统从实验室走向实际工程的速度远超预期,但拓扑设计这个环节一直是让人头疼的硬骨头。我在实际项目中接过不少类似任务,尤其是那种动辄几十个微电网节点互联、目标函…

2026/10/13 9:01:17 阅读更多 →
AnyPS5项目实战:PS5串流扩展与跨平台适配技术解析

AnyPS5项目实战:PS5串流扩展与跨平台适配技术解析

1. 项目缘起与核心定位 第一次看到"AnyPS5"这个命名,我的直觉是这是一个围绕PS5主机生态做扩展的项目。PS5本身是一台封闭性很强的游戏主机,官方系统能做的事情非常有限,但玩家群体的需求从来不止于"打游戏"——串流、远…

2026/10/13 9:00:35 阅读更多 →
RK3588+Jetson异构边缘AI盒子:从硬件选型到软件联调实战

RK3588+Jetson异构边缘AI盒子:从硬件选型到软件联调实战

1. 从一块开发板到一台“AI智能盒子”的完整构想1.1 为什么我会盯上RK3588加Jetson这个组合最早接触RK3588是在一个边缘计算的小项目里,当时的需求很简单:把一路1080P视频做实时人形检测,再把结果推到本地屏幕上。试过纯CPU方案,帧…

2026/10/13 11:21:42 阅读更多 →

最新新闻

AI-Gomoku实战:Minimax+Alpha-Beta打造可部署五子棋AI

AI-Gomoku实战:Minimax+Alpha-Beta打造可部署五子棋AI

简介:AI-Gomoku是一款面向Python初学者与AI算法爱好者的五子棋智能对弈程序,聚焦博弈搜索与轻量级AI实现,适用于算法实践、课程设计及人机对战场景。资源包共11个文件,含4个核心Python源码(如eval.py、referee.py、alg…

2026/10/13 15:57:03 阅读更多 →
多智能体+行业工作台:AI团队协作与业务流程落地的工程实践

多智能体+行业工作台:AI团队协作与业务流程落地的工程实践

最近开源社区里多智能体的项目冒出来一大批,但绝大多数看一眼就能猜到大结局:Demo 跑得飞起,一碰真实业务就散架。要么 Agent 各说各话没人收口,要么任务拆下去结果完全不可控,更别提什么权限隔离、工具管控、知识库绑…

2026/10/13 15:57:03 阅读更多 →
PERT图核心逻辑与PERT Chart EXPERT实战:三点估算、关键路径与避坑指南

PERT图核心逻辑与PERT Chart EXPERT实战:三点估算、关键路径与避坑指南

简介:PERT Chart EXPERT 是一款面向项目经理、计划专员及项目团队的 PERT 图专业绘制软件,基于计划评审技术帮助用户直观梳理任务节点、依赖关系与预期工期,解决项目排期与进度监控难题。压缩包体积约 2.43MB,为 rar 格式&#xf…

2026/10/13 15:57:02 阅读更多 →
C# XML操作全解析:从DOM到LINQ、序列化与流式避坑指南

C# XML操作全解析:从DOM到LINQ、序列化与流式避坑指南

深夜还在跟 XML 较劲的兄弟,我懂你。这种事我干过太多次了,明明就是几个节点的读写,一碰上编码、命名空间、特殊字符,瞬间能把人逼疯。C# 操作 XML 的方式其实有好几条路,DOM、LINQ to XML、序列化、流式读写&#xff…

2026/10/13 15:57:02 阅读更多 →
可再生能源与电动汽车协同调度:Matlab+Python复现全流程

可再生能源与电动汽车协同调度:Matlab+Python复现全流程

我们先把话说清楚:这套课题我在工位上完整复现过一遍,从论文公式到Matlab脚本再到Python绘图,所有流程都走通了。课题全名叫"可再生能源发电与电动汽车的协同调度策略研究",技术栈是Matlab和Python,应用场景…

2026/10/13 15:57:02 阅读更多 →
选择排序与插入排序:手写背后的底层直觉与工程权衡

选择排序与插入排序:手写背后的底层直觉与工程权衡

1. 为什么今天还要手写选择排序和插入排序?——从“能跑通”到“真理解”的分水岭很多人看到“算法-6-选择排序插入排序”这个标题,第一反应是:这都2024年了,Python里一个sorted()、JavaScript里一个.sort()就搞定的事&#xff0c…

2026/10/13 15:56:01 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 18:11:17 阅读更多 →