mRMR-CNN-GRU-MHA多特征分类预测原理与Matlab实现
先把结论摆出来mRMR-CNN-GRU-MHA这套组合实际跑起来并没有名字看起来那么吓人。拆开其实就是四件事——先用mRMR把冗余、无关的特征筛掉再用CNN抓短程局部特征用GRU建模时序依赖最后用多头注意力机制对关键信息做加权强化。我在项目里用Matlab完整调通过这套流程代码属于一键运行的状态训练结束直接出特征得分图、损失曲线、混淆矩阵和ROC曲线。这篇文章把原理、代码结构、参数选择和调试中踩过的坑全部整理出来打算复现的同学可以直接照着做。1. 为什么是mRMR-CNN-GRU-MHA先搞懂它解决什么问题1.1 多特征分类预测的真实痛点做多特征分类预测最常见的问题不是模型不够深而是特征质量拖后腿。原始特征维度动辄几十上百里面真正和标签相关的可能只有一部分其他要么是无关噪声要么和别的特征高度相关造成大量冗余信息。如果把这些特征一股脑直接丢进CNN或者GRU模型被迫同时学习“有用信号”和“噪声”训练速度变慢还容易过拟合。我遇到过最典型的场景。某项目的采样数据包含振动、温度、电流、压力等几十个特征样本量只有几百条。第一版直接用原始特征训练GRU验证集准确率一直卡在79%左右怎么调学习率都上不去。后来把特征选择加上去再换这个组合结构效果一下子就拉开了。原因很简单模型的计算资源是有限的特征越干净网络就越能把精力放在真正能区分类别的模式上。另一个痛点是时间相关性和空间相关性的混合。很多数据不仅是“每个时间点有多个特征”更关键的是特征之间在时间轴上存在先后依赖。单独用CNN它擅长提取局部特征组合但记不住长距离的状态变化单独用GRU它能做时序建模但对哪个位置、哪个特征更重要没有天然的分辨能力。所以需要把几种不同性质的模型组件像流水线一样串起来。1.2 这个组合里的每个模块到底在干什么整个流程可以理解为一条装配线mRMR先做特征筛选相当于原材料的“质检和去重”CNN负责抓局部特征组合像切菜时把相近的食材搭在一起GRU按时间顺序把状态串起来像炖煮时关注前后变化MHA最后做重点强化相当于出锅前调味突出影响分类的关键信息mRMR的全称是Maximum Relevance and Minimum Redundancy最大相关最小冗余。它同时考虑两个目标每个特征和类别标签的相关性要尽量高已选特征之间的冗余度要尽量低。注意这和普通的PCA完全不同PCA是无监督降维它看不到标签mRMR是有监督筛选每一步都在朝着提升分类能力的方向走。CNN在这里通常使用一维卷积直接在特征维度或者时间步上做滑动窗口。它能把相邻特征的交互信息提取出来比如某两个特征同时增大往往对应某个类别。GRU接在CNN后面把卷积输出当成一个序列去处理学习状态在时间上的变化规律。最后多头注意力机制不再把GRU的各个时间步一视同仁而是让模型自己学会加权把对分类决策贡献最大的时间点和特征维度突出出来。选这个组合而不是单纯堆深度原因是不同模块解决不同层次的问题。只用mRMR加普通分类器丢失了时序模式只用CNN-GRU又会被冗余特征干扰。MHA的加入也不是为了炫技它能在GRU输出之上做一次全局信息整合相当于给分类器提供一个“重点更明确”的特征表示。2. 原理拆解从特征选择到特征加权2.1 mRMR的最大相关最小冗余到底在算什么mRMR的核心指标是互信息。互信息可以理解为“知道一个变量的取值后另一个变量的不确定性减少多少”。它和相关系数不一样相关系数主要衡量线性关系互信息能捕捉非线性相关对于实际工程数据来说更可靠。假设特征集合为F类别变量为y已选特征集合为S。mRMR每一步的筛选逻辑是最大相关候选特征与类别y的互信息I(f_i; y)尽可能大最小冗余候选特征与已选集合S的平均互信息尽可能小实际操作时常用一个综合得分D-R即用候选特征与标签的互信息减去它与已选特征的平均互信息然后选得分最高的特征加入集合。每选一个特征后就更新已选集合再重复计算下一个这就是贪心搜索。mRMR并不保证全局最优但它在工程上的性价比非常高。在Matlab里实现mRMR最麻烦的是互信息估计。连续特征通常要先离散化比如分桶成等距离区间然后统计联合概率分布再按公式计算。我实际写代码时先用discretize函数做分箱再调用histcounts2计算联合频率最后套互信息公式。数据量小的时候这样算很快特征多的时候可以加一个提前筛选先去掉方差过低的特征再进入mRMR循环。2.2 CNN怎么提取局部特征一维卷积和图像卷积是同一个思路只不过维度不同。假设输入是一个特征序列长度等于特征数量卷积核在特征维度上滑动每次覆盖k个连续特征产生一个输出值。多个卷积核就相当于多组不同的特征模板每个模板去找它自己关注的局部模式。我在网络里通常用两层一维卷积。第一层卷积核数量少一点先做粗提特征第二层卷积核数量增加组合成更抽象的模式。卷积核大小一般取3到5太小的感受野容易只看到孤立的特征太大又容易把不相关的特征强行组合到一起。CNN在这里还有一个额外的好处它对输入特征的局部平移有一定容忍度也就是说某个特征模式即使发生小幅偏移卷积输出仍然能捕捉到。这在实际采集数据里很有用因为传感器信号经常存在相位偏差或者时间对齐误差。2.3 GRU怎么处理序列依赖GRU和LSTM一样属于循环神经网络但它结构更精简只有更新门和重置门。更新门控制过去的状态保留多少重置门控制之前的信息要不要被忽略。参数比LSTM少训练更快在数据量不大的时候通常效果也够用。在mRMR-CNN-GRU-MHA结构里GRU的输入不是原始特征而是CNN提取后的特征图。这时每个时间步对应一个卷积输出的位置GRU沿着时间方向逐步读取每个时刻的输出会携带之前时刻的信息。对分类任务来说通常不会直接使用每个时间步的输出而是把最后一步的隐藏状态或者所有时间步的输出做一个聚合再送给后面的注意力机制。我在调试中发现GRU的隐藏层节点数不宜过大。数据量只有几百条时隐藏节点设为32或64就足够了太大反而容易过拟合训练集loss一路下降验证集准确率却纹丝不动。2.4 多头注意力机制怎么突出重点信息多头注意力机制最早用在机器翻译里后来被用到各种序列建模场景。它的思想是让模型从多个角度去计算序列中不同位置之间的关联强度。每个头拥有自己的一组查询、键、值投影矩阵分别计算注意力权重最后把多个头的结果拼在一起再做一次线性变换。在分类预测中MHA不一定要像Transformer那样做完整的编码器堆叠。更常见的做法是把GRU输出序列输入到一个注意力层让模型计算出每个时间步的重要程度然后加权求和成一个固定长度的向量。这样分类器拿到的不再是一个“平铺”的隐藏状态而是一个已经被突出过重点的信息向量。我在Matlab里实现MHA时没有使用现成的高级API而是自定义了一个网络层。前向传播里先把输入拆成多个头每个头做缩放点积注意力再把所有头合并最后通过一个全连接层投影。注意注意力权重要做softmax归一化否则数值会不稳定梯度也容易爆炸。如果你在跑代码时看到输出里出现NaN十有八九是注意力得分没有做缩放或者softmax操作写错了位置。3. Matlab代码结构与一键运行流程3.1 工程文件组成和运行入口整个项目我整理成了几个脚本和函数不搞复杂的包路径方便直接替换数据跑通。核心文件有这些main.m一键运行入口负责读数据、调用特征选择、构建网络、训练、评估、画图mrmrSelect.m实现mRMR特征选择输入特征矩阵和标签输出排序后的特征索引和得分buildMRMRCNNGRUMHA.m构建整个深度学习网络结构trainModel.m封装训练过程返回训练好的网络和训练过程信息evaluateModel.m评估测试集并画出混淆矩阵、ROC曲线你拿到代码后不需要手动逐个运行函数直接运行main.m就行。脚本内部会自动设置随机种子、划分训练验证集、跑特征选择、训练模型最后弹出所有图表。3.2 数据准备和归一化输入数据格式我固定为特征矩阵X每行是一个样本每列是一个特征标签向量y可以是1、2、3这样的类别编号。读取方式用readmatrix或readtable都可以只要能保证X和y的对应关系不错位。归一化这个步骤绝对不能省。CNN和GRU对输入尺度非常敏感有的特征量纲是0到1有的是几百到几千如果不做归一化梯度更新会被大数值特征主导模型很难收敛。我在这里用的是Z-score标准化公式是x_scaled (x - mean(x)) / std(x)在Matlab里可以用zscore函数一把搞定。注意标准化参数要在训练集上计算然后再应用在测试集上不能把测试集也混进去一起算否则会造成数据泄露指标虚高。3.3 mRMR核心函数怎么写的mRMR函数的核心是循环选择特征。我给出简化的核心逻辑function [selectedIdx, scores] mrmrSelect(X, y, k) % X: 样本x特征矩阵 % y: 标签向量 % k: 期望选择的特征数量 nbins 10; dX discretize(X, nbins); % 计算每个特征与标签的互信息 mi_with_label zeros(size(X,2), 1); for f 1:size(X,2) mi_with_label(f) mutualInfo(dX(:,f), y); end selectedIdx []; candidates 1:size(X,2); for step 1:k bestScore -inf; bestFeat 0; for f candidates if ismember(f, selectedIdx) continue; end % 冗余项与已选特征的平均互信息 redundancy 0; if ~isempty(selectedIdx) for s selectedIdx redundancy redundancy mutualInfo(dX(:,f), dX(:,s)); end redundancy redundancy / length(selectedIdx); end score mi_with_label(f) - redundancy; if score bestScore bestScore score; bestFeat f; end end selectedIdx(end1) bestFeat; %#okAGROW scores(step) bestScore; %#okAGROW end end需要注意特征数量很多的时候这个双重循环会有点慢。我实际用的时候会加一个预筛选先把互信息等于0或者方差极低的特征剔除候选集缩小后再跑mRMR速度能快不少。3.4 网络构建和自定义多头注意力层构建网络时我用的Matlab深度学习工具箱用layerGraph把各层连接起来。基础结构大致是layers [ sequenceInputLayer(inputDim) convolution1dLayer(3, 32, Padding, same) reluLayer convolution1dLayer(3, 64, Padding, same) reluLayer gruLayer(64, OutputMode, sequence) myMultiHeadAttentionLayer(64, 4) % 自定义多头注意力层 fullyConnectedLayer(numClasses) softmaxLayer classificationLayer ];这里提醒一下Matlab里convolution1dLayer要求输入具有空间维度和通道维度sequenceInputLayer默认输出是特征维度加时间步通常需要调整数据格式或者做好维度排列。如果直接用sequenceInputLayer卷积层要保证特征维度匹配。多头注意力层我用的是自定义层因为官方没有现成的。核心前向传播可以这样写function Y predict(layer, X) % X shape: featureDim x numTimeSteps numHeads layer.NumHeads; headDim layer.HiddenSize / numHeads; Q X * layer.WQ; K X * layer.WK; V X * layer.WV; % 分割成多头 Q reshape(Q, size(Q,1), numHeads, headDim); K reshape(K, size(K,1), numHeads, headDim); V reshape(V, size(V,1), numHeads, headDim); scores pagemtimes(Q, permute(K, [2 1 3])) / sqrt(headDim); attn softmax(scores, DataFormat, STCU); context pagemtimes(permute(attn, [2 1 3]), V); Y reshape(context, [], layer.HiddenSize) * layer.WO; end这个代码只是展示关键逻辑实际自定义层要写properties、construct、forward等完整结构。第一次写自定义层容易报维度错误建议先在一个固定尺寸的随机输入上单测一遍确认输入输出shape没跑偏再接进主网络。3.5 训练超参数的选择逻辑训练超参数我总结了一个比较稳的起点值在这个基础上再根据数据量微调。超参数推荐值选择理由卷积核数量32到64特征维度不高时64个核足以提取丰富模式卷积核大小3或5太小感受野不足太大容易破坏局部性GRU隐藏节点32到64样本量不大时更高维度容易过拟合注意力头数4到8头数过多会显著增加参数量小数据集反而退化学习率0.001到0.01Adam优化器下这个区间最稳MiniBatchSize16到64根据内存和样本量平衡Dropout0.2到0.5抑制过拟合的关键手段最大轮数50到200配合早停策略避免无效训练我通常选用80%数据训练、10%验证、10%测试训练时打开验证集监控并且设置早停。如果验证准确率连续多轮不再提升就停止训练防止后期过拟合。4. 实验效果与可视化结果解读4.1 特征选择前后的对比“有图有真相”的底气就是从这几张图来的。第一张图是mRMR特征得分条形图横轴是特征编号纵轴是综合得分。得分越高说明该特征对分类越有利同时和已选特征越不重复。我在某个公开数据集上做过对比测试原始特征60维直接用CNN-GRU做分类测试集准确率大概82%左右。用mRMR筛掉一半只保留得分前20的特征再跑同样的网络准确率能提升到88%。这个提升不是网络变强了而是特征里的噪声少了模型更容易找到判别边界。这里有个容易忽略的点mRMR选出的特征数量k不是越大越好。k太小会丢失有用信息k太大冗余又会回流。我一般会在k值上做一个简单搜索从10开始每隔5跑一次观察验证集准确率找到峰值后定下来。4.2 损失曲线和评价指标训练结束后脚本会画出训练损失和验证损失曲线。一个健康的曲线是训练损失持续下降验证损失同步下降并逐渐趋于平缓。如果验证损失先降后升就说明模型开始过拟合需要加大Dropout或者设置更激进的早停。分类评估指标不能只盯着准确率。当类别不平衡时准确率往往具有欺骗性。所以我额外计算了每个类别的精确率、召回率和F1分数。F1分数更适合衡量模型在不平衡数据上的综合表现。precision diag(confMat) ./ sum(confMat, 2); recall diag(confMat) ./ sum(confMat, 1); F1 2 * (precision .* recall) ./ (precision recall eps);宏平均F1是我看模型整体效果的主要指标。如果宏平均F1和准确率差距过大说明某个类别明显被压制需要进一步检查该类的样本量和特征分布。4.3 混淆矩阵和ROC曲线怎么看混淆矩阵是最直观的“有图有真相”。每一行代表真实类别每一列代表预测类别对角线上的数值越大越好。从混淆矩阵里可以准确看出哪两个类别容易被混淆。比如类别2和类别3经常被互相认错我会回去看这批样本的特征得分通常是它们之间的差异特征被mRMR筛掉了导致判别信息不足。ROC曲线用于观察分类器的区分能力AUC越接近1越好。多分类任务里我通常采用一对多方式画每个类别的ROC曲线然后计算宏平均AUC。AUC高但混淆矩阵表现差的情况很少见如果出现基本可以怀疑是测试集划分时没有分层抽样导致某个类别的样本分布不均匀。为了方便对比脚本还会输出一个汇总表格包含每类准确率、宏平均准确率、宏平均F1和AUC。这组数字可以直接写进项目报告比单独贴一张准确率数字更有说服力。5. 踩坑记录与排查手册5.1 维度不匹配是第一个拦路虎第一次跑网络构建时最容易报错的地方就是CNN输出和GRU输入的维度对不上。sequenceInputLayer输出通常是特征维度乘时间步但一维卷积会额外增加通道维度所以送给GRU之前必须搞清楚GRU的inputSize到底应该是多少。我的处理办法是手动构造一个随机输入通过网络里每一层之前都输出size看一眼。这个习惯帮我省了大量排查时间。如果你在运行时报出Expected input to be 2-D这类的提示基本都是维度排列问题需要用permute或dltranspose调整。5.2 训练不收敛的表现和对策如果训练集loss降不下去先别急着改网络结构。我遇到的经验里最常见的原因是数据没有归一化其次是学习率太大导致梯度震荡再其次是标签类别编号从0开始和Matlab默认的classificationLayer期望冲突。我会用一个小样本快速检查随机抽取几十条数据让模型过拟合这一小批如果loss能降到接近0说明网络本身能学问题在训练策略如果连小批都过拟合不了多半是网络定义或者数据格式有bug。训练不收敛时的排查顺序检查归一化降低学习率一个数量级检查标签是否从1开始检查LossType是否正确检查输入数据是否有NaN。5.3 内存和显存问题数据量大的时候GRU和注意力机制都比较吃内存。注意力矩阵的规模是序列长度平方级别如果时间步很长内存会快速膨胀。我测试时如果出现Out of Memory优先把MiniBatchSize降到16甚至8同时减少GRU隐藏节点数。如果仍然不够还可以把数据换成单精度或者减少CNN的卷积核数量。实际项目中60维特征、500条样本、隐藏层64、batch size 32在我的机器上CPU就能跑完所以小数据场景没必要一味堆高参数。5.4 随机种子和结果复现深度学习训练结果有一定的随机性GPU并行也会影响小数运算顺序。为了让实验可以复现我在main.m的开头固定了随机种子并且数据集划分时也指定了随机数种子。这样同一份代码、同样的数据跑两次的结果基本一致。如果你发现跑两次准确率差很多优先检查是不是没有设置rng或者训练过程中使用了数据随机增强。固定随机种子后接下来调参时也能更公平地对比不同设置。5.5 常见问题速查表问题现象可能原因解决方案报错特征维度不匹配CNN输出通道和GRU输入维度不一致用size检查各层输出调整GRUInputSizeLoss为NaN注意力得分未缩放梯度爆炸除以sqrt(d_k)检查softmax训练loss不下降数据未归一化或学习率太大使用zscore降低学习率验证准确率停滞在随机水平标签从0开始类别定义错误确保标签为1到K正整数过拟合严重模型参数量大、数据量小增加Dropout减少GRU节点加早停mRMR选择太慢特征数量多且全量计算互信息先用方差过滤或卡方过滤预筛我自己调试这套代码时最深的体会是这个模型的上限其实不在模型本身而在特征选择的配合度。mRMR选出来的特征集合直接影响CNN能提取到什么模式而MHA又决定了GRU携带的哪些状态信息最终会进入分类器。你如果打算迁移到自己的数据上建议先跑一遍mRMR得分图把里面的特征含义搞清楚再决定保留多少个、多头数取多少。代码我已经整理成一键运行版本替换数据、改一下标签格式就能直接出图剩下的就是在几个关键超参数上做小范围搜索了。

相关新闻

MySQL mysqld --initialize 初始化失败?这份排查指南一次讲透

MySQL mysqld --initialize 初始化失败?这份排查指南一次讲透

MySQL 的初始化命令 mysqld --initialize --console ,大概是所有接触 MySQL 的人和机器绕不开的第一道坎。我见过太多场景:Windows 上敲完命令直接闪退、Linux 上报 Permission denied、明明数据目录是空的却提示非空、日志刷了一大屏结果没有临时密码…

2026/10/16 18:07:48 阅读更多 →
彻底关闭Win11/Win10自带杀毒:UAC、篡改保护与注册表加固实战

彻底关闭Win11/Win10自带杀毒:UAC、篡改保护与注册表加固实战

简介:面向Win11/Win10用户彻底关闭系统自带杀毒软件Windows Defender及后台通知的实用指南,覆盖家庭版、专业版等各版本,特别适合新装机后希望摆脱Defender弹窗干扰、释放系统性能的用户。无论因性能优化还是改用第三方杀毒软件,都…

2026/10/16 18:07:48 阅读更多 →
结构化项目描述助力AI生成高质量技术博客

结构化项目描述助力AI生成高质量技术博客

我注意到你只发送了一段提示语,还没有提供具体的项目信息。为了生成一篇高质量的博文,请按照以下格式补充输入内容:项目标题: [提供一个具体标题,例如"基于自注意力机制的中文语音识别语言模型搭建实践"] 项目正文: [可…

2026/10/16 18:07:48 阅读更多 →

最新新闻

60-【2027毕设】YOLO11羊群计数统计系统 - Python完整源码+PyQt5界面+训练模型+数据集

60-【2027毕设】YOLO11羊群计数统计系统 - Python完整源码+PyQt5界面+训练模型+数据集

📌 项目概览 本项目基于深度学习框架,实现了一套完整的检测识别系统。系统集成了多种主流YOLO算法版本,配合PyQt5构建的可视化交互界面,提供了从数据标注、模型训练到在线推理的全流程解决方案。以下是项目的核心技术栈和资源构成…

2026/10/16 18:39:25 阅读更多 →
解构赋值实战指南:数组、对象、函数参数与常见陷阱

解构赋值实战指南:数组、对象、函数参数与常见陷阱

如果你写过几年代码,应该能明显感觉到 ES5 时代拿变量这件事特别吃力。每次从对象里面取值,都得先确认属性是否存在,再一层层写a.b.c,取到之后还可能面临undefined的尴尬。es6 新标准里给出的“变量结构”(官方叫法就是…

2026/10/16 18:39:25 阅读更多 →
C++ std::map高效指南:插入、透明查找与C++20新特性实践

C++ std::map高效指南:插入、透明查找与C++20新特性实践

做C后台模块这几年,std::map是我用得最多的关联容器,没有之一。需求文档里写着“按key排序”“快速判断某个键是否存在”的,十有八九最终都会变成一行map[key]或find()调用。但map真正用得顺手,需要搞明白的不只是API,…

2026/10/16 18:39:25 阅读更多 →
思科N9K配置必开Feature:interface-vlan与telnet启用指南

思科N9K配置必开Feature:interface-vlan与telnet启用指南

简介:本资源是一份面向网络工程师、数据中心运维人员及思科认证备考者的N9K系列交换机实操配置指南,聚焦云环境与大规模虚拟化场景下的核心命令实践。文档系统梳理了设备命名、关键服务启用(Telnet/OSPF/BGP/VTP等)、VLAN创建与管…

2026/10/16 18:39:25 阅读更多 →
DeepSeek-R1提示词优化指南:从传统模型迁移的避坑与模板实战

DeepSeek-R1提示词优化指南:从传统模型迁移的避坑与模板实战

简介:这份DeepSeek使用攻略专为刚接触DeepSeek-R1推理模型的用户准备,解决“如何提问”“如何上手”等核心困惑,适合想快速掌握新一代AI对话技巧的普通用户与内容创作者。整份资源仅包含1个docx文档,压缩包大小1.15MB,…

2026/10/16 18:38:22 阅读更多 →
SMA射频接口HFSS仿真全流程:从建模到S参数提取与公差分析

SMA射频接口HFSS仿真全流程:从建模到S参数提取与公差分析

简介:这份资源面向射频工程师、微波电路设计者及电磁仿真学习者,提供SMA射频接口的HFSS三维电磁仿真工程文件。SMA作为工作于300kHz至18GHz的标准连接器,其电气性能验证常依赖HFSS建模分析,资源正是围绕这一典型场景展开。压缩包共…

2026/10/16 18:38:22 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* 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 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

2026/10/15 19:41:51 阅读更多 →
影刀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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →