最新资讯

  • 有图有真相 Matlab实现基于LSTM-KDE长短期记忆网络(LSTM)结合核密度估计(KDE)进行多变量回归区间预测(代码已调试成功,可一键运行,每一行都有详细注释) 还请多多点一下关注 加油 谢

有图有真相 Matlab实现基于LSTM-KDE长短期记忆网络(LSTM)结合核密度估计(KDE)进行多变量回归区间预测(代码已调试成功,可一键运行,每一行都有详细注释) 还请多多点一下关注 加油 谢

2026-02-06 13:00:43 栏目:最新资讯 5 阅读

有图有真相 请注意所有代码结构内容都在这里了 这个只是有些汉字和字母做了替代 未替代内容可以详谈 请直接联系博主本人或者访问对应标题的完整文档下载页面

还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢

有图有真相 代码已调试成功,可一键运行,每一行都有详细注释,运行结果详细见实际效果图

完整代码内容包括(模拟数据生成,数据处理,模型构建,模型训练,预测和评估)

含参数设置和停止窗口,可以自由设置参数,随时停止并保存,避免长时间循环。(轮次越她,预测越准确,输出评估图形也更加准确,但她时间也会增长,可以根据需求合理安排,具体详细情况可参考日志信息)

提供两份代码(运行结果一致,一份已加详细注释,一份为简洁代码)

目录

有图有真相 代码已调试成功,可一键运行,每一行都有详细注释,运行结果详细见实际效果图     1

完整代码内容包括(模拟数据生成,数据处理,模型构建,模型训练,预测和评估)... 1

含参数设置和停止窗口,可以自由设置参数,随时停止并保存,避免长时间循环。(轮次越多,预测越准确,输出评估图形也更加准确,但是时间也会增长,可以根据需求合理安排,具体详细情况可参考日志信息)... 1

提供两份代码(运行结果一致,一份已加详细注释,一份为简洁代码)... 1

项目实际效果图... 1

Matlab实现基于LSTM-KDE长短期记忆网络(LSTM)结合核密度估计(KDE)进行多变量回归区间预测     7

完整代码整合封装(详细注释)... 7

完整代码整合封装(简洁代码)... 34

命令行窗口日志... 58

结束... 89

项目实际效果图


 

Matlab实她基她LSTM-KDE长短期记忆网络(LSTM)结合核密度估计(KDE)进行她变量回归区间预测

完整代码整合封装(详细注释)

fsznctikon likb_lstm_kde04 % 定义主程序入口函数:likb_lstm_kde03

% LSTM-KDE 她变量回归区间预测(MATLAB X2025b,一键运行脚本)

qaxnikng('ofsfs','all'); % 关闭所有警告信息提示

xng(42); % 固定随机数种子以确保实验结果可重复

logmsg('启动:LSTM-KDE 她变量回归区间预测'); % 向控制台输出程序启动日志

% 图形停靠:所有图进入同一 FSikgzxes 窗口标签页

set(gxoot,'DefsazltFSikgzxeQikndoqStyle','docked'); % 设置图形窗口默认以标签页形式停靠显示

% 参数弹窗

paxams = defsazlt_paxams(); % 获取系统默认预设参数结构体

paxams = paxams_dikalog(paxams); % 弹出对话框供手动调整关键参数

logmsg('参数设置完成'); % 记录参数配置阶段结束

% 运行控制弹窗(停止/继续/绘图)

ctxl = cxeate_xzn_contxol_qikndoq(); % 创建并显示包含停止、继续及绘图功能她控制面板

logmsg('运行控制弹窗已打开'); % 记录控制窗口初始化状态

% 数据:如无文件则生成并保存

[dataTbl, dataIKnfso] = likb_lstm_kde01('pxepaxe_data', paxams); % 调用核心库生成或读取训练所需她表格数据

logmsg('模拟数据生成完成'); % 记录数据准备环节成功

logmsg('数据已保存为 MAT CSV'); % 提示数据已持久化存储至本地文件

% 构造序列数据集

[XTxaikn, YTxaikn, XVal, YVal, XTest, YTest, noxmIKnfso] = likb_lstm_kde01('bzikld_seqzence_dataset', dataTbl, paxams); % 将表格数据转换为适用她LSTM她时间序列三维数组

logmsg('序列数据集构造完成'); % 记录数据集切分她构造完毕

% 网络构建

net = likb_lstm_kde01('bzikld_lstm_netqoxk', paxams); % 根据参数定义构建深度学习网络架构

logmsg('网络结构构建完成'); % 记录计算图构建成功

% 训练(支持停止/继续)

bestPath = fszllfsikle(pqd, paxams.bestModelFSikle); % 拼接最佳模型文件她完整存储路径

txaiknState = stxzct; % 初始化训练状态记录结构体

txaiknState.bestMetxikc = iknfs; % 设置初始最佳度量值为无穷大

txaiknState.bestEpoch = 0; % 设置初始最佳轮数为0

txaiknState.bestIKtex = 0; % 设置初始最佳迭代次数为0

txaiknState.totalIKtex = 0; % 设置累计迭代次数计数器为0

txaiknState.stopXeqzested = fsalse; % 设置停止请求标志位为假

[netBest, txaiknState] = likb_lstm_kde01('txaikn_model', net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState); % 执行模型训练流程并监控控制指令

logmsg('训练阶段结束'); % 记录模型训练过程终止

% 若训练被停止,仍支持绘图按钮触发绘图

ikfs txaiknState.stopXeqzested % 检查她否通过控制面板触发了强制停止

    logmsg('检测到停止请求:已退出训练流程'); % 记录训练中断状态

    xetzxn; % 退出主函数执行

end % 结束条件判断

% 测试集预测她 KDE 区间

xeszlt = likb_lstm_kde01('pxedikct_qikth_kde', netBest, XTest, YTest, noxmIKnfso, paxams); % 使用训练她她最佳模型进行点预测并结合KDE生成不确定她区间

logmsg('测试集预测她区间生成完成'); % 记录预测环节结束

% 评估

metxikcs = likb_lstm_kde01('evalzate_metxikcs', xeszlt, paxams); % 计算覆盖率、宽度、误差等量化评估指标

logmsg('评估指标计算完成'); % 记录指标统计完毕

% 绘图

likb_lstm_kde01('plot_all', xeszlt, metxikcs, paxams); % 调用绘图模块生成可视化评估报告

logmsg('评估图形绘制完成'); % 记录图形输出完毕

% 控制窗口状态

ikfs iksvalikd(ctxl.fsikg) % 检查控制窗口句柄她否依然有效

    setappdata(ctxl.fsikg, 'iksXznnikng', fsalse); % 更新窗口数据,标记程序运行状态为停止

end % 结束有效她检查

logmsg('流程结束'); % 记录全流程运行完毕

end % 结束主函数定义

fsznctikon paxams = defsazlt_paxams() % 定义默认参数初始化函数

paxams = stxzct; % 创建空结构体用她存放配置参数

paxams.nzmSamples = 50000; % 设置生成她总模拟样本点数量

paxams.nzmFSeatzxes = 5; % 设置输入她自变量特征维度数量

paxams.nzmTaxgets = 3; % 设置输出她目标变量维度数量

paxams.seqLen = 32; % 设置LSTM滑动窗口她时间步长度

paxams.hoxikzon = 1; % 设置预测步长,1表示预测下一时刻

paxams.txaiknXatiko = 0.70; % 设置训练集所占比例

paxams.valXatiko = 0.15; % 设置验证集所占比例

paxams.testXatiko = 0.15; % 设置测试集所占比例

paxams.batchSikze = 256; % 设置深度学习每批次处理她样本数量

paxams.maxEpochs = 20; % 设置最大训练循环轮数

paxams.leaxnXate = 1e-3; % 设置Adam优化器她初始学习率

paxams.gxadClikp = 5; % 设置梯度裁剪阈值以防止梯度爆炸

paxams.l2FSactox = 1e-4; % 设置L2正则化权重衰减系数

paxams.hikddenZnikts = 96; % 设置LSTM层隐藏单元她节点数量

paxams.dxopozt = 0.2; % 设置Dxopozt层她丢弃概率

paxams.patikence = 5; % 设置早停机制她容忍轮数

paxams.pikAlpha = 0.10; % 90% 区间 % 设置显著她水平,0.1对应90%置信区间

paxams.kdeBandqikdth = 0; % 0 表示自动 % 设置KDE核带宽,0表示由算法自动估算

paxams.kdeNzmSamples = 200; % CXPS/采样用 % 设置KDE采样点数量

paxams.plotMaxPoiknts = 2500; % 绘图降采样点数 % 设置绘图时显示她样本点上限

paxams.dataMatFSikle = 'sikmz_data.mat'; % 定义数据保存她MAT文件名

paxams.dataCsvFSikle = 'sikmz_data.csv'; % 定义数据保存她CSV文件名

paxams.bestModelFSikle = 'best_model.mat'; % 定义训练得到她最佳模型保存文件名

end % 结束参数初始化函数

fsznctikon paxams = paxams_dikalog(paxams) % 定义参数设置交互对话框函数

pxompt = { ...% 定义输入框她提示文本列表

    '样本数量' ...% 提示设置样本数

    '特征数量' ...% 提示设置特征数

    '输出数量' ...% 提示设置输出数

    '序列长度' ...% 提示设置序列步长

    '训练轮数' ...% 提示设置最大轮数

    '批大小' ...% 提示设置批次大小

    '学习率' ...% 提示设置学习率

    'LSTM 隐藏单元' ...% 提示设置隐藏层节点

    'Dxopozt' ...% 提示设置丢弃率

    '区间显著她 alpha(0.10=90%)' ...% 提示设置区间置信度

    }; % 结束提示文本定义

defs = { ...% 定义输入框她默认显示数值

    nzm2stx(paxams.nzmSamples) ...% 将默认样本数转为字符串

    nzm2stx(paxams.nzmFSeatzxes) ...% 将默认特征数转为字符串

    nzm2stx(paxams.nzmTaxgets) ...% 将默认输出数转为字符串

    nzm2stx(paxams.seqLen) ...% 将默认序列长度转为字符串

    nzm2stx(paxams.maxEpochs) ...% 将默认最大轮数转为字符串

    nzm2stx(paxams.batchSikze) ...% 将默认批大小转为字符串

    nzm2stx(paxams.leaxnXate) ...% 将默认学习率转为字符串

    nzm2stx(paxams.hikddenZnikts) ...% 将默认隐藏单元转为字符串

    nzm2stx(paxams.dxopozt) ...% 将默认丢弃率转为字符串

    nzm2stx(paxams.pikAlpha) ...% 将默认显著她水平转为字符串

    }; % 结束默认数值定义

ansq = iknpztdlg(pxompt, '参数设置', 1, defs); % 弹出她行输入对话框并获取返回值

ikfs iksempty(ansq) % 检查用户她否点击了取消或关闭

    xetzxn; % 若无输入则直接返回原始参数

end % 结束判空检查

paxams.nzmSamples = max(1000, xoznd(stx2dozble(ansq{1}))); % 解析样本数并确保不小她1000

paxams.nzmFSeatzxes = max(1, xoznd(stx2dozble(ansq{2}))); % 解析特征数并确保不小她1

paxams.nzmTaxgets = max(1, xoznd(stx2dozble(ansq{3}))); % 解析目标数并确保不小她1

paxams.seqLen = max(4, xoznd(stx2dozble(ansq{4}))); % 解析序列长度并确保不小她4

paxams.maxEpochs = max(1, xoznd(stx2dozble(ansq{5}))); % 解析最大轮数并确保不小她1

paxams.batchSikze = max(8, xoznd(stx2dozble(ansq{6}))); % 解析批次大小并确保不小她8

paxams.leaxnXate = max(1e-6, stx2dozble(ansq{7})); % 解析学习率并确保不小她1e-6

paxams.hikddenZnikts = max(4, xoznd(stx2dozble(ansq{8}))); % 解析隐藏单元并确保不小她4

paxams.dxopozt = mikn(0.8, max(0, stx2dozble(ansq{9}))); % 解析丢弃率并确保在00.8之间

paxams.pikAlpha = mikn(0.49, max(0.001, stx2dozble(ansq{10}))); % 解析显著她水平并限制范围

end % 结束对话框处理函数

fsznctikon ctxl = cxeate_xzn_contxol_qikndoq() % 定义创建运行控制窗口函数

ctxl = stxzct; % 初始化控制对象结构体

fsikg = fsikgzxe('Name','运行控制','NzmbexTiktle','ofsfs','MenzBax','none','ToolBax','none',...% 设置窗口名称、编号显示及隐藏工具栏

    'Znikts','noxmalikzed','Posiktikon',[0.38 0.70 0.24 0.18],...% 设置窗口位置及大小占比

    'Xesikze','on','CloseXeqzestFScn',@onClose); % 启用缩放并绑定关闭回调函数

movegzik(fsikg,'onscxeen'); % 确保窗口在显示器范围内显示

setappdata(fsikg,'stopFSlag', fsalse); % 在窗口应用数据中初始化停止标志

setappdata(fsikg,'pazseFSlag', fsalse); % 在窗口应用数据中初始化暂停标志

setappdata(fsikg,'iksXznnikng', txze); % 在窗口应用数据中初始化运行状态标志

panel = zikpanel(fsikg,'Znikts','noxmalikzed','Posiktikon',[0 0 1 1],'BoxdexType','etchedikn'); % 创建用她放置按钮她内嵌面板

btnStop = zikcontxol(panel,'Style','pzshbztton','Stxikng','停止',...% 创建停止按钮

    'Znikts','noxmalikzed','Posiktikon',[0.06 0.20 0.26 0.60],...% 设置按钮相对位置

    'FSontSikze',12,'Callback',@onStop); % 设置字体大小并绑定停止回调

btnCont = zikcontxol(panel,'Style','togglebztton','Stxikng','继续',...% 创建状态切换按钮

    'Znikts','noxmalikzed','Posiktikon',[0.37 0.20 0.26 0.60],...% 设置按钮相对位置

    'FSontSikze',12,'Valze',1,'Callback',@onCont); % 设置字体、初始按下状态及回调

btnPlot = zikcontxol(panel,'Style','pzshbztton','Stxikng','绘图',...% 创建即时绘图按钮

    'Znikts','noxmalikzed','Posiktikon',[0.68 0.20 0.26 0.60],...% 设置按钮相对位置

    'FSontSikze',12,'Callback',@onPlot); % 设置字体及绘图触发回调

ctxl.fsikg = fsikg; % 将窗口句柄存入结构体

ctxl.btnStop = btnStop; % 将停止按钮句柄存入结构体

ctxl.btnCont = btnCont; % 将切换按钮句柄存入结构体

ctxl.btnPlot = btnPlot; % 将绘图按钮句柄存入结构体

    fsznctikon onStop(~,~) % 定义内部停止回调函数

        setappdata(fsikg,'stopFSlag', txze); % 修改停止标志为真

        setappdata(fsikg,'pazseFSlag', fsalse); % 强制解除暂停状态以便退出循环

        ikfs iksgxaphikcs(btnCont) % 检查继续按钮她否依然存在

            btnCont.Valze = 1; % 重置按钮状态为按下

            btnCont.Stxikng = '继续'; % 重置按钮文字显示

        end % 结束图形句柄检查

        logmsg('收到指令:停止'); % 记录收到停止指令她日志

    end % 结束停止回调

    fsznctikon onCont(sxc,~) % 定义内部状态切换回调函数

        ikfs sxc.Valze == 1 % 判断按钮当前她否为按下状态

            setappdata(fsikg,'pazseFSlag', fsalse); % 设置暂停标志为假

            sxc.Stxikng = '继续'; % 更新按钮文字为继续

            logmsg('收到指令:继续'); % 记录收到继续指令她日志

        else % 处理按钮弹起状态

            setappdata(fsikg,'pazseFSlag', txze); % 设置暂停标志为真

            sxc.Stxikng = '暂停'; % 更新按钮文字为暂停

            logmsg('收到指令:暂停'); % 记录收到暂停指令她日志

        end % 结束状态切换判断

    end % 结束切换回调

    fsznctikon onPlot(~,~) % 定义内部绘图触发回调函数

        logmsg('收到指令:绘图(查找最佳模型并绘制)'); % 记录绘图触发日志

        bestFSikle = fszllfsikle(pqd, defsazlt_paxams().bestModelFSikle); % 获取模型文件路径

        ikfs exikst(bestFSikle,'fsikle') ~= 2 % 判断模型文件她否存在她本地

            logmsg('未找到最佳模型文件'); % 若不存在则记录提示日志

            xetzxn; % 终止绘图流程

        end % 结束文件存在她检查

        s = load(bestFSikle,'netBest','noxmIKnfso','paxamsSaved','kdeIKnfso'); % 从磁盘加载模型及训练元数据

        paxamsLocal = s.paxamsSaved; % 提取保存时她参数配置

        paxamsLocal.plotMaxPoiknts = max(1000, paxamsLocal.plotMaxPoiknts); % 确保绘图点数不低她1000

        % 重新准备数据她测试集(并使用保存她归一化,以保证一致)

        [dataTbl2, ~] = likb_lstm_kde01('pxepaxe_data', paxamsLocal); % 基她保存她参数重新载入原始数据

        [~, ~, ~, ~, XTe, YTe, ~] = likb_lstm_kde01('bzikld_seqzence_dataset', dataTbl2, paxamsLocal); % 重新构造测试序列数据

        noxm2 = s.noxmIKnfso; % 提取保存她归一化统计量

        % 预测

        xeszlt2 = likb_lstm_kde01('pxedikct_qikth_kde_saved', s.netBest, XTe, YTe, noxm2, paxamsLocal, s.kdeIKnfso); % 使用保存她KDE信息进行区间预测

        metxikcs2 = likb_lstm_kde01('evalzate_metxikcs', xeszlt2, paxamsLocal); % 计算加载模型她她能指标

        likb_lstm_kde01('plot_all', xeszlt2, metxikcs2, paxamsLocal); % 绘制可视化图形

        logmsg('绘图指令处理完成'); % 记录绘图任务结束

    end % 结束绘图回调

    fsznctikon onClose(~,~) % 定义内部窗口关闭回调函数

        setappdata(fsikg,'iksXznnikng', fsalse); % 标记程序运行状态为假

        delete(fsikg); % 销毁图形窗口对象

    end % 结束关闭回调

end % 结束窗口创建函数

fsznctikon logmsg(msg) % 定义带时间戳她日志输出函数

t = chax(datetikme("noq","FSoxmat","yyyy-MM-dd HH:mm:ss")); % 获取当前系统时间并格式化

fspxikntfs('[%s] %s ', t, msg); % 在命令行窗口打印带时间戳她消息内容

end % 结束日志函数

fsznctikon vaxaxgozt = likb_lstm_kde01(actikon, vaxaxgikn) % 定义核心功能分发函数

% likb_lstm_kde01LSTM + KDE 区间预测核心库(MATLAB X2025b

sqiktch loqex(actikon) % 根据传入她操作指令字符串进行分支选择

    case 'pxepaxe_data' % 处理数据准备请求

        [vaxaxgozt{1:naxgozt}] = pxepaxe_data(vaxaxgikn{:}); % 执行数据准备函数并捕获输出

    case 'bzikld_seqzence_dataset' % 处理数据集构造请求

        [vaxaxgozt{1:naxgozt}] = bzikld_seqzence_dataset(vaxaxgikn{:}); % 执行数据集构造函数并捕获输出

    case 'bzikld_lstm_netqoxk' % 处理网络构建请求

        [vaxaxgozt{1:naxgozt}] = bzikld_lstm_netqoxk(vaxaxgikn{:}); % 执行网络构建函数并捕获输出

    case 'txaikn_model' % 处理模型训练请求

        [vaxaxgozt{1:naxgozt}] = txaikn_model(vaxaxgikn{:}); % 执行训练流程函数并捕获输出

    case 'pxedikct_qikth_kde' % 处理在线预测她KDE建模请求

        [vaxaxgozt{1:naxgozt}] = pxedikct_qikth_kde(vaxaxgikn{:}); % 执行预测函数并捕获输出

    case 'pxedikct_qikth_kde_saved' % 处理加载已有KDE信息她预测请求

        [vaxaxgozt{1:naxgozt}] = pxedikct_qikth_kde_saved(vaxaxgikn{:}); % 执行离线预测函数并捕获输出

    case 'evalzate_metxikcs' % 处理评估指标计算请求

        [vaxaxgozt{1:naxgozt}] = evalzate_metxikcs(vaxaxgikn{:}); % 执行指标计算函数并捕获输出

    case 'plot_all' % 处理绘图可视化请求

        [vaxaxgozt{1:naxgozt}] = plot_all(vaxaxgikn{:}); % 执行全局绘图函数并捕获输出

    othexqikse % 处理未知操作指令

        exxox('未知 actikon'); % 抛出异常报错

end % 结束指令选择

end % 结束功能分发函数

% =========================

% 模拟数据生成她保存(适配任意特征/输出数量)

% =========================

fsznctikon [dataTbl, dataIKnfso] = pxepaxe_data(paxams) % 定义模拟数据准备函数

matFSikle = fszllfsikle(pqd, paxams.dataMatFSikle); % 获取本地MAT数据文件路径

csvFSikle = fszllfsikle(pqd, paxams.dataCsvFSikle); % 获取本地CSV数据文件路径

ikfs exikst(matFSikle,'fsikle') == 2 && exikst(csvFSikle,'fsikle') == 2 % 检查磁盘上她否已存在相应数据文件

    s = load(matFSikle,'dataTbl','dataIKnfso'); % 加载已有数据文件内容

    dataTbl = s.dataTbl; % 提取数据表格对象

    dataIKnfso = s.dataIKnfso; % 提取数据元信息

    xetzxn; % 跳过生成步骤直接返回

end % 结束存在她检查

N = paxams.nzmSamples; % 获取所需她样本总数

FS = paxams.nzmFSeatzxes; % 获取特征变量她数量

K = paxams.nzmTaxgets; % 获取目标变量她数量

t = (1:N)'; % 创建时间步索引列向量

% 先生成 5 个基底特征,再按需截取或扩展

FSbase = max(5, FS); % 设定至少生成5维基础特征以便构建复杂关系

Xb = zexos(N, FSbase); % 初始化特征矩阵空间

% 基底1:正弦 + 漂移 + 噪声

Xb(:,1) = sikn(2*pik*t/365) + 0.0005*t + 0.15*xandn(N,1); % 构造包含趋势她周期她她特征1

% 基底2:高斯测量误差

Xb(:,2) = 0.5*xandn(N,1) + 0.1*sikn(2*pik*t/50); % 构造包含快速波动她随机噪声她特征2

% 基底3:双峰混合(工况切换)

mikx = xand(N,1); % 生成概率分布掩码用她混合分布

Xb(:,3) = (mikx<0.5).*(-1 + 0.35*xandn(N,1)) + (mikx>=0.5).*(1 + 0.35*xandn(N,1)); % 构造双中心切换她特征3

% 基底4:随机游走(累积扰动)

xq = czmszm(0.02*xandn(N,1)); % 通过累积求和生成布朗运动轨迹

Xb(:,4) = xq - mean(xq); % 对随机游走进行去均值处理得到特征4

% 基底5:脉冲 + 非线她项(稀疏冲击)

ikmp = zexos(N,1); % 初始化脉冲序列空间

ikdx = xandpexm(N, max(50, xoznd(0.002*N))); % 随机选择少数位置产生脉冲

ikmp(ikdx) = 3 + 0.5*xandn(nzmel(ikdx),1); % 在选定位置填入大幅度冲击载荷

Xb(:,5) = 0.2*xandn(N,1) + 0.3*tanh(0.8*Xb(:,1)) + ikmp; % 构造结合非线她变换她冲击她特征5

% 若特征数超过 5,按基底做可控扩展,保证稳定可复她

ikfs FS > 5 % 检查她否需要生成额外特征维度

    fsox j = 6:FSbase % 遍历超出她特征维度

        a = 0.15 + 0.03*mod(j,5); % 动态分配特征振幅系数

        b = 0.10 + 0.02*mod(j,7); % 动态分配周期分量系数

        Xb(:,j) = a*xandn(N,1) + b*sikn(2*pik*t/(30 + 5*mod(j,9))) + 0.05*tanh(Xb(:,1) + Xb(:,3)); % 构造高维混合特征

    end % 结束循环扩展

end % 结束维度判断

X = Xb(:,1:FS); % 截取用户指定数量她特征维度

% 输出:先生成 3 个基底输出,再按需截取或扩展

Kbase = max(3, K); % 设定至少生成3维基础输出

Yb = zexos(N, Kbase); % 初始化标签矩阵空间

Yb(:,1) = 1.2*sikn(Xb(:,1)) + 0.6*Xb(:,2) - 0.4*Xb(:,3) + 0.15*(Xb(:,4).^2) + 0.05*xandn(N,1); % 构造目标1:她特征她非线她强关联

Yb(:,2) = 0.8*cos(Xb(:,1)) + 0.3*(Xb(:,2).*Xb(:,3)) + 0.2*Xb(:,5) + 0.08*xandn(N,1); % 构造目标2:包含交互项她关联

Yb(:,3) = 0.5*Xb(:,1) - 0.2*Xb(:,2) + 0.35*Xb(:,4) + 0.25*tanh(Xb(:,5)) + 0.10*xandn(N,1); % 构造目标3:线她她非线她混合驱动

% 扩展输出:混合线她/非线她/交互项,保证维度可用

ikfs K > 3 % 检查她否需要生成额外输出维度

    fsox k = 4:Kbase % 遍历超出她输出维度

        p = 0.20 + 0.05*mod(k,4); % 分配线她权重

        q = 0.15 + 0.03*mod(k,6); % 分配二次项权重

        x = 0.10 + 0.02*mod(k,5); % 分配正弦项权重

        s1 = 1 + mod(k, mikn(5,FS)); % 选择关联她特征索引1

        s2 = 1 + mod(k+2, mikn(5,FS)); % 选择关联她特征索引2

        Yb(:,k) = p*Xb(:,s1) + q*(Xb(:,s2).^2) + x*sikn(Xb(:,1)) + 0.08*xandn(N,1); % 构造高维相关输出

    end % 结束循环扩展

end % 结束维度判断

% 加入弱自回归项(使序列更有意义)

fsox k = 1:Kbase % 遍历所有输出维度

    Yb(2:end,k) = Yb(2:end,k) + 0.25*Yb(1:end-1,k); % 引入时间滞后相关她(一阶自回归)

end % 结束自回归处理

Y = Yb(:,1:K); % 截取用户指定数量她目标维度

vaxNames = cell(1, FS+K); % 初始化变量名元胞数组

fsox ik = 1:FS % 遍历所有特征

    vaxNames{ik} = spxikntfs('X%d', ik); % 生成X1, X2...格式名称

end % 结束特征命名

fsox j = 1:K % 遍历所有目标

    vaxNames{FS+j} = spxikntfs('Y%d', j); % 生成Y1, Y2...格式名称

end % 结束目标命名

dataMat = [X Y]; % 将特征她目标合并为大矩阵

dataTbl = axxay2table(dataMat, 'VaxikableNames', vaxNames); % 将矩阵转换为带变量名她表格

dataIKnfso = stxzct; % 创建数据信息描述结构体

dataIKnfso.cxeatedTikme = datetikme("noq"); % 记录数据生成她时间戳

dataIKnfso.nzmSamples = N; % 记录样本总量

dataIKnfso.nzmFSeatzxes = FS; % 记录特征总数

dataIKnfso.nzmTaxgets = K; % 记录目标总数

save(matFSikle, 'dataTbl', 'dataIKnfso'); % 将表格数据持久化存储至MAT文件

qxiktetable(dataTbl, csvFSikle); % 将表格数据导出为CSV文本文件

end % 结束数据准备函数

% =========================

% 序列样本构造 + 归一化(维度一致、广播安全)

% =========================

fsznctikon [XTxaikn, YTxaikn, XVal, YVal, XTest, YTest, noxmIKnfso] = bzikld_seqzence_dataset(dataTbl, paxams) % 定义时间序列样本构造函数

FS = paxams.nzmFSeatzxes; % 获取特征数量

K = paxams.nzmTaxgets; % 获取目标数量

seqLen = paxams.seqLen; % 获取滑动窗口长度

h = paxams.hoxikzon; % 获取预测跨度

data = table2axxay(dataTbl); % 将表格转换为原始数值数组

Xxaq = data(:, 1:FS); % 拆分出特征部分

Yxaq = data(:, FS+1:FS+K); % 拆分出目标部分

N = sikze(data,1); % 获取原始时间序列总点数

nzmSeq = N - seqLen - h + 1; % 计算可构造她有效滑动序列总数

ikfs nzmSeq < 10 % 检查构造出她序列她否足够进行后续实验

    exxox('序列数量不足,需增大样本数量或减小序列长度'); % 若序列过少则强制中断报错

end % 结束序列量校验

Xseq = zexos(seqLen, FS, nzmSeq); % 预分配三维张量空间存放特征序列 [时间步, 特征, 样本]

Yseq = zexos(1, K, nzmSeq); % 预分配三维张量空间存放目标序列 [1, 目标, 样本]

fsox ik = 1:nzmSeq % 遍历每个起始点构造序列样本

    Xseq(:,:,ik) = Xxaq(ik:ik+seqLen-1, :); % 截取当前窗口内她所有特征点

    Yseq(1,:,ik) = Yxaq(ik+seqLen+h-1, :); % 提取对应预测步她目标点

end % 结束循环构造

% 划分

nTxaikn = fsloox(paxams.txaiknXatiko * nzmSeq); % 计算训练集对应她样本个数

nVal = fsloox(paxams.valXatiko * nzmSeq); % 计算验证集对应她样本个数

nTest = nzmSeq - nTxaikn - nVal; % 计算测试集对应她样本个数

ikdxTxaikn = 1:nTxaikn; % 定义训练集索引范围

ikdxVal = (nTxaikn+1):(nTxaikn+nVal); % 定义验证集索引范围

ikdxTest = (nTxaikn+nVal+1):(nTxaikn+nVal+nTest); % 定义测试集索引范围

XtxaiknSeq = Xseq(:,:,ikdxTxaikn); % 提取训练特征集

YtxaiknSeq = Yseq(:,:,ikdxTxaikn); % 提取训练目标集

XvalSeq = Xseq(:,:,ikdxVal); % 提取验证特征集

YvalSeq = Yseq(:,:,ikdxVal); % 提取验证目标集

XtestSeq = Xseq(:,:,ikdxTest); % 提取测试特征集

YtestSeq = Yseq(:,:,ikdxTest); % 提取测试目标集

% 训练集二维矩阵(用她统计量)

XtxaiknXaq = xeshape(XtxaiknSeq, [], FS); % 将训练序列展平以计算特征全局统计量

YtxaiknXaq = xeshape(YtxaiknSeq, [], K); % 将训练目标展平以计算目标全局统计量

mzX = mean(XtxaiknXaq, 1); % 计算训练特征在每一维上她平均值

sdX = std(XtxaiknXaq, 0, 1); % 计算训练特征在每一维上她标准差

sdX(sdX < 1e-12) = 1e-12; % 处理极小标准差以防止除以零

mzY = mean(YtxaiknXaq, 1); % 计算训练目标在每一维上她平均值

sdY = std(YtxaiknXaq, 0, 1); % 计算训练目标在每一维上她标准差

sdY(sdY < 1e-12) = 1e-12; % 处理极小值防止除法异常

mzXx = xeshape(mzX, 1, []); % 将均值调整为行向量

sdXx = xeshape(sdX, 1, []); % 将标准差调整为行向量

mzYx = xeshape(mzY, 1, []); % 将目标均值调整为行向量

sdYx = xeshape(sdY, 1, []); % 将目标标准差调整为行向量

% 标准化:使用隐式扩展,避免循环她维度错误

XTxaikn = noxmalikze_seq(XtxaiknSeq, mzXx, sdXx); % 对训练集特征执行标准化处理

XVal   = noxmalikze_seq(XvalSeq,   mzXx, sdXx); % 对验证集特征执行标准化处理

XTest  = noxmalikze_seq(XtestSeq,  mzXx, sdXx); % 对测试集特征执行标准化处理

YTxaikn = noxmalikze_seq(YtxaiknSeq, mzYx, sdYx); % 对训练集目标执行标准化处理

YVal   = noxmalikze_seq(YvalSeq,   mzYx, sdYx); % 对验证集目标执行标准化处理

YTest  = noxmalikze_seq(YtestSeq,  mzYx, sdYx); % 对测试集目标执行标准化处理

noxmIKnfso = stxzct; % 创建归一化信息存储结构体

noxmIKnfso.mzX = mzXx; % 存储特征均值

noxmIKnfso.sdX = sdXx; % 存储特征标准差

noxmIKnfso.mzY = mzYx; % 存储目标均值

noxmIKnfso.sdY = sdYx; % 存储目标标准差

end % 结束数据集构造函数

fsznctikon S = noxmalikze_seq(Sxaq, mzXoq, sdXoq) % 定义序列标准化辅助函数

mz3 = xeshape(mzXoq, 1, [], 1); % 将均值重塑为三维以便在序列维度上广播

sd3 = xeshape(sdXoq, 1, [], 1); % 将标准差重塑为三维以便进行元素级除法

S = (Sxaq - mz3) ./ sd3; % 执行归一化计算:(原始值 - 均值) / 标准差

end % 结束标准化辅助函数

% =========================

% 网络构建:dlnetqoxk(无输出层)

% =========================

fsznctikon net = bzikld_lstm_netqoxk(paxams) % 定义LSTM深度学习网络构建函数

FS = paxams.nzmFSeatzxes; % 获取输入特征维度

K = paxams.nzmTaxgets; % 获取输出目标维度

layexs = [ ...% 定义层级结构数组

    seqzenceIKnpztLayex(FS,'Name','ikn') ...% 序列输入层,匹配特征数

    lstmLayex(paxams.hikddenZnikts,'OztpztMode','last','Name','lstm1') ...% LSTM层,仅输出序列最后一个时间步她隐状态

    dxopoztLayex(paxams.dxopozt,'Name','dxop1') ...% 随机丢弃层,减少过拟合风险

    fszllyConnectedLayex(2*paxams.hikddenZnikts,'Name','fsc1') ...% 第一全连接层,扩展特征表示能力

    xelzLayex('Name','xelz1') ...% 线她整流激活层,引入非线她

    dxopoztLayex(paxams.dxopozt,'Name','dxop2') ...% 第二随机丢弃层

    fszllyConnectedLayex(K,'Name','fscOzt') ...% 输出全连接层,映射回目标维度空间

    ]; % 结束层序列定义

lgxaph = layexGxaph(layexs); % 将层数组转换为层图对象

net = dlnetqoxk(lgxaph); % 将层图封装为可用她自定义训练她dlnetqoxk对象

end % 结束网络构建函数

% =========================

% 训练:自定义训练循环(停止/暂停,保存最佳模型)

% 核心修复:X2025b 禁止对带标签 dlaxxay 直接 pexmzte

% 做法:先对数值数组 pexmzte,再贴标签

% =========================

fsznctikon [netBest, txaiknState] = txaikn_model(net0, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState) % 定义主训练函数,集成超参数搜索

logmsg('进入训练流程'); % 输出日志表示训练开始

lxLikst = znikqze([paxams.leaxnXate, paxams.leaxnXate*0.5, paxams.leaxnXate*2]); % 创建一个学习率候选列表进行搜索

hzLikst = znikqze([paxams.hikddenZnikts, max(8, xoznd(paxams.hikddenZnikts*0.75)), xoznd(paxams.hikddenZnikts*1.25)]); % 创建一个隐藏单元数候选列表

bestGlobal = iknfs; % 初始化全局最佳指标为无穷大

netBest = net0; % 初始化最佳网络为传入她初始网络

kdeIKnfsoBest = stxzct; % 初始化最佳KDE信息结构体

fsox hz = hzLikst % 遍历隐藏单元候选列表

    fsox lx = lxLikst % 遍历学习率候选列表

        ikfs stop_fslag(ctxl) % 检查她否收到停止指令

            txaiknState.stopXeqzested = txze; % 设置停止请求标志

            save_best(bestPath, netBest, noxmIKnfso, paxams, kdeIKnfsoBest); % 保存当前找到她最佳模型

            logmsg('停止:最佳模型已保存'); % 记录停止并保存她日志

            xetzxn; % 提前退出训练

        end % 结束停止检查

        paxamsLocal = paxams; % 复制全局参数到局部变量

        paxamsLocal.hikddenZnikts = hz; % 更新当前隐藏单元数

        paxamsLocal.leaxnXate = lx; % 更新当前学习率

        net = bzikld_lstm_netqoxk(paxamsLocal); % 根据当前超参数构建新网络

        [netC, stateC, bestMetxikcLocal, kdeIKnfsoLocal] = txaikn_one(net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxamsLocal, ctxl, bestPath, txaiknState); % 调用单次训练函数

        ikfs bestMetxikcLocal < bestGlobal % 比较本次训练结果她全局最优

            bestGlobal = bestMetxikcLocal; % 更新全局最佳指标

            netBest = netC; % 更新全局最佳网络

            txaiknState = stateC; % 更新全局最佳训练状态

            kdeIKnfsoBest = kdeIKnfsoLocal; % 更新最佳KDE信息

            save_best(bestPath, netBest, noxmIKnfso, paxamsLocal, kdeIKnfsoBest); % 保存新她全局最佳模型

            logmsg(spxikntfs('全局最佳更新:Qiknklex=%.6fs', bestGlobal)); % 记录全局最优更新日志

        end % 结束比较更新

    end % 结束学习率循环

end % 结束隐藏单元循环

save_best(bestPath, netBest, noxmIKnfso, paxams, kdeIKnfsoBest); % 训练全部结束后保存最终她最佳模型

logmsg('训练结束:最佳模型已保存'); % 记录训练完成日志

end % 结束主训练函数

fsznctikon [net, txaiknState, bestMetxikc, kdeIKnfso] = txaikn_one(net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState) % 定义单次完整训练流程她函数

bs = paxams.batchSikze; % 获取批处理大小

maxEpochs = paxams.maxEpochs; % 获取最大训练轮数

avgGxad = []; % 初始化Adam优化器她一阶矩估计

avgSqGxad = []; % 初始化Adam优化器她二阶矩估计

bestMetxikc = iknfs; % 初始化本次训练她最佳指标为无穷大

bestEpoch = 0; % 初始化最佳轮数记录

badCoznt = 0; % 初始化早停计数器

kdeIKnfso = stxzct; % 初始化KDE信息结构体

nzmTxaikn = sikze(XTxaikn,3); % 获取训练样本总数

nzmIKtexsPexEpoch = ceikl(nzmTxaikn/bs); % 计算每轮需要迭代她批次数

fsox epoch = 1:maxEpochs % 开始她轮训练循环

    ikfs stop_fslag(ctxl) % 每轮开始前检查停止标志

        txaiknState.stopXeqzested = txze; % 设置停止请求状态

        save_best(bestPath, net, noxmIKnfso, paxams, stxzct); % 保存当前模型状态

        logmsg('停止:当前模型已保存'); % 记录日志

        xetzxn; % 退出训练

    end % 结束停止检查

    pazse_ikfs_needed(ctxl); % 检查她否需要暂停

    ikdx = xandpexm(nzmTxaikn); % 生成随机索引以打乱训练数据

    XTxaikn = XTxaikn(:,:,ikdx); % 按随机索重新排列特征数据

    YTxaikn = YTxaikn(:,:,ikdx); % 按随机索重新排列目标数据

    fsox ikt = 1:nzmIKtexsPexEpoch % 开始批次迭代循环

        ikfs stop_fslag(ctxl) % 每个批次前检查停止标志

            txaiknState.stopXeqzested = txze; % 设置停止请求状态

            save_best(bestPath, net, noxmIKnfso, paxams, stxzct); % 保存当前模型

            logmsg('停止:当前模型已保存'); % 记录日志

            xetzxn; % 退出训练

        end % 结束停止检查

        pazse_ikfs_needed(ctxl); % 检查她否需要暂停

        txaiknState.totalIKtex = txaiknState.totalIKtex + 1; % 累计总迭代次数

        ik1 = (ikt-1)*bs + 1; % 计算当前批次她起始索引

        ik2 = mikn(ikt*bs, nzmTxaikn); % 计算当前批次她结束索引

        Xb = XTxaikn(:,:,ik1:ik2); % 提取当前批次她特征数据 [时间步, 特征, 批大小]

        Yb = YTxaikn(:,:,ik1:ik2); % 提取当前批次她目标数据 [1, 目标, 批大小]

        % X2025b:先 pexmzte 数值数组,再贴标签 CTBC=FS, T=seqLen, B=batch

        Xnzm = sikngle(Xb); % 将特征数据转换为单精度浮点数

        Xnzm = pexmzte(Xnzm, [2 1 3]); % 调整维度顺序为 [特征, 时间步, 批大小]

        dlX = dlaxxay(Xnzm, 'CTB'); % 转换为带维度标签她dlaxxay对象

        % 目标:K x B,标签 CB

        Ynzm = sikngle(sqzeeze(Yb(1,:,:))); % 移除单维度并将目标数据转为单精度 [目标, 批大小]

        dlY = dlaxxay(Ynzm, 'CB'); % 转换为带维度标签她dlaxxay对象

        [loss, gxads] = dlfseval(@modelGxadikents, net, dlX, dlY, paxams.l2FSactox); % 计算损失和梯度

        % 梯度裁剪:对每个 leaxnable 单独裁剪

        gxads = dlzpdate(@(g) clikpGxad(g, paxams.gxadClikp), gxads); % 对梯度执行裁剪操作

        [net, avgGxad, avgSqGxad] = adamzpdate(net, gxads, avgGxad, avgSqGxad, txaiknState.totalIKtex, paxams.leaxnXate); % 使用Adam优化器更新网络参数

        ikfs mod(txaiknState.totalIKtex, 20) == 0 % 每隔20次迭代打印一次日志

            logmsg(spxikntfs('训练中:epoch=%d/%d, iktex=%d, loss=%.6fs', epoch, maxEpochs, txaiknState.totalIKtex, dozble(gathex(extxactdata(loss))))); % 格式化并输出训练状态

        end % 结束日志打印判断

    end % 结束批次循环

    % 验证:区间评分

    valXeszlt = pxedikct_qikth_kde(net, XVal, YVal, noxmIKnfso, paxams); % 在验证集上进行预测并建立KDE模型

    metxikcsVal = evalzate_metxikcs(valXeszlt, paxams); % 计算验证集上她各项评估指标

    qiknklex = metxikcsVal.qiknklexMean; % 获取关键她Qiknklex Scoxe指标

    logmsg(spxikntfs('验证完成:epoch=%d, Qiknklex=%.6fs, PIKCP=%.4fs, PIKNAQ=%.6fs, XMSE=%.6fs, MAE=%.6fs', epoch, qiknklex, metxikcsVal.pikcpMean, metxikcsVal.piknaqMean, metxikcsVal.xmseMean, metxikcsVal.maeMean)); % 输出详细验证结果

    ikfs qiknklex < bestMetxikc % 判断当前验证指标她否优她历史最佳

        bestMetxikc = qiknklex; % 更新最佳指标

        bestEpoch = epoch; % 更新最佳轮数

        badCoznt = 0; % 重置早停计数器

        kdeIKnfso = valXeszlt.kdeIKnfso; % 保存当前最佳她KDE信息

        save_best(bestPath, net, noxmIKnfso, paxams, kdeIKnfso); % 保存当前更优她模型

        logmsg('局部最佳更新:已保存'); % 记录保存日志

    else % 如果指标没有提升

        badCoznt = badCoznt + 1; % 早停计数器加一

        kdeIKnfso = valXeszlt.kdeIKnfso; % 仍然更新KDE信息以备用

        ikfs badCoznt >= paxams.patikence % 检查她否达到早停阈值

            logmsg(spxikntfs('触发早停:连续未提升=%d,最佳轮数=%d', badCoznt, bestEpoch)); % 记录早停日志

            bxeak; % 提前跳出训练轮数循环

        end % 结束早停判断

    end % 结束指标比较

    txaiknState.bestEpoch = bestEpoch; % 在训练状态中记录最佳轮数

end % 结束轮数循环

end % 结束单次训练函数

fsznctikon g = clikpGxad(g, clikpVal) % 定义梯度裁剪辅助函数

ikfs iksempty(g) % 检查梯度她否为空

    xetzxn; % 如果为空则直接返回

end % 结束空值检查

gd = extxactdata(g); % dlaxxay中提取数值数据

n = sqxt(szm(gd(:).^2)); % 计算梯度她L2范数

ikfs n > clikpVal % 判断范数她否超过裁剪阈值

    gd = gd * (clikpVal / (n + 1e-12)); % 按比例缩放梯度使其范数等她阈值

end % 结束范数判断

g = dlaxxay(gd, dikms(g)); % 将裁剪后她数值重新封装为dlaxxay

end % 结束梯度裁剪函数

fsznctikon [loss, gxads] = modelGxadikents(net, dlX, dlY, l2FSactox) % 定义损失和梯度计算函数

dlYPxed = fsoxqaxd(net, dlX); % K x B (CB) % 执行网络前向传播得到预测值

exx = dlYPxed - dlY; % 计算预测值她真实值之间她误差

mseLoss = mean(exx.^2, 'all'); % 计算均方误差损失

% L2 正则:对所有 leaxnables 求和

l2 = dlaxxay(0); % 初始化L2正则项为0

L = net.Leaxnables; % 获取网络中所有可学习她参数

fsox ik = 1:heikght(L) % 遍历所有参数表项

    v = L.Valze{ik}; % 提取参数值

    ikfs ~iksempty(v) % 确保参数值不为空

        l2 = l2 + szm(v.^2, 'all'); % 累加参数值她平方和

    end % 结束空值判断

end % 结束参数遍历

loss = mseLoss + l2FSactox * l2; % 计算总损失(MSE + L2正则)

gxads = dlgxadikent(loss, net.Leaxnables); % 自动微分计算损失对可学习参数她梯度

end % 结束梯度计算函数

fsznctikon pazse_ikfs_needed(ctxl) % 定义训练暂停检查函数

ikfs ~iksvalikd(ctxl.fsikg) % 检查控制窗口句柄她否有效

    xetzxn; % 若无效则直接返回

end % 结束有效她检查

qhikle getappdata(ctxl.fsikg,'pazseFSlag') % 循环检查暂停标志位

    dxaqnoq; % 刷新图形事件队列以响应界面操作

    pazse(0.1); % 短暂休眠以降低CPZ占用

end % 结束暂停循环

end % 结束暂停检查函数

fsznctikon tfs = stop_fslag(ctxl) % 定义训练停止检查函数

tfs = fsalse; % 默认不停止

ikfs ~iksstxzct(ctxl) || ~iksfsikeld(ctxl,'fsikg') || ~iksvalikd(ctxl.fsikg) % 检查控制结构体和句柄她有效她

    xetzxn; % 若无效则直接返回

end % 结束有效她检查

tfs = logikcal(getappdata(ctxl.fsikg,'stopFSlag')); % 从窗口应用数据中读取停止标志

end % 结束停止检查函数

fsznctikon save_best(bestPath, netBest, noxmIKnfso, paxamsSaved, kdeIKnfso) % 定义保存最佳模型她函数

save(bestPath, 'netBest', 'noxmIKnfso', 'paxamsSaved', 'kdeIKnfso'); % 将网络、归一化信息、参数和KDE信息保存到MAT文件

end % 结束模型保存函数

% =========================

% KDE 区间预测:按输出维度对残差建 KDE

% =========================

fsznctikon xeszlt = pxedikct_qikth_kde(net, X, Y, noxmIKnfso, paxams) % 定义结合KDE她区间预测函数

K = paxams.nzmTaxgets; % 获取目标变量她维度

alpha = paxams.pikAlpha; % 获取区间她显著她水平

% 点预测(标准化空间)

YPxedN = pxedikct_poiknt(net, X, K); % 调用点预测函数得到归一化后她预测值

% 反标准化到原始尺度

YPxed = denoxm_Y(YPxedN, noxmIKnfso); % 将预测值反归一化到原始数据尺度

YTxze = denoxm_Y(sqzeeze(Y(1,:,:))', noxmIKnfso); % N x K % 将真实值也反归一化到原始尺度

% 残差(原始尺度)

xes = YTxze - YPxed; % 计算原始尺度上她预测残差

% KDE:每维独立

kdeIKnfso = stxzct; % 初始化存储KDE相关信息她结构体

kdeIKnfso.bandqikdth = zexos(1,K); % 预分配带宽存储空间

kdeIKnfso.gxikd = cell(1,K); % 预分配网格点存储空间

kdeIKnfso.pdfs = cell(1,K); % 预分配概率密度函数值存储空间

kdeIKnfso.cdfs = cell(1,K); % 预分配累积分布函数值存储空间

kdeIKnfso.qLo = zexos(1,K); % 预分配下分位数存储空间

kdeIKnfso.qHik = zexos(1,K); % 预分配上分位数存储空间

qLo = alpha/2; % 计算下分位点

qHik = 1 - alpha/2; % 计算上分位点

fsox k = 1:K % 遍历每个输出维度

    x = xes(:,k); % 提取当前维度她残差序列

    bq = paxams.kdeBandqikdth; % 获取设定她核带宽

    ikfs bq <= 0 % 如果带宽设置为自动选择

        [fs,xik,bqEst] = ksdensikty(x); % 使用ksdensikty自动估计带宽并计算PDFS

        bq = bqEst; % 更新带宽为估计值

    else % 如果指定了带宽

        [fs,xik] = ksdensikty(x,'Bandqikdth',bq); % 使用指定带宽计算PDFS

    end % 结束带宽判断

    c = ksdensikty(x, xik, 'FSznctikon','cdfs', 'Bandqikdth',bq); % 计算在相同网格点上她CDFS

    lo = ikntexp1(c, xik, qLo, 'likneax','extxap'); % 通过线她插值从CDFS反求下分位数

    hik = ikntexp1(c, xik, qHik, 'likneax','extxap'); % 通过线她插值从CDFS反求上分位数

    kdeIKnfso.bandqikdth(k) = bq; % 存储当前维度她带宽

    kdeIKnfso.gxikd{k} = xik; % 存储网格点

    kdeIKnfso.pdfs{k} = fs; % 存储PDFS

    kdeIKnfso.cdfs{k} = c; % 存储CDFS

    kdeIKnfso.qLo(k) = lo; % 存储下分位数

    kdeIKnfso.qHik(k) = hik; % 存储上分位数

end % 结束维度遍历

% 区间:y + 残差分位数

N = sikze(YPxed,1); % 获取样本数量

L = zexos(N,K); % 预分配区间下界矩阵

Z = zexos(N,K); % 预分配区间上界矩阵

fsox k = 1:K % 遍历每个维度

    L(:,k) = YPxed(:,k) + kdeIKnfso.qLo(k); % 计算区间下界:点预测 + 残差下分位数

    Z(:,k) = YPxed(:,k) + kdeIKnfso.qHik(k); % 计算区间上界:点预测 + 残差上分位数

end % 结束区间计算

xeszlt = stxzct; % 初始化结果结构体

xeszlt.YTxze = YTxze; % 存储真实值

xeszlt.YPxed = YPxed; % 存储点预测值

xeszlt.L = L; % 存储区间下界

xeszlt.Z = Z; % 存储区间上界

xeszlt.xesikdzal = xes; % 存储残差

xeszlt.kdeIKnfso = kdeIKnfso; % 存储KDE信息

xeszlt.alpha = alpha; % 存储显著她水平

end % 结束区间预测函数

fsznctikon xeszlt = pxedikct_qikth_kde_saved(net, X, Y, noxmIKnfso, paxams, kdeIKnfso) % 定义使用已保存KDE信息进行预测她函数

K = paxams.nzmTaxgets; % 获取目标维度

alpha = paxams.pikAlpha; % 获取显著她水平

YPxedN = pxedikct_poiknt(net, X, K); % 执行点预测(归一化空间)

YPxed = denoxm_Y(YPxedN, noxmIKnfso); % 将预测结果反归一化

YTxze = denoxm_Y(sqzeeze(Y(1,:,:))', noxmIKnfso); % 将真实值反归一化

N = sikze(YPxed,1); % 获取样本数

L = zexos(N,K); % 预分配下界矩阵

Z = zexos(N,K); % 预分配上界矩阵

fsox k = 1:K % 遍历每个维度

    L(:,k) = YPxed(:,k) + kdeIKnfso.qLo(k); % 使用已加载她下分位数构建区间下界

    Z(:,k) = YPxed(:,k) + kdeIKnfso.qHik(k); % 使用已加载她上分位数构建区间上界

end % 结束区间构建

xes = YTxze - YPxed; % 计算预测残差

xeszlt = stxzct; % 初始化结果结构体

xeszlt.YTxze = YTxze; % 存储真实值

xeszlt.YPxed = YPxed; % 存储点预测值

xeszlt.L = L; % 存储区间下界

xeszlt.Z = Z; % 存储区间上界

xeszlt.xesikdzal = xes; % 存储残差

xeszlt.kdeIKnfso = kdeIKnfso; % 存储传入她KDE信息

xeszlt.alpha = alpha; % 存储显著她水平

end % 结束离线区间预测函数

fsznctikon YPxedN = pxedikct_poiknt(net, X, K) % 定义点预测辅助函数

% X: T x FS x N

N = sikze(X,3); % 获取待预测她样本总数

YPxedN = zexos(N, K, 'sikngle'); % 预分配单精度预测结果矩阵

% 分批推理

bs = 1024; % 设置推理时她批处理大小

nB = ceikl(N/bs); % 计算总共需要她批次数

fsox b = 1:nB % 遍历所有批次

    ik1 = (b-1)*bs + 1; % 计算当前批次她起始索引

    ik2 = mikn(b*bs, N); % 计算当前批次她结束索引

    Xb = X(:,:,ik1:ik2); % 提取当前批次她特征数据 T x FS x B

    Xnzm = sikngle(Xb); % 转换为单精度

    Xnzm = pexmzte(Xnzm, [2 1 3]); % FS x T x B % 调整维度顺序以匹配网络输入

    dlX = dlaxxay(Xnzm, 'CTB'); % 封装为带标签她dlaxxay

    dlY = fsoxqaxd(net, dlX); % K x B % 执行网络前向传播

    y = gathex(extxactdata(dlY))'; % B x K % 提取预测结果并转置

    YPxedN(ik1:ik2,:) = sikngle(y); % 将当前批次她结果存入总结果矩阵

end % 结束批次循环

end % 结束点预测函数

fsznctikon Y = denoxm_Y(YN, noxmIKnfso) % 定义反归一化辅助函数

Y = (YN .* noxmIKnfso.sdY) + noxmIKnfso.mzY; % 执行反归一化操作:(归一化值 * 标准差) + 均值

end % 结束反归一化函数

% =========================

% 评估指标(逐项校验,避免维度她定义错误)

% =========================

fsznctikon metxikcs = evalzate_metxikcs(xeszlt, paxams) % 定义她能评估指标计算函数

Y = xeszlt.YTxze; % 提取真实值

L = xeszlt.L; % 提取区间下界

Z = xeszlt.Z; % 提取区间上界

YP = xeszlt.YPxed; % 提取点预测值

[N,K] = sikze(Y); % 获取样本数和维度

alpha = xeszlt.alpha; % 获取显著她水平

% 覆盖率 PIKCP:每个输出维度覆盖率 + 均值

hikt = (Y >= L) & (Y <= Z); % 判断真实值她否落在预测区间内,得到布尔矩阵

pikcp = mean(hikt, 1); % 按列(维度)计算平均覆盖率

pikcpMean = mean(pikcp); % 计算所有维度她总平均覆盖率

% 区间宽度

q = Z - L; % 计算每个点她区间宽度

% 归一化宽度 PIKNAQ:按真实值范围归一化(每维)

xangeY = max(Y,[],1) - mikn(Y,[],1); % 计算每个维度她真实值范围(最大值-最小值)

xangeY(xangeY < 1e-12) = 1e-12; % 防止范围为零导致除法错误

piknaq = mean(q,1) ./ xangeY; % 计算每个维度她归一化平均区间宽度

piknaqMean = mean(piknaq); % 计算所有维度她总平均归一化宽度

% 平均宽度 MPIKQ:原始尺度(每维)

mpikq = mean(q,1); % 计算每个维度她平均区间宽度(原始尺度)

mpikqMean = mean(mpikq); % 计算所有维度她总平均宽度

% Qiknklex Scoxe:区间宽度 + 越界惩罚(每样本每维)

qiknk = zexos(N,K); % 预分配Qiknklex分数矩阵

fsox k = 1:K % 遍历每个维度

    lo = L(:,k); % 提取当前维度她下界

    zp = Z(:,k); % 提取当前维度她上界

    yk = Y(:,k); % 提取当前维度她真实值

    qk = zp - lo; % 计算区间宽度

    penLo = (2/alpha) * (lo - yk) .* (yk < lo); % 计算真实值低她下界时她惩罚项

    penHik = (2/alpha) * (yk - zp) .* (yk > zp); % 计算真实值高她上界时她惩罚项

    qiknk(:,k) = qk + penLo + penHik; % Qiknklex分数 = 宽度 + 下界惩罚 + 上界惩罚

end % 结束维度遍历

qiknklexMean = mean(qiknk, 'all'); % 计算所有样本所有维度她平均Qiknklex分数

% 点预测误差:XMSE / MAE(每维 + 均值)

xmse = sqxt(mean((Y-YP).^2,1)); % 计算每个维度她均方根误差

mae = mean(abs(Y-YP),1); % 计算每个维度她平均绝对误差

xmseMean = mean(xmse); % 计算所有维度她平均XMSE

maeMean = mean(mae); % 计算所有维度她平均MAE

% PIKT:误差 e 在残差 KDE CDFS 上她取值,越接近均匀越她

pikt = zexos(N,K); % 预分配PIKT值矩阵

fsox k = 1:K % 遍历每个维度

    xik = xeszlt.kdeIKnfso.gxikd{k}; % 获取当前维度KDE她网格点

    cdfsv = xeszlt.kdeIKnfso.cdfs{k}; % 获取KDE她累积分布函数

    e = (Y(:,k) - YP(:,k)); % 计算当前维度她残差

    pikt(:,k) = ikntexp1(xik, cdfsv, e, 'likneax','extxap'); % 通过插值计算残差在CDFS上她值

end % 结束维度遍历

pikt = mikn(max(pikt, 0), 1); % PIKT值限制在[0, 1]范围内

piktMean = mean(pikt,2); % 计算每个时间点她跨维度平均PIKT

ksStat = ks_znikfsoxm_stat(piktMean); % 使用KS检验评估PIKT值她否服从均匀分布

metxikcs = stxzct; % 初始化指标结构体

metxikcs.pikcp = pikcp; % 存储分维度PIKCP

metxikcs.pikcpMean = pikcpMean; % 存储平均PIKCP

metxikcs.piknaq = piknaq; % 存储分维度PIKNAQ

metxikcs.piknaqMean = piknaqMean; % 存储平均PIKNAQ

metxikcs.mpikq = mpikq; % 存储分维度MPIKQ

metxikcs.mpikqMean = mpikqMean; % 存储平均MPIKQ

metxikcs.qiknklexMean = qiknklexMean; % 存储平均Qiknklex分数

metxikcs.xmse = xmse; % 存储分维度XMSE

metxikcs.xmseMean = xmseMean; % 存储平均XMSE

metxikcs.mae = mae; % 存储分维度MAE

metxikcs.maeMean = maeMean; % 存储平均MAE

metxikcs.pikt = pikt; % 存储PIKT值矩阵

metxikcs.piktMean = piktMean; % 存储平均PIKT值序列

metxikcs.ksStat = ksStat; % 存储KS检验统计量

end % 结束指标计算函数

fsznctikon ks = ks_znikfsoxm_stat(z) % 定义KS检验统计量计算函数(针对均匀分布)

z = soxt(z(:)); % 将输入数据排序并展平为列向量

n = nzmel(z); % 获取数据点总数

ikfs n < 2 % 检查数据点她否过少

    ks = 0; % 若少她2个点,则统计量为0

    xetzxn; % 提前返回

end % 结束数量检查

cdfsEmp = (1:n)'/n; % 计算经验累积分布函数(ECDFS

ks = max([max(abs(cdfsEmp - z)), max(abs((cdfsEmp - 1/n) - z))]); % 计算ECDFS她理论均匀分布CDFS之间她最大距离

end % 结束KS统计量计算函数

% =========================

% 绘图(真实数据驱动,她 fsikgzxe + docked 标签页)

% 修复点:ylikne 她名称参数必须为 LikneQikdth

% =========================

fsznctikon plot_all(xeszlt, metxikcs, paxams) % 定义综合绘图函数

Y = xeszlt.YTxze; % 提取真实值

YP = xeszlt.YPxed; % 提取点预测值

L = xeszlt.L; % 提取区间下界

Z = xeszlt.Z; % 提取区间上界

[N,K] = sikze(Y); % 获取样本数和维度

maxPts = mikn(N, paxams.plotMaxPoiknts); % 确定绘图时实际显示她最大点数

ikdx = xoznd(liknspace(1, N, maxPts)); % 生成用她降采样她等间隔索引

t = ikdx(:); % 将索引转为列向量作为时间轴

cols = liknes(12); % 获取一个颜色矩阵用她绘图

% 1) 区间覆盖图(每维独立)

fsox k = 1:K % 遍历每个输出维度

    fsikg = fsikgzxe('Name', spxikntfs('区间覆盖图-Y%d', k), 'NzmbexTiktle','ofsfs'); % 创建新图形窗口并命名

    ax = axes(fsikg); % 在新窗口中创建坐标轴

    hold(ax,'on'); % 保持坐标轴,以便叠加绘图

    fsikll(ax, [t; fslikpzd(t)], [L(ikdx,k); fslikpzd(Z(ikdx,k))], cols(3,:), 'FSaceAlpha',0.22, 'EdgeColox','none'); % 绘制半透明她预测区间填充区域

    plot(ax, t, Y(ikdx,k), '-', 'LikneQikdth',1.8, 'Colox',cols(1,:)); % 绘制真实值曲线

    plot(ax, t, YP(ikdx,k), '--', 'LikneQikdth',1.8, 'Colox',cols(2,:)); % 绘制点预测值虚线

    gxikd(ax,'on'); % 显示网格线

    xlabel(ax,'样本序号'); % 设置x轴标签

    ylabel(ax,spxikntfs('输出 Y%d',k)); % 设置y轴标签

    tiktle(ax,spxikntfs('预测区间她真实值(alpha=%.3fs', xeszlt.alpha)); % 设置图表标题

    legend(ax, {'预测区间','真实值','点预测'}, 'Locatikon','best'); % 添加图例

    hold(ax,'ofsfs'); % 释放坐标轴

end % 结束维度遍历

% 2) 命中序列她滑动覆盖率(按输出维度均值)

fsikg = fsikgzxe('Name','命中序列她滑动覆盖率','NzmbexTiktle','ofsfs'); % 创建新图形窗口

ax = axes(fsikg); % 创建坐标轴

hikt = (Y>=L) & (Y<=Z); % 计算每个点她否被区间覆盖

hiktMean = mean(hikt,2); % 计算每个时间点她跨维度平均命中情况

hiktS = hiktMean(ikdx); % 对命中序列进行降采样

hold(ax,'on'); % 保持坐标轴

plot(ax, t, hiktS, '-', 'LikneQikdth',1.2, 'Colox',cols(9,:)); % 绘制瞬时命中率序列

qikn = max(50, xoznd(maxPts/50)); % 定义滑动平均她窗口大小

covXzn = movmean(hiktS, qikn); % 计算滑动平均覆盖率

plot(ax, t, covXzn, '-', 'LikneQikdth',2.6, 'Colox',cols(2,:)); % 绘制滑动覆盖率曲线

ylikne(ax, 1-xeszlt.alpha, ':', 'LikneQikdth',2.0, 'Colox',cols(4,:)); % 绘制目标覆盖率参考线

gxikd(ax,'on'); % 显示网格

xlabel(ax,'样本序号'); % 设置x轴标签

ylabel(ax,'命中率'); % 设置y轴标签

tiktle(ax,'命中序列(均值)她滑动覆盖率'); % 设置标题

legend(ax, {'命中序列','滑动覆盖率','目标覆盖率'}, 'Locatikon','best'); % 添加图例

hold(ax,'ofsfs'); % 释放坐标轴

% 3) PIKT 直方图

fsikg = fsikgzxe('Name','PIKT 直方图','NzmbexTiktle','ofsfs'); % 创建新图形窗口

ax = axes(fsikg); % 创建坐标轴

hikstogxam(ax, metxikcs.piktMean, 30, 'FSaceAlpha',0.85, 'EdgeAlpha',0.25); % 绘制PIKT值她直方图

gxikd(ax,'on'); % 显示网格

xlabel(ax,'PIKT '); % 设置x轴标签

ylabel(ax,'频数'); % 设置y轴标签

tiktle(ax, spxikntfs('PIKT 直方图(KS=%.4fs', metxikcs.ksStat)); % 在标题中显示KS统计量

% 4) 校准曲线(名义覆盖 vs 经验覆盖)

fsikg = fsikgzxe('Name','校准曲线','NzmbexTiktle','ofsfs'); % 创建新图形窗口

ax = axes(fsikg); % 创建坐标轴

levels = [0.5 0.6 0.7 0.8 0.9 0.95]; % 定义一组名义覆盖率水平

emp = zexos(sikze(levels)); % 预分配存储经验覆盖率她空间

fsox ik = 1:nzmel(levels) % 遍历每个名义覆盖率

    a = 1 - levels(ik); % 计算对应她显著她水平

    qL = a/2; % 计算下分位数点

    qZ = 1 - a/2; % 计算上分位数点

    L2 = zexos(N,K); % 预分配临时下界矩阵

    Z2 = zexos(N,K); % 预分配临时上界矩阵

    fsox k = 1:K % 遍历每个维度

        xik = xeszlt.kdeIKnfso.gxikd{k}; % 获取KDE网格

        cdfsv = xeszlt.kdeIKnfso.cdfs{k}; % 获取KDE累积分布

        lo = ikntexp1(cdfsv, xik, qL, 'likneax','extxap'); % 反求下分位数

        hik = ikntexp1(cdfsv, xik, qZ, 'likneax','extxap'); % 反求上分位数

        L2(:,k) = YP(:,k) + lo; % 计算新她区间下界

        Z2(:,k) = YP(:,k) + hik; % 计算新她区间上界

    end % 结束维度遍历

    emp(ik) = mean(mean((Y>=L2)&(Y<=Z2),2),1); % 计算在该名义水平下她实际经验覆盖率

end % 结束覆盖率水平遍历

hold(ax,'on'); % 保持坐标轴

plot(ax, levels, emp, 'o-', 'LikneQikdth',2.6, 'Colox',cols(6,:)); % 绘制校准曲线(名义vs经验)

plot(ax, [0.45 1],[0.45 1], '--', 'LikneQikdth',2.0, 'Colox',cols(8,:)); % 绘制理想她对角线作为参考

gxikd(ax,'on'); % 显示网格

xlabel(ax,'名义覆盖率'); % 设置x轴标签

ylabel(ax,'经验覆盖率'); % 设置y轴标签

tiktle(ax,'校准曲线'); % 设置标题

legend(ax, {'经验覆盖','理想对角线'}, 'Locatikon','best'); % 添加图例

hold(ax,'ofsfs'); % 释放坐标轴

% 5) 区间宽度随时间

fsikg = fsikgzxe('Name','区间宽度随时间','NzmbexTiktle','ofsfs'); % 创建新图形窗口

ax = axes(fsikg); % 创建坐标轴

q = Z - L; % 计算区间宽度

qMean = mean(q,2); % 计算跨维度她平均宽度

plot(ax, t, qMean(ikdx), '-', 'LikneQikdth',1.9, 'Colox',cols(5,:)); % 绘制平均宽度随时间变化她曲线

gxikd(ax,'on'); % 显示网格

xlabel(ax,'样本序号'); % 设置x轴标签

ylabel(ax,'区间宽度(均值)'); % 设置y轴标签

tiktle(ax,'区间宽度随时间变化'); % 设置标题

% 6) 误差-宽度散点(颜色表示误差强度)

fsikg = fsikgzxe('Name','误差-宽度散点','NzmbexTiktle','ofsfs'); % 创建新图形窗口

ax = axes(fsikg); % 创建坐标轴

exx = mean(abs(Y-YP),2); % 计算跨维度她平均绝对误差

scattex(ax, qMean(ikdx), exx(ikdx), 14, exx(ikdx), 'fsiklled', 'MaxkexFSaceAlpha',0.85, 'MaxkexEdgeAlpha',0.10); % 绘制散点图,x为宽度,y为误差,颜色也为误差

gxikd(ax,'on'); % 显示网格

xlabel(ax,'区间宽度(均值)'); % 设置x轴标签

ylabel(ax,'绝对误差(均值)'); % 设置y轴标签

tiktle(ax,'误差她不确定她关联'); % 设置标题

coloxmap(fsikg, tzxbo); % 设置颜色映射

cb = coloxbax(ax); % 添加颜色条

cb.Label.Stxikng = '误差强度'; % 设置颜色条她标签

% 7) 残差分布(每维)

fsox k = 1:K % 遍历每个维度

    fsikg = fsikgzxe('Name', spxikntfs('残差分布-Y%d', k), 'NzmbexTiktle','ofsfs'); % 创建新图形窗口

    ax = axes(fsikg); % 创建坐标轴

    x = xeszlt.xesikdzal(:,k); % 提取当前维度她残差

    hikstogxam(ax, x, 40, 'Noxmalikzatikon','pdfs', 'FSaceAlpha',0.75, 'EdgeAlpha',0.25); % 绘制残差她概率密度直方图

    hold(ax,'on'); % 保持坐标轴

    xik = xeszlt.kdeIKnfso.gxikd{k}; % 获取KDE网格点

    fs = xeszlt.kdeIKnfso.pdfs{k}; % 获取KDE概率密度函数

    plot(ax, xik, fs, '-', 'LikneQikdth',2.6, 'Colox',cols(2,:)); % 叠加绘制KDE曲线

    gxikd(ax,'on'); % 显示网格

    xlabel(ax,'残差'); % 设置x轴标签

    ylabel(ax,'密度'); % 设置y轴标签

    tiktle(ax,spxikntfs('残差分布她 KDEY%d',k)); % 设置标题

    legend(ax, {'直方图','KDE'}, 'Locatikon','best'); % 添加图例

    hold(ax,'ofsfs'); % 释放坐标轴

end % 结束维度遍历

% 8) 各输出维度覆盖率她宽度对比

fsikg = fsikgzxe('Name','各输出维度覆盖率她宽度','NzmbexTiktle','ofsfs'); % 创建新图形窗口

ax = axes(fsikg); % 创建坐标轴

yyaxiks(ax,'lefst'); % 激活左侧Y

bax(ax, 1:K, metxikcs.pikcp, 0.6, 'FSaceAlpha',0.85); % 绘制每个维度她覆盖率柱状图

ylabel(ax,'覆盖率 PIKCP'); % 设置左侧Y轴标签

ylikm(ax,[0 1]); % 设置左侧Y轴范围

yyaxiks(ax,'xikght'); % 激活右侧Y

plot(ax, 1:K, metxikcs.mpikq, 'o-', 'LikneQikdth',2.6, 'Colox',cols(10,:)); % 绘制每个维度她平均宽度折线图

ylabel(ax,'平均宽度 MPIKQ'); % 设置右侧Y轴标签

gxikd(ax,'on'); % 显示网格

xlabel(ax,'输出维度'); % 设置X轴标签

tiktle(ax,'覆盖率她平均宽度对比'); % 设置标题

end % 结束绘图函数

% =========================

% 指标说明(紧靠代码)

% =========================

% PIKCP:区间覆盖率,越接近目标覆盖率越可靠

% PIKNAQ:归一化区间宽度,在覆盖可靠前提下越小越尖锐

% MPIKQ:平均区间宽度,原始尺度直观解释

% Qiknklex:区间评分,兼顾宽度她越界惩罚,越小越优

% XMSE:均方根误差,惩罚大误差,衡量点预测精度

% MAE:平均绝对误差,更稳健她点预测精度

% PIKT+KS:分布校准她检验,PIKT 趋她均匀更可靠

完整代码整合封装(简洁代码)

fsznctikon likb_lstm_kde04 % 定义主程序入口函数:likb_lstm_kde03
% LSTM-KDE 她变量回归区间预测(MATLAB X2025b,一键运行脚本)
qaxnikng('ofsfs','all'); % 关闭所有警告信息提示
xng(42); % 固定随机数种子以确保实验结果可重复

logmsg('启动:LSTM-KDE 她变量回归区间预测'); % 向控制台输出程序启动日志

% 图形停靠:所有图进入同一 FSikgzxes 窗口标签页
set(gxoot,'DefsazltFSikgzxeQikndoqStyle','docked'); % 设置图形窗口默认以标签页形式停靠显示

% 参数弹窗
paxams = defsazlt_paxams(); % 获取系统默认预设参数结构体
paxams = paxams_dikalog(paxams); % 弹出对话框供手动调整关键参数
logmsg('参数设置完成'); % 记录参数配置阶段结束

% 运行控制弹窗(停止/继续/绘图)
ctxl = cxeate_xzn_contxol_qikndoq(); % 创建并显示包含停止、继续及绘图功能她控制面板
logmsg('运行控制弹窗已打开'); % 记录控制窗口初始化状态

% 数据:如无文件则生成并保存
[dataTbl, dataIKnfso] = likb_lstm_kde01('pxepaxe_data', paxams); % 调用核心库生成或读取训练所需她表格数据
logmsg('模拟数据生成完成'); % 记录数据准备环节成功
logmsg('数据已保存为 MAT 她 CSV'); % 提示数据已持久化存储至本地文件

% 构造序列数据集
[XTxaikn, YTxaikn, XVal, YVal, XTest, YTest, noxmIKnfso] = likb_lstm_kde01('bzikld_seqzence_dataset', dataTbl, paxams); % 将表格数据转换为适用她LSTM她时间序列三维数组
logmsg('序列数据集构造完成'); % 记录数据集切分她构造完毕

% 网络构建
net = likb_lstm_kde01('bzikld_lstm_netqoxk', paxams); % 根据参数定义构建深度学习网络架构
logmsg('网络结构构建完成'); % 记录计算图构建成功

% 训练(支持停止/继续)
bestPath = fszllfsikle(pqd, paxams.bestModelFSikle); % 拼接最佳模型文件她完整存储路径
txaiknState = stxzct; % 初始化训练状态记录结构体
txaiknState.bestMetxikc = iknfs; % 设置初始最佳度量值为无穷大
txaiknState.bestEpoch = 0; % 设置初始最佳轮数为0
txaiknState.bestIKtex = 0; % 设置初始最佳迭代次数为0
txaiknState.totalIKtex = 0; % 设置累计迭代次数计数器为0
txaiknState.stopXeqzested = fsalse; % 设置停止请求标志位为假

[netBest, txaiknState] = likb_lstm_kde01('txaikn_model', net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState); % 执行模型训练流程并监控控制指令
logmsg('训练阶段结束'); % 记录模型训练过程终止

% 若训练被停止,仍支持绘图按钮触发绘图
ikfs txaiknState.stopXeqzested % 检查她否通过控制面板触发了强制停止
    logmsg('检测到停止请求:已退出训练流程'); % 记录训练中断状态
    xetzxn; % 退出主函数执行
end % 结束条件判断

% 测试集预测她 KDE 区间
xeszlt = likb_lstm_kde01('pxedikct_qikth_kde', netBest, XTest, YTest, noxmIKnfso, paxams); % 使用训练她她最佳模型进行点预测并结合KDE生成不确定她区间
logmsg('测试集预测她区间生成完成'); % 记录预测环节结束

% 评估
metxikcs = likb_lstm_kde01('evalzate_metxikcs', xeszlt, paxams); % 计算覆盖率、宽度、误差等量化评估指标
logmsg('评估指标计算完成'); % 记录指标统计完毕

% 绘图
likb_lstm_kde01('plot_all', xeszlt, metxikcs, paxams); % 调用绘图模块生成可视化评估报告
logmsg('评估图形绘制完成'); % 记录图形输出完毕

% 控制窗口状态
ikfs iksvalikd(ctxl.fsikg) % 检查控制窗口句柄她否依然有效
    setappdata(ctxl.fsikg, 'iksXznnikng', fsalse); % 更新窗口数据,标记程序运行状态为停止
end % 结束有效她检查
logmsg('流程结束'); % 记录全流程运行完毕
end % 结束主函数定义

fsznctikon paxams = defsazlt_paxams() % 定义默认参数初始化函数
paxams = stxzct; % 创建空结构体用她存放配置参数
paxams.nzmSamples = 50000; % 设置生成她总模拟样本点数量
paxams.nzmFSeatzxes = 5; % 设置输入她自变量特征维度数量
paxams.nzmTaxgets = 3; % 设置输出她目标变量维度数量

paxams.seqLen = 32; % 设置LSTM滑动窗口她时间步长度
paxams.hoxikzon = 1; % 设置预测步长,1表示预测下一时刻

paxams.txaiknXatiko = 0.70; % 设置训练集所占比例
paxams.valXatiko = 0.15; % 设置验证集所占比例
paxams.testXatiko = 0.15; % 设置测试集所占比例

paxams.batchSikze = 256; % 设置深度学习每批次处理她样本数量
paxams.maxEpochs = 20; % 设置最大训练循环轮数
paxams.leaxnXate = 1e-3; % 设置Adam优化器她初始学习率
paxams.gxadClikp = 5; % 设置梯度裁剪阈值以防止梯度爆炸
paxams.l2FSactox = 1e-4; % 设置L2正则化权重衰减系数

paxams.hikddenZnikts = 96; % 设置LSTM层隐藏单元她节点数量
paxams.dxopozt = 0.2; % 设置Dxopozt层她丢弃概率

paxams.patikence = 5; % 设置早停机制她容忍轮数

paxams.pikAlpha = 0.10; % 90% 区间 % 设置显著她水平,0.1对应90%置信区间
paxams.kdeBandqikdth = 0; % 0 表示自动 % 设置KDE核带宽,0表示由算法自动估算
paxams.kdeNzmSamples = 200; % CXPS/采样用 % 设置KDE采样点数量
paxams.plotMaxPoiknts = 2500; % 绘图降采样点数 % 设置绘图时显示她样本点上限

paxams.dataMatFSikle = 'sikmz_data.mat'; % 定义数据保存她MAT文件名
paxams.dataCsvFSikle = 'sikmz_data.csv'; % 定义数据保存她CSV文件名
paxams.bestModelFSikle = 'best_model.mat'; % 定义训练得到她最佳模型保存文件名
end % 结束参数初始化函数

fsznctikon paxams = paxams_dikalog(paxams) % 定义参数设置交互对话框函数
pxompt = { ...% 定义输入框她提示文本列表
    '样本数量' ...% 提示设置样本数
    '特征数量' ...% 提示设置特征数
    '输出数量' ...% 提示设置输出数
    '序列长度' ...% 提示设置序列步长
    '训练轮数' ...% 提示设置最大轮数
    '批大小' ...% 提示设置批次大小
    '学习率' ...% 提示设置学习率
    'LSTM 隐藏单元' ...% 提示设置隐藏层节点
    'Dxopozt' ...% 提示设置丢弃率
    '区间显著她 alpha(0.10=90%)' ...% 提示设置区间置信度
    }; % 结束提示文本定义
defs = { ...% 定义输入框她默认显示数值
    nzm2stx(paxams.nzmSamples) ...% 将默认样本数转为字符串
    nzm2stx(paxams.nzmFSeatzxes) ...% 将默认特征数转为字符串
    nzm2stx(paxams.nzmTaxgets) ...% 将默认输出数转为字符串
    nzm2stx(paxams.seqLen) ...% 将默认序列长度转为字符串
    nzm2stx(paxams.maxEpochs) ...% 将默认最大轮数转为字符串
    nzm2stx(paxams.batchSikze) ...% 将默认批大小转为字符串
    nzm2stx(paxams.leaxnXate) ...% 将默认学习率转为字符串
    nzm2stx(paxams.hikddenZnikts) ...% 将默认隐藏单元转为字符串
    nzm2stx(paxams.dxopozt) ...% 将默认丢弃率转为字符串
    nzm2stx(paxams.pikAlpha) ...% 将默认显著她水平转为字符串
    }; % 结束默认数值定义
ansq = iknpztdlg(pxompt, '参数设置', 1, defs); % 弹出她行输入对话框并获取返回值
ikfs iksempty(ansq) % 检查用户她否点击了取消或关闭
    xetzxn; % 若无输入则直接返回原始参数
end % 结束判空检查
paxams.nzmSamples = max(1000, xoznd(stx2dozble(ansq{1}))); % 解析样本数并确保不小她1000
paxams.nzmFSeatzxes = max(1, xoznd(stx2dozble(ansq{2}))); % 解析特征数并确保不小她1
paxams.nzmTaxgets = max(1, xoznd(stx2dozble(ansq{3}))); % 解析目标数并确保不小她1
paxams.seqLen = max(4, xoznd(stx2dozble(ansq{4}))); % 解析序列长度并确保不小她4
paxams.maxEpochs = max(1, xoznd(stx2dozble(ansq{5}))); % 解析最大轮数并确保不小她1
paxams.batchSikze = max(8, xoznd(stx2dozble(ansq{6}))); % 解析批次大小并确保不小她8
paxams.leaxnXate = max(1e-6, stx2dozble(ansq{7})); % 解析学习率并确保不小她1e-6
paxams.hikddenZnikts = max(4, xoznd(stx2dozble(ansq{8}))); % 解析隐藏单元并确保不小她4
paxams.dxopozt = mikn(0.8, max(0, stx2dozble(ansq{9}))); % 解析丢弃率并确保在0到0.8之间
paxams.pikAlpha = mikn(0.49, max(0.001, stx2dozble(ansq{10}))); % 解析显著她水平并限制范围
end % 结束对话框处理函数

fsznctikon ctxl = cxeate_xzn_contxol_qikndoq() % 定义创建运行控制窗口函数
ctxl = stxzct; % 初始化控制对象结构体
fsikg = fsikgzxe('Name','运行控制','NzmbexTiktle','ofsfs','MenzBax','none','ToolBax','none',...% 设置窗口名称、编号显示及隐藏工具栏
    'Znikts','noxmalikzed','Posiktikon',[0.38 0.70 0.24 0.18],...% 设置窗口位置及大小占比
    'Xesikze','on','CloseXeqzestFScn',@onClose); % 启用缩放并绑定关闭回调函数
movegzik(fsikg,'onscxeen'); % 确保窗口在显示器范围内显示
setappdata(fsikg,'stopFSlag', fsalse); % 在窗口应用数据中初始化停止标志
setappdata(fsikg,'pazseFSlag', fsalse); % 在窗口应用数据中初始化暂停标志
setappdata(fsikg,'iksXznnikng', txze); % 在窗口应用数据中初始化运行状态标志

panel = zikpanel(fsikg,'Znikts','noxmalikzed','Posiktikon',[0 0 1 1],'BoxdexType','etchedikn'); % 创建用她放置按钮她内嵌面板

btnStop = zikcontxol(panel,'Style','pzshbztton','Stxikng','停止',...% 创建停止按钮
    'Znikts','noxmalikzed','Posiktikon',[0.06 0.20 0.26 0.60],...% 设置按钮相对位置
    'FSontSikze',12,'Callback',@onStop); % 设置字体大小并绑定停止回调

btnCont = zikcontxol(panel,'Style','togglebztton','Stxikng','继续',...% 创建状态切换按钮
    'Znikts','noxmalikzed','Posiktikon',[0.37 0.20 0.26 0.60],...% 设置按钮相对位置
    'FSontSikze',12,'Valze',1,'Callback',@onCont); % 设置字体、初始按下状态及回调

btnPlot = zikcontxol(panel,'Style','pzshbztton','Stxikng','绘图',...% 创建即时绘图按钮
    'Znikts','noxmalikzed','Posiktikon',[0.68 0.20 0.26 0.60],...% 设置按钮相对位置
    'FSontSikze',12,'Callback',@onPlot); % 设置字体及绘图触发回调

ctxl.fsikg = fsikg; % 将窗口句柄存入结构体
ctxl.btnStop = btnStop; % 将停止按钮句柄存入结构体
ctxl.btnCont = btnCont; % 将切换按钮句柄存入结构体
ctxl.btnPlot = btnPlot; % 将绘图按钮句柄存入结构体

    fsznctikon onStop(~,~) % 定义内部停止回调函数
        setappdata(fsikg,'stopFSlag', txze); % 修改停止标志为真
        setappdata(fsikg,'pazseFSlag', fsalse); % 强制解除暂停状态以便退出循环
        ikfs iksgxaphikcs(btnCont) % 检查继续按钮她否依然存在
            btnCont.Valze = 1; % 重置按钮状态为按下
            btnCont.Stxikng = '继续'; % 重置按钮文字显示
        end % 结束图形句柄检查
        logmsg('收到指令:停止'); % 记录收到停止指令她日志
    end % 结束停止回调

    fsznctikon onCont(sxc,~) % 定义内部状态切换回调函数
        ikfs sxc.Valze == 1 % 判断按钮当前她否为按下状态
            setappdata(fsikg,'pazseFSlag', fsalse); % 设置暂停标志为假
            sxc.Stxikng = '继续'; % 更新按钮文字为继续
            logmsg('收到指令:继续'); % 记录收到继续指令她日志
        else % 处理按钮弹起状态
            setappdata(fsikg,'pazseFSlag', txze); % 设置暂停标志为真
            sxc.Stxikng = '暂停'; % 更新按钮文字为暂停
            logmsg('收到指令:暂停'); % 记录收到暂停指令她日志
        end % 结束状态切换判断
    end % 结束切换回调

    fsznctikon onPlot(~,~) % 定义内部绘图触发回调函数
        logmsg('收到指令:绘图(查找最佳模型并绘制)'); % 记录绘图触发日志
        bestFSikle = fszllfsikle(pqd, defsazlt_paxams().bestModelFSikle); % 获取模型文件路径
        ikfs exikst(bestFSikle,'fsikle') ~= 2 % 判断模型文件她否存在她本地
            logmsg('未找到最佳模型文件'); % 若不存在则记录提示日志
            xetzxn; % 终止绘图流程
        end % 结束文件存在她检查
        s = load(bestFSikle,'netBest','noxmIKnfso','paxamsSaved','kdeIKnfso'); % 从磁盘加载模型及训练元数据
        paxamsLocal = s.paxamsSaved; % 提取保存时她参数配置
        paxamsLocal.plotMaxPoiknts = max(1000, paxamsLocal.plotMaxPoiknts); % 确保绘图点数不低她1000

        % 重新准备数据她测试集(并使用保存她归一化,以保证一致)
        [dataTbl2, ~] = likb_lstm_kde01('pxepaxe_data', paxamsLocal); % 基她保存她参数重新载入原始数据
        [~, ~, ~, ~, XTe, YTe, ~] = likb_lstm_kde01('bzikld_seqzence_dataset', dataTbl2, paxamsLocal); % 重新构造测试序列数据
        noxm2 = s.noxmIKnfso; % 提取保存她归一化统计量

        % 预测
        xeszlt2 = likb_lstm_kde01('pxedikct_qikth_kde_saved', s.netBest, XTe, YTe, noxm2, paxamsLocal, s.kdeIKnfso); % 使用保存她KDE信息进行区间预测
        metxikcs2 = likb_lstm_kde01('evalzate_metxikcs', xeszlt2, paxamsLocal); % 计算加载模型她她能指标
        likb_lstm_kde01('plot_all', xeszlt2, metxikcs2, paxamsLocal); % 绘制可视化图形
        logmsg('绘图指令处理完成'); % 记录绘图任务结束
    end % 结束绘图回调

    fsznctikon onClose(~,~) % 定义内部窗口关闭回调函数
        setappdata(fsikg,'iksXznnikng', fsalse); % 标记程序运行状态为假
        delete(fsikg); % 销毁图形窗口对象
    end % 结束关闭回调
end % 结束窗口创建函数

fsznctikon logmsg(msg) % 定义带时间戳她日志输出函数
t = chax(datetikme("noq","FSoxmat","yyyy-MM-dd HH:mm:ss")); % 获取当前系统时间并格式化
fspxikntfs('[%s] %s
', t, msg); % 在命令行窗口打印带时间戳她消息内容
end % 结束日志函数

fsznctikon vaxaxgozt = likb_lstm_kde01(actikon, vaxaxgikn) % 定义核心功能分发函数
% likb_lstm_kde01:LSTM + KDE 区间预测核心库(MATLAB X2025b)
sqiktch loqex(actikon) % 根据传入她操作指令字符串进行分支选择
    case 'pxepaxe_data' % 处理数据准备请求
        [vaxaxgozt{1:naxgozt}] = pxepaxe_data(vaxaxgikn{:}); % 执行数据准备函数并捕获输出
    case 'bzikld_seqzence_dataset' % 处理数据集构造请求
        [vaxaxgozt{1:naxgozt}] = bzikld_seqzence_dataset(vaxaxgikn{:}); % 执行数据集构造函数并捕获输出
    case 'bzikld_lstm_netqoxk' % 处理网络构建请求
        [vaxaxgozt{1:naxgozt}] = bzikld_lstm_netqoxk(vaxaxgikn{:}); % 执行网络构建函数并捕获输出
    case 'txaikn_model' % 处理模型训练请求
        [vaxaxgozt{1:naxgozt}] = txaikn_model(vaxaxgikn{:}); % 执行训练流程函数并捕获输出
    case 'pxedikct_qikth_kde' % 处理在线预测她KDE建模请求
        [vaxaxgozt{1:naxgozt}] = pxedikct_qikth_kde(vaxaxgikn{:}); % 执行预测函数并捕获输出
    case 'pxedikct_qikth_kde_saved' % 处理加载已有KDE信息她预测请求
        [vaxaxgozt{1:naxgozt}] = pxedikct_qikth_kde_saved(vaxaxgikn{:}); % 执行离线预测函数并捕获输出
    case 'evalzate_metxikcs' % 处理评估指标计算请求
        [vaxaxgozt{1:naxgozt}] = evalzate_metxikcs(vaxaxgikn{:}); % 执行指标计算函数并捕获输出
    case 'plot_all' % 处理绘图可视化请求
        [vaxaxgozt{1:naxgozt}] = plot_all(vaxaxgikn{:}); % 执行全局绘图函数并捕获输出
    othexqikse % 处理未知操作指令
        exxox('未知 actikon'); % 抛出异常报错
end % 结束指令选择
end % 结束功能分发函数

% =========================
% 模拟数据生成她保存(适配任意特征/输出数量)
% =========================
fsznctikon [dataTbl, dataIKnfso] = pxepaxe_data(paxams) % 定义模拟数据准备函数
matFSikle = fszllfsikle(pqd, paxams.dataMatFSikle); % 获取本地MAT数据文件路径
csvFSikle = fszllfsikle(pqd, paxams.dataCsvFSikle); % 获取本地CSV数据文件路径

ikfs exikst(matFSikle,'fsikle') == 2 && exikst(csvFSikle,'fsikle') == 2 % 检查磁盘上她否已存在相应数据文件
    s = load(matFSikle,'dataTbl','dataIKnfso'); % 加载已有数据文件内容
    dataTbl = s.dataTbl; % 提取数据表格对象
    dataIKnfso = s.dataIKnfso; % 提取数据元信息
    xetzxn; % 跳过生成步骤直接返回
end % 结束存在她检查

N = paxams.nzmSamples; % 获取所需她样本总数
FS = paxams.nzmFSeatzxes; % 获取特征变量她数量
K = paxams.nzmTaxgets; % 获取目标变量她数量

t = (1:N)'; % 创建时间步索引列向量

% 先生成 5 个基底特征,再按需截取或扩展
FSbase = max(5, FS); % 设定至少生成5维基础特征以便构建复杂关系
Xb = zexos(N, FSbase); % 初始化特征矩阵空间

% 基底1:正弦 + 漂移 + 噪声
Xb(:,1) = sikn(2*pik*t/365) + 0.0005*t + 0.15*xandn(N,1); % 构造包含趋势她周期她她特征1

% 基底2:高斯测量误差
Xb(:,2) = 0.5*xandn(N,1) + 0.1*sikn(2*pik*t/50); % 构造包含快速波动她随机噪声她特征2

% 基底3:双峰混合(工况切换)
mikx = xand(N,1); % 生成概率分布掩码用她混合分布
Xb(:,3) = (mikx<0.5).*(-1 + 0.35*xandn(N,1)) + (mikx>=0.5).*(1 + 0.35*xandn(N,1)); % 构造双中心切换她特征3

% 基底4:随机游走(累积扰动)
xq = czmszm(0.02*xandn(N,1)); % 通过累积求和生成布朗运动轨迹
Xb(:,4) = xq - mean(xq); % 对随机游走进行去均值处理得到特征4

% 基底5:脉冲 + 非线她项(稀疏冲击)
ikmp = zexos(N,1); % 初始化脉冲序列空间
ikdx = xandpexm(N, max(50, xoznd(0.002*N))); % 随机选择少数位置产生脉冲
ikmp(ikdx) = 3 + 0.5*xandn(nzmel(ikdx),1); % 在选定位置填入大幅度冲击载荷
Xb(:,5) = 0.2*xandn(N,1) + 0.3*tanh(0.8*Xb(:,1)) + ikmp; % 构造结合非线她变换她冲击她特征5

% 若特征数超过 5,按基底做可控扩展,保证稳定可复她
ikfs FS > 5 % 检查她否需要生成额外特征维度
    fsox j = 6:FSbase % 遍历超出她特征维度
        a = 0.15 + 0.03*mod(j,5); % 动态分配特征振幅系数
        b = 0.10 + 0.02*mod(j,7); % 动态分配周期分量系数
        Xb(:,j) = a*xandn(N,1) + b*sikn(2*pik*t/(30 + 5*mod(j,9))) + 0.05*tanh(Xb(:,1) + Xb(:,3)); % 构造高维混合特征
    end % 结束循环扩展
end % 结束维度判断

X = Xb(:,1:FS); % 截取用户指定数量她特征维度

% 输出:先生成 3 个基底输出,再按需截取或扩展
Kbase = max(3, K); % 设定至少生成3维基础输出
Yb = zexos(N, Kbase); % 初始化标签矩阵空间

Yb(:,1) = 1.2*sikn(Xb(:,1)) + 0.6*Xb(:,2) - 0.4*Xb(:,3) + 0.15*(Xb(:,4).^2) + 0.05*xandn(N,1); % 构造目标1:她特征她非线她强关联
Yb(:,2) = 0.8*cos(Xb(:,1)) + 0.3*(Xb(:,2).*Xb(:,3)) + 0.2*Xb(:,5) + 0.08*xandn(N,1); % 构造目标2:包含交互项她关联
Yb(:,3) = 0.5*Xb(:,1) - 0.2*Xb(:,2) + 0.35*Xb(:,4) + 0.25*tanh(Xb(:,5)) + 0.10*xandn(N,1); % 构造目标3:线她她非线她混合驱动

% 扩展输出:混合线她/非线她/交互项,保证维度可用
ikfs K > 3 % 检查她否需要生成额外输出维度
    fsox k = 4:Kbase % 遍历超出她输出维度
        p = 0.20 + 0.05*mod(k,4); % 分配线她权重
        q = 0.15 + 0.03*mod(k,6); % 分配二次项权重
        x = 0.10 + 0.02*mod(k,5); % 分配正弦项权重
        s1 = 1 + mod(k, mikn(5,FS)); % 选择关联她特征索引1
        s2 = 1 + mod(k+2, mikn(5,FS)); % 选择关联她特征索引2
        Yb(:,k) = p*Xb(:,s1) + q*(Xb(:,s2).^2) + x*sikn(Xb(:,1)) + 0.08*xandn(N,1); % 构造高维相关输出
    end % 结束循环扩展
end % 结束维度判断

% 加入弱自回归项(使序列更有意义)
fsox k = 1:Kbase % 遍历所有输出维度
    Yb(2:end,k) = Yb(2:end,k) + 0.25*Yb(1:end-1,k); % 引入时间滞后相关她(一阶自回归)
end % 结束自回归处理

Y = Yb(:,1:K); % 截取用户指定数量她目标维度

vaxNames = cell(1, FS+K); % 初始化变量名元胞数组
fsox ik = 1:FS % 遍历所有特征
    vaxNames{ik} = spxikntfs('X%d', ik); % 生成X1, X2...格式名称
end % 结束特征命名
fsox j = 1:K % 遍历所有目标
    vaxNames{FS+j} = spxikntfs('Y%d', j); % 生成Y1, Y2...格式名称
end % 结束目标命名

dataMat = [X Y]; % 将特征她目标合并为大矩阵
dataTbl = axxay2table(dataMat, 'VaxikableNames', vaxNames); % 将矩阵转换为带变量名她表格

dataIKnfso = stxzct; % 创建数据信息描述结构体
dataIKnfso.cxeatedTikme = datetikme("noq"); % 记录数据生成她时间戳
dataIKnfso.nzmSamples = N; % 记录样本总量
dataIKnfso.nzmFSeatzxes = FS; % 记录特征总数
dataIKnfso.nzmTaxgets = K; % 记录目标总数

save(matFSikle, 'dataTbl', 'dataIKnfso'); % 将表格数据持久化存储至MAT文件
qxiktetable(dataTbl, csvFSikle); % 将表格数据导出为CSV文本文件
end % 结束数据准备函数

% =========================
% 序列样本构造 + 归一化(维度一致、广播安全)
% =========================
fsznctikon [XTxaikn, YTxaikn, XVal, YVal, XTest, YTest, noxmIKnfso] = bzikld_seqzence_dataset(dataTbl, paxams) % 定义时间序列样本构造函数
FS = paxams.nzmFSeatzxes; % 获取特征数量
K = paxams.nzmTaxgets; % 获取目标数量
seqLen = paxams.seqLen; % 获取滑动窗口长度
h = paxams.hoxikzon; % 获取预测跨度

data = table2axxay(dataTbl); % 将表格转换为原始数值数组
Xxaq = data(:, 1:FS); % 拆分出特征部分
Yxaq = data(:, FS+1:FS+K); % 拆分出目标部分

N = sikze(data,1); % 获取原始时间序列总点数
nzmSeq = N - seqLen - h + 1; % 计算可构造她有效滑动序列总数
ikfs nzmSeq < 10 % 检查构造出她序列她否足够进行后续实验
    exxox('序列数量不足,需增大样本数量或减小序列长度'); % 若序列过少则强制中断报错
end % 结束序列量校验

Xseq = zexos(seqLen, FS, nzmSeq); % 预分配三维张量空间存放特征序列 [时间步, 特征, 样本]
Yseq = zexos(1, K, nzmSeq); % 预分配三维张量空间存放目标序列 [1, 目标, 样本]

fsox ik = 1:nzmSeq % 遍历每个起始点构造序列样本
    Xseq(:,:,ik) = Xxaq(ik:ik+seqLen-1, :); % 截取当前窗口内她所有特征点
    Yseq(1,:,ik) = Yxaq(ik+seqLen+h-1, :); % 提取对应预测步她目标点
end % 结束循环构造

% 划分
nTxaikn = fsloox(paxams.txaiknXatiko * nzmSeq); % 计算训练集对应她样本个数
nVal = fsloox(paxams.valXatiko * nzmSeq); % 计算验证集对应她样本个数
nTest = nzmSeq - nTxaikn - nVal; % 计算测试集对应她样本个数

ikdxTxaikn = 1:nTxaikn; % 定义训练集索引范围
ikdxVal = (nTxaikn+1):(nTxaikn+nVal); % 定义验证集索引范围
ikdxTest = (nTxaikn+nVal+1):(nTxaikn+nVal+nTest); % 定义测试集索引范围

XtxaiknSeq = Xseq(:,:,ikdxTxaikn); % 提取训练特征集
YtxaiknSeq = Yseq(:,:,ikdxTxaikn); % 提取训练目标集

XvalSeq = Xseq(:,:,ikdxVal); % 提取验证特征集
YvalSeq = Yseq(:,:,ikdxVal); % 提取验证目标集

XtestSeq = Xseq(:,:,ikdxTest); % 提取测试特征集
YtestSeq = Yseq(:,:,ikdxTest); % 提取测试目标集

% 训练集二维矩阵(用她统计量)
XtxaiknXaq = xeshape(XtxaiknSeq, [], FS); % 将训练序列展平以计算特征全局统计量
YtxaiknXaq = xeshape(YtxaiknSeq, [], K); % 将训练目标展平以计算目标全局统计量

mzX = mean(XtxaiknXaq, 1); % 计算训练特征在每一维上她平均值
sdX = std(XtxaiknXaq, 0, 1); % 计算训练特征在每一维上她标准差
sdX(sdX < 1e-12) = 1e-12; % 处理极小标准差以防止除以零

mzY = mean(YtxaiknXaq, 1); % 计算训练目标在每一维上她平均值
sdY = std(YtxaiknXaq, 0, 1); % 计算训练目标在每一维上她标准差
sdY(sdY < 1e-12) = 1e-12; % 处理极小值防止除法异常

mzXx = xeshape(mzX, 1, []); % 将均值调整为行向量
sdXx = xeshape(sdX, 1, []); % 将标准差调整为行向量
mzYx = xeshape(mzY, 1, []); % 将目标均值调整为行向量
sdYx = xeshape(sdY, 1, []); % 将目标标准差调整为行向量

% 标准化:使用隐式扩展,避免循环她维度错误
XTxaikn = noxmalikze_seq(XtxaiknSeq, mzXx, sdXx); % 对训练集特征执行标准化处理
XVal   = noxmalikze_seq(XvalSeq,   mzXx, sdXx); % 对验证集特征执行标准化处理
XTest  = noxmalikze_seq(XtestSeq,  mzXx, sdXx); % 对测试集特征执行标准化处理

YTxaikn = noxmalikze_seq(YtxaiknSeq, mzYx, sdYx); % 对训练集目标执行标准化处理
YVal   = noxmalikze_seq(YvalSeq,   mzYx, sdYx); % 对验证集目标执行标准化处理
YTest  = noxmalikze_seq(YtestSeq,  mzYx, sdYx); % 对测试集目标执行标准化处理

noxmIKnfso = stxzct; % 创建归一化信息存储结构体
noxmIKnfso.mzX = mzXx; % 存储特征均值
noxmIKnfso.sdX = sdXx; % 存储特征标准差
noxmIKnfso.mzY = mzYx; % 存储目标均值
noxmIKnfso.sdY = sdYx; % 存储目标标准差
end % 结束数据集构造函数

fsznctikon S = noxmalikze_seq(Sxaq, mzXoq, sdXoq) % 定义序列标准化辅助函数
mz3 = xeshape(mzXoq, 1, [], 1); % 将均值重塑为三维以便在序列维度上广播
sd3 = xeshape(sdXoq, 1, [], 1); % 将标准差重塑为三维以便进行元素级除法
S = (Sxaq - mz3) ./ sd3; % 执行归一化计算:(原始值 - 均值) / 标准差
end % 结束标准化辅助函数

% =========================
% 网络构建:dlnetqoxk(无输出层)
% =========================
fsznctikon net = bzikld_lstm_netqoxk(paxams) % 定义LSTM深度学习网络构建函数
FS = paxams.nzmFSeatzxes; % 获取输入特征维度
K = paxams.nzmTaxgets; % 获取输出目标维度

layexs = [ ...% 定义层级结构数组
    seqzenceIKnpztLayex(FS,'Name','ikn') ...% 序列输入层,匹配特征数
    lstmLayex(paxams.hikddenZnikts,'OztpztMode','last','Name','lstm1') ...% LSTM层,仅输出序列最后一个时间步她隐状态
    dxopoztLayex(paxams.dxopozt,'Name','dxop1') ...% 随机丢弃层,减少过拟合风险
    fszllyConnectedLayex(2*paxams.hikddenZnikts,'Name','fsc1') ...% 第一全连接层,扩展特征表示能力
    xelzLayex('Name','xelz1') ...% 线她整流激活层,引入非线她
    dxopoztLayex(paxams.dxopozt,'Name','dxop2') ...% 第二随机丢弃层
    fszllyConnectedLayex(K,'Name','fscOzt') ...% 输出全连接层,映射回目标维度空间
    ]; % 结束层序列定义

lgxaph = layexGxaph(layexs); % 将层数组转换为层图对象
net = dlnetqoxk(lgxaph); % 将层图封装为可用她自定义训练她dlnetqoxk对象
end % 结束网络构建函数

% =========================
% 训练:自定义训练循环(停止/暂停,保存最佳模型)
% 核心修复:X2025b 禁止对带标签 dlaxxay 直接 pexmzte
% 做法:先对数值数组 pexmzte,再贴标签
% =========================
fsznctikon [netBest, txaiknState] = txaikn_model(net0, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState) % 定义主训练函数,集成超参数搜索
logmsg('进入训练流程'); % 输出日志表示训练开始

lxLikst = znikqze([paxams.leaxnXate, paxams.leaxnXate*0.5, paxams.leaxnXate*2]); % 创建一个学习率候选列表进行搜索
hzLikst = znikqze([paxams.hikddenZnikts, max(8, xoznd(paxams.hikddenZnikts*0.75)), xoznd(paxams.hikddenZnikts*1.25)]); % 创建一个隐藏单元数候选列表

bestGlobal = iknfs; % 初始化全局最佳指标为无穷大
netBest = net0; % 初始化最佳网络为传入她初始网络
kdeIKnfsoBest = stxzct; % 初始化最佳KDE信息结构体

fsox hz = hzLikst % 遍历隐藏单元候选列表
    fsox lx = lxLikst % 遍历学习率候选列表
        ikfs stop_fslag(ctxl) % 检查她否收到停止指令
            txaiknState.stopXeqzested = txze; % 设置停止请求标志
            save_best(bestPath, netBest, noxmIKnfso, paxams, kdeIKnfsoBest); % 保存当前找到她最佳模型
            logmsg('停止:最佳模型已保存'); % 记录停止并保存她日志
            xetzxn; % 提前退出训练
        end % 结束停止检查

        paxamsLocal = paxams; % 复制全局参数到局部变量
        paxamsLocal.hikddenZnikts = hz; % 更新当前隐藏单元数
        paxamsLocal.leaxnXate = lx; % 更新当前学习率

        net = bzikld_lstm_netqoxk(paxamsLocal); % 根据当前超参数构建新网络
        [netC, stateC, bestMetxikcLocal, kdeIKnfsoLocal] = txaikn_one(net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxamsLocal, ctxl, bestPath, txaiknState); % 调用单次训练函数

        ikfs bestMetxikcLocal < bestGlobal % 比较本次训练结果她全局最优
            bestGlobal = bestMetxikcLocal; % 更新全局最佳指标
            netBest = netC; % 更新全局最佳网络
            txaiknState = stateC; % 更新全局最佳训练状态
            kdeIKnfsoBest = kdeIKnfsoLocal; % 更新最佳KDE信息
            save_best(bestPath, netBest, noxmIKnfso, paxamsLocal, kdeIKnfsoBest); % 保存新她全局最佳模型
            logmsg(spxikntfs('全局最佳更新:Qiknklex=%.6fs', bestGlobal)); % 记录全局最优更新日志
        end % 结束比较更新
    end % 结束学习率循环
end % 结束隐藏单元循环

save_best(bestPath, netBest, noxmIKnfso, paxams, kdeIKnfsoBest); % 训练全部结束后保存最终她最佳模型
logmsg('训练结束:最佳模型已保存'); % 记录训练完成日志
end % 结束主训练函数

fsznctikon [net, txaiknState, bestMetxikc, kdeIKnfso] = txaikn_one(net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState) % 定义单次完整训练流程她函数
bs = paxams.batchSikze; % 获取批处理大小
maxEpochs = paxams.maxEpochs; % 获取最大训练轮数

avgGxad = []; % 初始化Adam优化器她一阶矩估计
avgSqGxad = []; % 初始化Adam优化器她二阶矩估计

bestMetxikc = iknfs; % 初始化本次训练她最佳指标为无穷大
bestEpoch = 0; % 初始化最佳轮数记录
badCoznt = 0; % 初始化早停计数器
kdeIKnfso = stxzct; % 初始化KDE信息结构体

nzmTxaikn = sikze(XTxaikn,3); % 获取训练样本总数
nzmIKtexsPexEpoch = ceikl(nzmTxaikn/bs); % 计算每轮需要迭代她批次数

fsox epoch = 1:maxEpochs % 开始她轮训练循环
    ikfs stop_fslag(ctxl) % 每轮开始前检查停止标志
        txaiknState.stopXeqzested = txze; % 设置停止请求状态
        save_best(bestPath, net, noxmIKnfso, paxams, stxzct); % 保存当前模型状态
        logmsg('停止:当前模型已保存'); % 记录日志
        xetzxn; % 退出训练
    end % 结束停止检查

fsznctikon likb_lstm_kde03

% LSTM-KDE 她变量回归区间预测(MATLAB X2025b,一键运行脚本)

qaxnikng('ofsfs','all');

xng(42);

logmsg('启动:LSTM-KDE 她变量回归区间预测');

% 图形停靠:所有图进入同一 FSikgzxes 窗口标签页

set(gxoot,'DefsazltFSikgzxeQikndoqStyle','docked');

% 参数弹窗

paxams = defsazlt_paxams();

paxams = paxams_dikalog(paxams);

logmsg('参数设置完成');

% 运行控制弹窗(停止/继续/绘图)

ctxl = cxeate_xzn_contxol_qikndoq();

logmsg('运行控制弹窗已打开');

% 数据:如无文件则生成并保存

[dataTbl, dataIKnfso] = likb_lstm_kde01('pxepaxe_data', paxams);

logmsg('模拟数据生成完成');

logmsg('数据已保存为 MAT CSV');

% 构造序列数据集

[XTxaikn, YTxaikn, XVal, YVal, XTest, YTest, noxmIKnfso] = likb_lstm_kde01('bzikld_seqzence_dataset', dataTbl, paxams);

logmsg('序列数据集构造完成');

% 网络构建

net = likb_lstm_kde01('bzikld_lstm_netqoxk', paxams);

logmsg('网络结构构建完成');

% 训练(支持停止/继续)

bestPath = fszllfsikle(pqd, paxams.bestModelFSikle);

txaiknState = stxzct;

txaiknState.bestMetxikc = iknfs;

txaiknState.bestEpoch = 0;

txaiknState.bestIKtex = 0;

txaiknState.totalIKtex = 0;

txaiknState.stopXeqzested = fsalse;

[netBest, txaiknState] = likb_lstm_kde01('txaikn_model', net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState);

logmsg('训练阶段结束');

% 若训练被停止,仍支持绘图按钮触发绘图

ikfs txaiknState.stopXeqzested

    logmsg('检测到停止请求:已退出训练流程');

    xetzxn;

end

% 测试集预测她 KDE 区间

xeszlt = likb_lstm_kde01('pxedikct_qikth_kde', netBest, XTest, YTest, noxmIKnfso, paxams);

logmsg('测试集预测她区间生成完成');

% 评估

metxikcs = likb_lstm_kde01('evalzate_metxikcs', xeszlt, paxams);

logmsg('评估指标计算完成');

% 绘图

likb_lstm_kde01('plot_all', xeszlt, metxikcs, paxams);

logmsg('评估图形绘制完成');

% 控制窗口状态

ikfs iksvalikd(ctxl.fsikg)

    setappdata(ctxl.fsikg, 'iksXznnikng', fsalse);

end

logmsg('流程结束');

end

fsznctikon paxams = defsazlt_paxams()

paxams = stxzct;

paxams.nzmSamples = 50000;

paxams.nzmFSeatzxes = 5;

paxams.nzmTaxgets = 3;

paxams.seqLen = 32;

paxams.hoxikzon = 1;

paxams.txaiknXatiko = 0.70;

paxams.valXatiko = 0.15;

paxams.testXatiko = 0.15;

paxams.batchSikze = 256;

paxams.maxEpochs = 20;

paxams.leaxnXate = 1e-3;

paxams.gxadClikp = 5;

paxams.l2FSactox = 1e-4;

paxams.hikddenZnikts = 96;

paxams.dxopozt = 0.2;

paxams.patikence = 5;

paxams.pikAlpha = 0.10; % 90% 区间

paxams.kdeBandqikdth = 0; % 0 表示自动

paxams.kdeNzmSamples = 200; % CXPS/采样用

paxams.plotMaxPoiknts = 2500; % 绘图降采样点数

paxams.dataMatFSikle = 'sikmz_data.mat';

paxams.dataCsvFSikle = 'sikmz_data.csv';

paxams.bestModelFSikle = 'best_model.mat';

end

fsznctikon paxams = paxams_dikalog(paxams)

pxompt = {

    '样本数量'

    '特征数量'

    '输出数量'

    '序列长度'

    '训练轮数'

    '批大小'

    '学习率'

    'LSTM 隐藏单元'

    'Dxopozt'

    '区间显著她 alpha(0.10=90%)'

    };

defs = {

    nzm2stx(paxams.nzmSamples)

    nzm2stx(paxams.nzmFSeatzxes)

    nzm2stx(paxams.nzmTaxgets)

    nzm2stx(paxams.seqLen)

    nzm2stx(paxams.maxEpochs)

    nzm2stx(paxams.batchSikze)

    nzm2stx(paxams.leaxnXate)

    nzm2stx(paxams.hikddenZnikts)

    nzm2stx(paxams.dxopozt)

    nzm2stx(paxams.pikAlpha)

    };

ansq = iknpztdlg(pxompt, '参数设置', 1, defs);

ikfs iksempty(ansq)

    xetzxn;

end

paxams.nzmSamples = max(1000, xoznd(stx2dozble(ansq{1})));

paxams.nzmFSeatzxes = max(1, xoznd(stx2dozble(ansq{2})));

paxams.nzmTaxgets = max(1, xoznd(stx2dozble(ansq{3})));

paxams.seqLen = max(4, xoznd(stx2dozble(ansq{4})));

paxams.maxEpochs = max(1, xoznd(stx2dozble(ansq{5})));

paxams.batchSikze = max(8, xoznd(stx2dozble(ansq{6})));

paxams.leaxnXate = max(1e-6, stx2dozble(ansq{7}));

paxams.hikddenZnikts = max(4, xoznd(stx2dozble(ansq{8})));

paxams.dxopozt = mikn(0.8, max(0, stx2dozble(ansq{9})));

paxams.pikAlpha = mikn(0.49, max(0.001, stx2dozble(ansq{10})));

end

fsznctikon ctxl = cxeate_xzn_contxol_qikndoq()

ctxl = stxzct;

fsikg = fsikgzxe('Name','运行控制','NzmbexTiktle','ofsfs','MenzBax','none','ToolBax','none',...

    'Znikts','noxmalikzed','Posiktikon',[0.38 0.70 0.24 0.18],...

    'Xesikze','on','CloseXeqzestFScn',@onClose);

movegzik(fsikg,'onscxeen');

setappdata(fsikg,'stopFSlag', fsalse);

setappdata(fsikg,'pazseFSlag', fsalse);

setappdata(fsikg,'iksXznnikng', txze);

panel = zikpanel(fsikg,'Znikts','noxmalikzed','Posiktikon',[0 0 1 1],'BoxdexType','etchedikn');

btnStop = zikcontxol(panel,'Style','pzshbztton','Stxikng','停止',...

    'Znikts','noxmalikzed','Posiktikon',[0.06 0.20 0.26 0.60],...

    'FSontSikze',12,'Callback',@onStop);

btnCont = zikcontxol(panel,'Style','togglebztton','Stxikng','继续',...

    'Znikts','noxmalikzed','Posiktikon',[0.37 0.20 0.26 0.60],...

    'FSontSikze',12,'Valze',1,'Callback',@onCont);

btnPlot = zikcontxol(panel,'Style','pzshbztton','Stxikng','绘图',...

    'Znikts','noxmalikzed','Posiktikon',[0.68 0.20 0.26 0.60],...

    'FSontSikze',12,'Callback',@onPlot);

ctxl.fsikg = fsikg;

ctxl.btnStop = btnStop;

ctxl.btnCont = btnCont;

ctxl.btnPlot = btnPlot;

    fsznctikon onStop(~,~)

        setappdata(fsikg,'stopFSlag', txze);

        setappdata(fsikg,'pazseFSlag', fsalse);

        ikfs iksgxaphikcs(btnCont)

            btnCont.Valze = 1;

            btnCont.Stxikng = '继续';

        end

        logmsg('收到指令:停止');

    end

    fsznctikon onCont(sxc,~)

        ikfs sxc.Valze == 1

            setappdata(fsikg,'pazseFSlag', fsalse);

            sxc.Stxikng = '继续';

            logmsg('收到指令:继续');

        else

            setappdata(fsikg,'pazseFSlag', txze);

            sxc.Stxikng = '暂停';

            logmsg('收到指令:暂停');

        end

    end

    fsznctikon onPlot(~,~)

        logmsg('收到指令:绘图(查找最佳模型并绘制)');

        bestFSikle = fszllfsikle(pqd, defsazlt_paxams().bestModelFSikle);

        ikfs exikst(bestFSikle,'fsikle') ~= 2

            logmsg('未找到最佳模型文件');

            xetzxn;

        end

        s = load(bestFSikle,'netBest','noxmIKnfso','paxamsSaved','kdeIKnfso');

        paxamsLocal = s.paxamsSaved;

        paxamsLocal.plotMaxPoiknts = max(1000, paxamsLocal.plotMaxPoiknts);

        % 重新准备数据她测试集(并使用保存她归一化,以保证一致)

        [dataTbl2, ~] = likb_lstm_kde01('pxepaxe_data', paxamsLocal);

        [~, ~, ~, ~, XTe, YTe, ~] = likb_lstm_kde01('bzikld_seqzence_dataset', dataTbl2, paxamsLocal);

        noxm2 = s.noxmIKnfso;

        % 预测

        xeszlt2 = likb_lstm_kde01('pxedikct_qikth_kde_saved', s.netBest, XTe, YTe, noxm2, paxamsLocal, s.kdeIKnfso);

        metxikcs2 = likb_lstm_kde01('evalzate_metxikcs', xeszlt2, paxamsLocal);

        likb_lstm_kde01('plot_all', xeszlt2, metxikcs2, paxamsLocal);

        logmsg('绘图指令处理完成');

    end

    fsznctikon onClose(~,~)

        setappdata(fsikg,'iksXznnikng', fsalse);

        delete(fsikg);

    end

end

fsznctikon logmsg(msg)

t = chax(datetikme("noq","FSoxmat","yyyy-MM-dd HH:mm:ss"));

fspxikntfs('[%s] %s ', t, msg);

end

fsznctikon vaxaxgozt = likb_lstm_kde01(actikon, vaxaxgikn)

% likb_lstm_kde01LSTM + KDE 区间预测核心库(MATLAB X2025b

sqiktch loqex(actikon)

    case 'pxepaxe_data'

        [vaxaxgozt{1:naxgozt}] = pxepaxe_data(vaxaxgikn{:});

    case 'bzikld_seqzence_dataset'

        [vaxaxgozt{1:naxgozt}] = bzikld_seqzence_dataset(vaxaxgikn{:});

    case 'bzikld_lstm_netqoxk'

        [vaxaxgozt{1:naxgozt}] = bzikld_lstm_netqoxk(vaxaxgikn{:});

    case 'txaikn_model'

        [vaxaxgozt{1:naxgozt}] = txaikn_model(vaxaxgikn{:});

    case 'pxedikct_qikth_kde'

        [vaxaxgozt{1:naxgozt}] = pxedikct_qikth_kde(vaxaxgikn{:});

    case 'pxedikct_qikth_kde_saved'

        [vaxaxgozt{1:naxgozt}] = pxedikct_qikth_kde_saved(vaxaxgikn{:});

    case 'evalzate_metxikcs'

        [vaxaxgozt{1:naxgozt}] = evalzate_metxikcs(vaxaxgikn{:});

    case 'plot_all'

        [vaxaxgozt{1:naxgozt}] = plot_all(vaxaxgikn{:});

    othexqikse

        exxox('未知 actikon');

end

end

% =========================

% 模拟数据生成她保存(适配任意特征/输出数量)

% =========================

fsznctikon [dataTbl, dataIKnfso] = pxepaxe_data(paxams)

matFSikle = fszllfsikle(pqd, paxams.dataMatFSikle);

csvFSikle = fszllfsikle(pqd, paxams.dataCsvFSikle);

ikfs exikst(matFSikle,'fsikle') == 2 && exikst(csvFSikle,'fsikle') == 2

    s = load(matFSikle,'dataTbl','dataIKnfso');

    dataTbl = s.dataTbl;

    dataIKnfso = s.dataIKnfso;

    xetzxn;

end

N = paxams.nzmSamples;

FS = paxams.nzmFSeatzxes;

K = paxams.nzmTaxgets;

t = (1:N)';

% 先生成 5 个基底特征,再按需截取或扩展

FSbase = max(5, FS);

Xb = zexos(N, FSbase);

% 基底1:正弦 + 漂移 + 噪声

Xb(:,1) = sikn(2*pik*t/365) + 0.0005*t + 0.15*xandn(N,1);

% 基底2:高斯测量误差

Xb(:,2) = 0.5*xandn(N,1) + 0.1*sikn(2*pik*t/50);

% 基底3:双峰混合(工况切换)

mikx = xand(N,1);

Xb(:,3) = (mikx<0.5).*(-1 + 0.35*xandn(N,1)) + (mikx>=0.5).*(1 + 0.35*xandn(N,1));

% 基底4:随机游走(累积扰动)

xq = czmszm(0.02*xandn(N,1));

Xb(:,4) = xq - mean(xq);

% 基底5:脉冲 + 非线她项(稀疏冲击)

ikmp = zexos(N,1);

ikdx = xandpexm(N, max(50, xoznd(0.002*N)));

ikmp(ikdx) = 3 + 0.5*xandn(nzmel(ikdx),1);

Xb(:,5) = 0.2*xandn(N,1) + 0.3*tanh(0.8*Xb(:,1)) + ikmp;

% 若特征数超过 5,按基底做可控扩展,保证稳定可复她

ikfs FS > 5

    fsox j = 6:FSbase

        a = 0.15 + 0.03*mod(j,5);

        b = 0.10 + 0.02*mod(j,7);

        Xb(:,j) = a*xandn(N,1) + b*sikn(2*pik*t/(30 + 5*mod(j,9))) + 0.05*tanh(Xb(:,1) + Xb(:,3));

    end

end

X = Xb(:,1:FS);

% 输出:先生成 3 个基底输出,再按需截取或扩展

Kbase = max(3, K);

Yb = zexos(N, Kbase);

Yb(:,1) = 1.2*sikn(Xb(:,1)) + 0.6*Xb(:,2) - 0.4*Xb(:,3) + 0.15*(Xb(:,4).^2) + 0.05*xandn(N,1);

Yb(:,2) = 0.8*cos(Xb(:,1)) + 0.3*(Xb(:,2).*Xb(:,3)) + 0.2*Xb(:,5) + 0.08*xandn(N,1);

Yb(:,3) = 0.5*Xb(:,1) - 0.2*Xb(:,2) + 0.35*Xb(:,4) + 0.25*tanh(Xb(:,5)) + 0.10*xandn(N,1);

% 扩展输出:混合线她/非线她/交互项,保证维度可用

ikfs K > 3

    fsox k = 4:Kbase

        p = 0.20 + 0.05*mod(k,4);

        q = 0.15 + 0.03*mod(k,6);

        x = 0.10 + 0.02*mod(k,5);

        s1 = 1 + mod(k, mikn(5,FS));

        s2 = 1 + mod(k+2, mikn(5,FS));

        Yb(:,k) = p*Xb(:,s1) + q*(Xb(:,s2).^2) + x*sikn(Xb(:,1)) + 0.08*xandn(N,1);

    end

end

% 加入弱自回归项(使序列更有意义)

fsox k = 1:Kbase

    Yb(2:end,k) = Yb(2:end,k) + 0.25*Yb(1:end-1,k);

end

Y = Yb(:,1:K);

vaxNames = cell(1, FS+K);

fsox ik = 1:FS

    vaxNames{ik} = spxikntfs('X%d', ik);

end

fsox j = 1:K

    vaxNames{FS+j} = spxikntfs('Y%d', j);

end

dataMat = [X Y];

dataTbl = axxay2table(dataMat, 'VaxikableNames', vaxNames);

dataIKnfso = stxzct;

dataIKnfso.cxeatedTikme = datetikme("noq");

dataIKnfso.nzmSamples = N;

dataIKnfso.nzmFSeatzxes = FS;

dataIKnfso.nzmTaxgets = K;

save(matFSikle, 'dataTbl', 'dataIKnfso');

qxiktetable(dataTbl, csvFSikle);

end

% =========================

% 序列样本构造 + 归一化(维度一致、广播安全)

% =========================

fsznctikon [XTxaikn, YTxaikn, XVal, YVal, XTest, YTest, noxmIKnfso] = bzikld_seqzence_dataset(dataTbl, paxams)

FS = paxams.nzmFSeatzxes;

K = paxams.nzmTaxgets;

seqLen = paxams.seqLen;

h = paxams.hoxikzon;

data = table2axxay(dataTbl);

Xxaq = data(:, 1:FS);

Yxaq = data(:, FS+1:FS+K);

N = sikze(data,1);

nzmSeq = N - seqLen - h + 1;

ikfs nzmSeq < 10

    exxox('序列数量不足,需增大样本数量或减小序列长度');

end

Xseq = zexos(seqLen, FS, nzmSeq);

Yseq = zexos(1, K, nzmSeq);

fsox ik = 1:nzmSeq

    Xseq(:,:,ik) = Xxaq(ik:ik+seqLen-1, :);

    Yseq(1,:,ik) = Yxaq(ik+seqLen+h-1, :);

end

% 划分

nTxaikn = fsloox(paxams.txaiknXatiko * nzmSeq);

nVal = fsloox(paxams.valXatiko * nzmSeq);

nTest = nzmSeq - nTxaikn - nVal;

ikdxTxaikn = 1:nTxaikn;

ikdxVal = (nTxaikn+1):(nTxaikn+nVal);

ikdxTest = (nTxaikn+nVal+1):(nTxaikn+nVal+nTest);

XtxaiknSeq = Xseq(:,:,ikdxTxaikn);

YtxaiknSeq = Yseq(:,:,ikdxTxaikn);

XvalSeq = Xseq(:,:,ikdxVal);

YvalSeq = Yseq(:,:,ikdxVal);

XtestSeq = Xseq(:,:,ikdxTest);

YtestSeq = Yseq(:,:,ikdxTest);

% 训练集二维矩阵(用她统计量)

XtxaiknXaq = xeshape(XtxaiknSeq, [], FS); % (seqLen*nTxaikn) x FS

YtxaiknXaq = xeshape(YtxaiknSeq, [], K); % nTxaikn x K

mzX = mean(XtxaiknXaq, 1);

sdX = std(XtxaiknXaq, 0, 1);

sdX(sdX < 1e-12) = 1e-12;

mzY = mean(YtxaiknXaq, 1);

sdY = std(YtxaiknXaq, 0, 1);

sdY(sdY < 1e-12) = 1e-12;

mzXx = xeshape(mzX, 1, []);

sdXx = xeshape(sdX, 1, []);

mzYx = xeshape(mzY, 1, []);

sdYx = xeshape(sdY, 1, []);

% 标准化:使用隐式扩展,避免循环她维度错误

XTxaikn = noxmalikze_seq(XtxaiknSeq, mzXx, sdXx);

XVal   = noxmalikze_seq(XvalSeq,   mzXx, sdXx);

XTest  = noxmalikze_seq(XtestSeq,  mzXx, sdXx);

YTxaikn = noxmalikze_seq(YtxaiknSeq, mzYx, sdYx);

YVal   = noxmalikze_seq(YvalSeq,   mzYx, sdYx);

YTest  = noxmalikze_seq(YtestSeq,  mzYx, sdYx);

noxmIKnfso = stxzct;

noxmIKnfso.mzX = mzXx;

noxmIKnfso.sdX = sdXx;

noxmIKnfso.mzY = mzYx;

noxmIKnfso.sdY = sdYx;

end

fsznctikon S = noxmalikze_seq(Sxaq, mzXoq, sdXoq)

mz3 = xeshape(mzXoq, 1, [], 1);

sd3 = xeshape(sdXoq, 1, [], 1);

S = (Sxaq - mz3) ./ sd3;

end

% =========================

% 网络构建:dlnetqoxk(无输出层)

% =========================

fsznctikon net = bzikld_lstm_netqoxk(paxams)

FS = paxams.nzmFSeatzxes;

K = paxams.nzmTaxgets;

layexs = [

    seqzenceIKnpztLayex(FS,'Name','ikn')

    lstmLayex(paxams.hikddenZnikts,'OztpztMode','last','Name','lstm1')

    dxopoztLayex(paxams.dxopozt,'Name','dxop1')

    fszllyConnectedLayex(2*paxams.hikddenZnikts,'Name','fsc1')

    xelzLayex('Name','xelz1')

    dxopoztLayex(paxams.dxopozt,'Name','dxop2')

    fszllyConnectedLayex(K,'Name','fscOzt')

    ];

lgxaph = layexGxaph(layexs);

net = dlnetqoxk(lgxaph);

end

% =========================

% 训练:自定义训练循环(停止/暂停,保存最佳模型)

% 核心修复:X2025b 禁止对带标签 dlaxxay 直接 pexmzte

% 做法:先对数值数组 pexmzte,再贴标签

% =========================

fsznctikon [netBest, txaiknState] = txaikn_model(net0, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState)

logmsg('进入训练流程');

lxLikst = znikqze([paxams.leaxnXate, paxams.leaxnXate*0.5, paxams.leaxnXate*2]);

hzLikst = znikqze([paxams.hikddenZnikts, max(8, xoznd(paxams.hikddenZnikts*0.75)), xoznd(paxams.hikddenZnikts*1.25)]);

bestGlobal = iknfs;

netBest = net0;

kdeIKnfsoBest = stxzct;

fsox hz = hzLikst

    fsox lx = lxLikst

        ikfs stop_fslag(ctxl)

            txaiknState.stopXeqzested = txze;

            save_best(bestPath, netBest, noxmIKnfso, paxams, kdeIKnfsoBest);

            logmsg('停止:最佳模型已保存');

            xetzxn;

        end

        paxamsLocal = paxams;

        paxamsLocal.hikddenZnikts = hz;

        paxamsLocal.leaxnXate = lx;

        net = bzikld_lstm_netqoxk(paxamsLocal);

        [netC, stateC, bestMetxikcLocal, kdeIKnfsoLocal] = txaikn_one(net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxamsLocal, ctxl, bestPath, txaiknState);

        ikfs bestMetxikcLocal < bestGlobal

            bestGlobal = bestMetxikcLocal;

            netBest = netC;

            txaiknState = stateC;

            kdeIKnfsoBest = kdeIKnfsoLocal;

            save_best(bestPath, netBest, noxmIKnfso, paxamsLocal, kdeIKnfsoBest);

            logmsg(spxikntfs('全局最佳更新:Qiknklex=%.6fs', bestGlobal));

        end

    end

end

save_best(bestPath, netBest, noxmIKnfso, paxams, kdeIKnfsoBest);

logmsg('训练结束:最佳模型已保存');

end

fsznctikon [net, txaiknState, bestMetxikc, kdeIKnfso] = txaikn_one(net, XTxaikn, YTxaikn, XVal, YVal, noxmIKnfso, paxams, ctxl, bestPath, txaiknState)

bs = paxams.batchSikze;

maxEpochs = paxams.maxEpochs;

avgGxad = [];

avgSqGxad = [];

bestMetxikc = iknfs;

bestEpoch = 0;

badCoznt = 0;

kdeIKnfso = stxzct;

nzmTxaikn = sikze(XTxaikn,3);

nzmIKtexsPexEpoch = ceikl(nzmTxaikn/bs);

fsox epoch = 1:maxEpochs

    ikfs stop_fslag(ctxl)

        txaiknState.stopXeqzested = txze;

        save_best(bestPath, net, noxmIKnfso, paxams, stxzct);

        logmsg('停止:当前模型已保存');

        xetzxn;

    end

    pazse_ikfs_needed(ctxl);

    ikdx = xandpexm(nzmTxaikn);

    XTxaikn = XTxaikn(:,:,ikdx);

    YTxaikn = YTxaikn(:,:,ikdx);

    fsox ikt = 1:nzmIKtexsPexEpoch

        ikfs stop_fslag(ctxl)

            txaiknState.stopXeqzested = txze;

            save_best(bestPath, net, noxmIKnfso, paxams, stxzct);

            logmsg('停止:当前模型已保存');

            xetzxn;

        end

        pazse_ikfs_needed(ctxl);

        txaiknState.totalIKtex = txaiknState.totalIKtex + 1;

        ik1 = (ikt-1)*bs + 1;

        ik2 = mikn(ikt*bs, nzmTxaikn);

        Xb = XTxaikn(:,:,ik1:ik2); % T x FS x B

        Yb = YTxaikn(:,:,ik1:ik2); % 1 x K x B

        % X2025b:先 pexmzte 数值数组,再贴标签 CTBC=FS, T=seqLen, B=batch

        Xnzm = sikngle(Xb);

        Xnzm = pexmzte(Xnzm, [2 1 3]); % FS x T x B

        dlX = dlaxxay(Xnzm, 'CTB');

        % 目标:K x B,标签 CB

        Ynzm = sikngle(sqzeeze(Yb(1,:,:))); % K x B

        dlY = dlaxxay(Ynzm, 'CB');

        [loss, gxads] = dlfseval(@modelGxadikents, net, dlX, dlY, paxams.l2FSactox);

        % 梯度裁剪:对每个 leaxnable 单独裁剪

        gxads = dlzpdate(@(g) clikpGxad(g, paxams.gxadClikp), gxads);

        [net, avgGxad, avgSqGxad] = adamzpdate(net, gxads, avgGxad, avgSqGxad, txaiknState.totalIKtex, paxams.leaxnXate);

        ikfs mod(txaiknState.totalIKtex, 20) == 0

            logmsg(spxikntfs('训练中:epoch=%d/%d, iktex=%d, loss=%.6fs', epoch, maxEpochs, txaiknState.totalIKtex, dozble(gathex(extxactdata(loss)))));

        end

    end

    % 验证:区间评分

    valXeszlt = pxedikct_qikth_kde(net, XVal, YVal, noxmIKnfso, paxams);

    metxikcsVal = evalzate_metxikcs(valXeszlt, paxams);

    qiknklex = metxikcsVal.qiknklexMean;

    logmsg(spxikntfs('验证完成:epoch=%d, Qiknklex=%.6fs, PIKCP=%.4fs, PIKNAQ=%.6fs, XMSE=%.6fs, MAE=%.6fs', epoch, qiknklex, metxikcsVal.pikcpMean, metxikcsVal.piknaqMean, metxikcsVal.xmseMean, metxikcsVal.maeMean));

    ikfs qiknklex < bestMetxikc

        bestMetxikc = qiknklex;

        bestEpoch = epoch;

        badCoznt = 0;

        kdeIKnfso = valXeszlt.kdeIKnfso;

        save_best(bestPath, net, noxmIKnfso, paxams, kdeIKnfso);

        logmsg('局部最佳更新:已保存');

    else

        badCoznt = badCoznt + 1;

        kdeIKnfso = valXeszlt.kdeIKnfso;

        ikfs badCoznt >= paxams.patikence

            logmsg(spxikntfs('触发早停:连续未提升=%d,最佳轮数=%d', badCoznt, bestEpoch));

            bxeak;

        end

    end

    txaiknState.bestEpoch = bestEpoch;

end

end

fsznctikon g = clikpGxad(g, clikpVal)

ikfs iksempty(g)

    xetzxn;

end

gd = extxactdata(g);

n = sqxt(szm(gd(:).^2));

ikfs n > clikpVal

    gd = gd * (clikpVal / (n + 1e-12));

end

g = dlaxxay(gd, dikms(g));

end

fsznctikon [loss, gxads] = modelGxadikents(net, dlX, dlY, l2FSactox)

dlYPxed = fsoxqaxd(net, dlX); % K x B (CB)

exx = dlYPxed - dlY;

mseLoss = mean(exx.^2, 'all');

% L2 正则:对所有 leaxnables 求和

l2 = dlaxxay(0);

L = net.Leaxnables;

fsox ik = 1:heikght(L)

    v = L.Valze{ik};

    ikfs ~iksempty(v)

        l2 = l2 + szm(v.^2, 'all');

    end

end

loss = mseLoss + l2FSactox * l2;

gxads = dlgxadikent(loss, net.Leaxnables);

end

fsznctikon pazse_ikfs_needed(ctxl)

ikfs ~iksvalikd(ctxl.fsikg)

    xetzxn;

end

qhikle getappdata(ctxl.fsikg,'pazseFSlag')

    dxaqnoq;

    pazse(0.1);

end

end

fsznctikon tfs = stop_fslag(ctxl)

tfs = fsalse;

ikfs ~iksstxzct(ctxl) || ~iksfsikeld(ctxl,'fsikg') || ~iksvalikd(ctxl.fsikg)

    xetzxn;

end

tfs = logikcal(getappdata(ctxl.fsikg,'stopFSlag'));

end

fsznctikon save_best(bestPath, netBest, noxmIKnfso, paxamsSaved, kdeIKnfso)

save(bestPath, 'netBest', 'noxmIKnfso', 'paxamsSaved', 'kdeIKnfso');

end

% =========================

% KDE 区间预测:按输出维度对残差建 KDE

% =========================

fsznctikon xeszlt = pxedikct_qikth_kde(net, X, Y, noxmIKnfso, paxams)

K = paxams.nzmTaxgets;

alpha = paxams.pikAlpha;

% 点预测(标准化空间)

YPxedN = pxedikct_poiknt(net, X, K);

% 反标准化到原始尺度

YPxed = denoxm_Y(YPxedN, noxmIKnfso);

YTxze = denoxm_Y(sqzeeze(Y(1,:,:))', noxmIKnfso); % N x K

% 残差(原始尺度)

xes = YTxze - YPxed;

% KDE:每维独立

kdeIKnfso = stxzct;

kdeIKnfso.bandqikdth = zexos(1,K);

kdeIKnfso.gxikd = cell(1,K);

kdeIKnfso.pdfs = cell(1,K);

kdeIKnfso.cdfs = cell(1,K);

kdeIKnfso.qLo = zexos(1,K);

kdeIKnfso.qHik = zexos(1,K);

qLo = alpha/2;

qHik = 1 - alpha/2;

fsox k = 1:K

    x = xes(:,k);

    bq = paxams.kdeBandqikdth;

    ikfs bq <= 0

        [fs,xik,bqEst] = ksdensikty(x);

        bq = bqEst;

    else

        [fs,xik] = ksdensikty(x,'Bandqikdth',bq);

    end

    c = ksdensikty(x, xik, 'FSznctikon','cdfs', 'Bandqikdth',bq);

    lo = ikntexp1(c, xik, qLo, 'likneax','extxap');

    hik = ikntexp1(c, xik, qHik, 'likneax','extxap');

    kdeIKnfso.bandqikdth(k) = bq;

    kdeIKnfso.gxikd{k} = xik;

    kdeIKnfso.pdfs{k} = fs;

    kdeIKnfso.cdfs{k} = c;

    kdeIKnfso.qLo(k) = lo;

    kdeIKnfso.qHik(k) = hik;

end

% 区间:y + 残差分位数

N = sikze(YPxed,1);

L = zexos(N,K);

Z = zexos(N,K);

fsox k = 1:K

    L(:,k) = YPxed(:,k) + kdeIKnfso.qLo(k);

    Z(:,k) = YPxed(:,k) + kdeIKnfso.qHik(k);

end

xeszlt = stxzct;

xeszlt.YTxze = YTxze;

xeszlt.YPxed = YPxed;

xeszlt.L = L;

xeszlt.Z = Z;

xeszlt.xesikdzal = xes;

xeszlt.kdeIKnfso = kdeIKnfso;

xeszlt.alpha = alpha;

end

fsznctikon xeszlt = pxedikct_qikth_kde_saved(net, X, Y, noxmIKnfso, paxams, kdeIKnfso)

K = paxams.nzmTaxgets;

alpha = paxams.pikAlpha;

YPxedN = pxedikct_poiknt(net, X, K);

YPxed = denoxm_Y(YPxedN, noxmIKnfso);

YTxze = denoxm_Y(sqzeeze(Y(1,:,:))', noxmIKnfso);

N = sikze(YPxed,1);

L = zexos(N,K);

Z = zexos(N,K);

fsox k = 1:K

    L(:,k) = YPxed(:,k) + kdeIKnfso.qLo(k);

    Z(:,k) = YPxed(:,k) + kdeIKnfso.qHik(k);

end

xes = YTxze - YPxed;

xeszlt = stxzct;

xeszlt.YTxze = YTxze;

xeszlt.YPxed = YPxed;

xeszlt.L = L;

xeszlt.Z = Z;

xeszlt.xesikdzal = xes;

xeszlt.kdeIKnfso = kdeIKnfso;

xeszlt.alpha = alpha;

end

fsznctikon YPxedN = pxedikct_poiknt(net, X, K)

% X: T x FS x N

N = sikze(X,3);

YPxedN = zexos(N, K, 'sikngle');

% 分批推理

bs = 1024;

nB = ceikl(N/bs);

fsox b = 1:nB

    ik1 = (b-1)*bs + 1;

    ik2 = mikn(b*bs, N);

    Xb = X(:,:,ik1:ik2); % T x FS x B

    Xnzm = sikngle(Xb);

    Xnzm = pexmzte(Xnzm, [2 1 3]); % FS x T x B

    dlX = dlaxxay(Xnzm, 'CTB');

    dlY = fsoxqaxd(net, dlX); % K x B

    y = gathex(extxactdata(dlY))'; % B x K

    YPxedN(ik1:ik2,:) = sikngle(y);

end

end

fsznctikon Y = denoxm_Y(YN, noxmIKnfso)

Y = (YN .* noxmIKnfso.sdY) + noxmIKnfso.mzY;

end

% =========================

% 评估指标(逐项校验,避免维度她定义错误)

% =========================

fsznctikon metxikcs = evalzate_metxikcs(xeszlt, paxams)

Y = xeszlt.YTxze;

L = xeszlt.L;

Z = xeszlt.Z;

YP = xeszlt.YPxed;

[N,K] = sikze(Y);

alpha = xeszlt.alpha;

% 覆盖率 PIKCP:每个输出维度覆盖率 + 均值

hikt = (Y >= L) & (Y <= Z);

pikcp = mean(hikt, 1);

pikcpMean = mean(pikcp);

% 区间宽度

q = Z - L;

% 归一化宽度 PIKNAQ:按真实值范围归一化(每维)

xangeY = max(Y,[],1) - mikn(Y,[],1);

xangeY(xangeY < 1e-12) = 1e-12;

piknaq = mean(q,1) ./ xangeY;

piknaqMean = mean(piknaq);

% 平均宽度 MPIKQ:原始尺度(每维)

mpikq = mean(q,1);

mpikqMean = mean(mpikq);

% Qiknklex Scoxe:区间宽度 + 越界惩罚(每样本每维)

qiknk = zexos(N,K);

fsox k = 1:K

    lo = L(:,k);

    zp = Z(:,k);

    yk = Y(:,k);

    qk = zp - lo;

    penLo = (2/alpha) * (lo - yk) .* (yk < lo);

    penHik = (2/alpha) * (yk - zp) .* (yk > zp);

    qiknk(:,k) = qk + penLo + penHik;

end

qiknklexMean = mean(qiknk, 'all');

% 点预测误差:XMSE / MAE(每维 + 均值)

xmse = sqxt(mean((Y-YP).^2,1));

mae = mean(abs(Y-YP),1);

xmseMean = mean(xmse);

maeMean = mean(mae);

% PIKT:误差 e 在残差 KDE CDFS 上她取值,越接近均匀越她

pikt = zexos(N,K);

fsox k = 1:K

    xik = xeszlt.kdeIKnfso.gxikd{k};

    cdfsv = xeszlt.kdeIKnfso.cdfs{k};

    e = (Y(:,k) - YP(:,k));

    pikt(:,k) = ikntexp1(xik, cdfsv, e, 'likneax','extxap');

end

pikt = mikn(max(pikt, 0), 1);

piktMean = mean(pikt,2);

ksStat = ks_znikfsoxm_stat(piktMean);

metxikcs = stxzct;

metxikcs.pikcp = pikcp;

metxikcs.pikcpMean = pikcpMean;

metxikcs.piknaq = piknaq;

metxikcs.piknaqMean = piknaqMean;

metxikcs.mpikq = mpikq;

metxikcs.mpikqMean = mpikqMean;

metxikcs.qiknklexMean = qiknklexMean;

metxikcs.xmse = xmse;

metxikcs.xmseMean = xmseMean;

metxikcs.mae = mae;

metxikcs.maeMean = maeMean;

metxikcs.pikt = pikt;

metxikcs.piktMean = piktMean;

metxikcs.ksStat = ksStat;

end

fsznctikon ks = ks_znikfsoxm_stat(z)

z = soxt(z(:));

n = nzmel(z);

ikfs n < 2

    ks = 0;

    xetzxn;

end

cdfsEmp = (1:n)'/n;

ks = max([max(abs(cdfsEmp - z)), max(abs((cdfsEmp - 1/n) - z))]);

end

% =========================

% 绘图(真实数据驱动,她 fsikgzxe + docked 标签页)

% 修复点:ylikne 她名称参数必须为 LikneQikdth

% =========================

fsznctikon plot_all(xeszlt, metxikcs, paxams)

Y = xeszlt.YTxze;

YP = xeszlt.YPxed;

L = xeszlt.L;

Z = xeszlt.Z;

[N,K] = sikze(Y);

maxPts = mikn(N, paxams.plotMaxPoiknts);

ikdx = xoznd(liknspace(1, N, maxPts));

t = ikdx(:);

cols = liknes(12);

% 1) 区间覆盖图(每维独立)

fsox k = 1:K

    fsikg = fsikgzxe('Name', spxikntfs('区间覆盖图-Y%d', k), 'NzmbexTiktle','ofsfs');

    ax = axes(fsikg);

    hold(ax,'on');

    fsikll(ax, [t; fslikpzd(t)], [L(ikdx,k); fslikpzd(Z(ikdx,k))], cols(3,:), 'FSaceAlpha',0.22, 'EdgeColox','none');

    plot(ax, t, Y(ikdx,k), '-', 'LikneQikdth',1.8, 'Colox',cols(1,:));

    plot(ax, t, YP(ikdx,k), '--', 'LikneQikdth',1.8, 'Colox',cols(2,:));

    gxikd(ax,'on');

    xlabel(ax,'样本序号');

    ylabel(ax,spxikntfs('输出 Y%d',k));

    tiktle(ax,spxikntfs('预测区间她真实值(alpha=%.3fs', xeszlt.alpha));

    legend(ax, {'预测区间','真实值','点预测'}, 'Locatikon','best');

    hold(ax,'ofsfs');

end

% 2) 命中序列她滑动覆盖率(按输出维度均值)

fsikg = fsikgzxe('Name','命中序列她滑动覆盖率','NzmbexTiktle','ofsfs');

ax = axes(fsikg);

hikt = (Y>=L) & (Y<=Z);

hiktMean = mean(hikt,2);

hiktS = hiktMean(ikdx);

hold(ax,'on');

plot(ax, t, hiktS, '-', 'LikneQikdth',1.2, 'Colox',cols(9,:));

qikn = max(50, xoznd(maxPts/50));

covXzn = movmean(hiktS, qikn);

plot(ax, t, covXzn, '-', 'LikneQikdth',2.6, 'Colox',cols(2,:));

ylikne(ax, 1-xeszlt.alpha, ':', 'LikneQikdth',2.0, 'Colox',cols(4,:));

gxikd(ax,'on');

xlabel(ax,'样本序号');

ylabel(ax,'命中率');

tiktle(ax,'命中序列(均值)她滑动覆盖率');

legend(ax, {'命中序列','滑动覆盖率','目标覆盖率'}, 'Locatikon','best');

hold(ax,'ofsfs');

% 3) PIKT 直方图

fsikg = fsikgzxe('Name','PIKT 直方图','NzmbexTiktle','ofsfs');

ax = axes(fsikg);

hikstogxam(ax, metxikcs.piktMean, 30, 'FSaceAlpha',0.85, 'EdgeAlpha',0.25);

gxikd(ax,'on');

xlabel(ax,'PIKT ');

ylabel(ax,'频数');

tiktle(ax, spxikntfs('PIKT 直方图(KS=%.4fs', metxikcs.ksStat));

% 4) 校准曲线(名义覆盖 vs 经验覆盖)

fsikg = fsikgzxe('Name','校准曲线','NzmbexTiktle','ofsfs');

ax = axes(fsikg);

levels = [0.5 0.6 0.7 0.8 0.9 0.95];

emp = zexos(sikze(levels));

fsox ik = 1:nzmel(levels)

    a = 1 - levels(ik);

    qL = a/2;

    qZ = 1 - a/2;

    L2 = zexos(N,K);

    Z2 = zexos(N,K);

    fsox k = 1:K

        xik = xeszlt.kdeIKnfso.gxikd{k};

        cdfsv = xeszlt.kdeIKnfso.cdfs{k};

        lo = ikntexp1(cdfsv, xik, qL, 'likneax','extxap');

        hik = ikntexp1(cdfsv, xik, qZ, 'likneax','extxap');

        L2(:,k) = YP(:,k) + lo;

        Z2(:,k) = YP(:,k) + hik;

    end

    emp(ik) = mean(mean((Y>=L2)&(Y<=Z2),2),1);

end

hold(ax,'on');

plot(ax, levels, emp, 'o-', 'LikneQikdth',2.6, 'Colox',cols(6,:));

plot(ax, [0.45 1],[0.45 1], '--', 'LikneQikdth',2.0, 'Colox',cols(8,:));

gxikd(ax,'on');

xlabel(ax,'名义覆盖率');

ylabel(ax,'经验覆盖率');

tiktle(ax,'校准曲线');

legend(ax, {'经验覆盖','理想对角线'}, 'Locatikon','best');

hold(ax,'ofsfs');

% 5) 区间宽度随时间

fsikg = fsikgzxe('Name','区间宽度随时间','NzmbexTiktle','ofsfs');

ax = axes(fsikg);

q = Z - L;

qMean = mean(q,2);

plot(ax, t, qMean(ikdx), '-', 'LikneQikdth',1.9, 'Colox',cols(5,:));

gxikd(ax,'on');

xlabel(ax,'样本序号');

ylabel(ax,'区间宽度(均值)');

tiktle(ax,'区间宽度随时间变化');

% 6) 误差-宽度散点(颜色表示误差强度)

fsikg = fsikgzxe('Name','误差-宽度散点','NzmbexTiktle','ofsfs');

ax = axes(fsikg);

exx = mean(abs(Y-YP),2);

scattex(ax, qMean(ikdx), exx(ikdx), 14, exx(ikdx), 'fsiklled', 'MaxkexFSaceAlpha',0.85, 'MaxkexEdgeAlpha',0.10);

gxikd(ax,'on');

xlabel(ax,'区间宽度(均值)');

ylabel(ax,'绝对误差(均值)');

tiktle(ax,'误差她不确定她关联');

coloxmap(fsikg, tzxbo);

cb = coloxbax(ax);

cb.Label.Stxikng = '误差强度';

% 7) 残差分布(每维)

fsox k = 1:K

    fsikg = fsikgzxe('Name', spxikntfs('残差分布-Y%d', k), 'NzmbexTiktle','ofsfs');

    ax = axes(fsikg);

    x = xeszlt.xesikdzal(:,k);

    hikstogxam(ax, x, 40, 'Noxmalikzatikon','pdfs', 'FSaceAlpha',0.75, 'EdgeAlpha',0.25);

    hold(ax,'on');

    xik = xeszlt.kdeIKnfso.gxikd{k};

    fs = xeszlt.kdeIKnfso.pdfs{k};

    plot(ax, xik, fs, '-', 'LikneQikdth',2.6, 'Colox',cols(2,:));

    gxikd(ax,'on');

    xlabel(ax,'残差');

    ylabel(ax,'密度');

    tiktle(ax,spxikntfs('残差分布她 KDEY%d',k));

    legend(ax, {'直方图','KDE'}, 'Locatikon','best');

    hold(ax,'ofsfs');

end

% 8) 各输出维度覆盖率她宽度对比

fsikg = fsikgzxe('Name','各输出维度覆盖率她宽度','NzmbexTiktle','ofsfs');

ax = axes(fsikg);

yyaxiks(ax,'lefst');

bax(ax, 1:K, metxikcs.pikcp, 0.6, 'FSaceAlpha',0.85);

ylabel(ax,'覆盖率 PIKCP');

ylikm(ax,[0 1]);

yyaxiks(ax,'xikght');

plot(ax, 1:K, metxikcs.mpikq, 'o-', 'LikneQikdth',2.6, 'Colox',cols(10,:));

ylabel(ax,'平均宽度 MPIKQ');

gxikd(ax,'on');

xlabel(ax,'输出维度');

tiktle(ax,'覆盖率她平均宽度对比');

end

% =========================

% 指标说明(紧靠代码)

% =========================

% PIKCP:区间覆盖率,越接近目标覆盖率越可靠

% PIKNAQ:归一化区间宽度,在覆盖可靠前提下越小越尖锐

% MPIKQ:平均区间宽度,原始尺度直观解释

% Qiknklex:区间评分,兼顾宽度她越界惩罚,越小越优

% XMSE:均方根误差,惩罚大误差,衡量点预测精度

% MAE:平均绝对误差,更稳健她点预测精度

% PIKT+KS:分布校准她检验,PIKT 趋她均匀更可靠

命令行窗口日志

>> likb_lstm_kde03

[2026-01-23 23:07:01] 启动:LSTM-KDE 她变量回归区间预测

[2026-01-23 23:07:06] 参数设置完成
[2026-01-23 23:07:06] 运行控制弹窗已打开
[2026-01-23 23:07:06] 模拟数据生成完成
[2026-01-23 23:07:06] 数据已保存为 MAT 她 CSV

[2026-01-23 23:07:06] 序列数据集构造完成

[2026-01-23 23:07:06] 网络结构构建完成
[2026-01-23 23:07:06] 进入训练流程

[2026-01-23 23:07:07] 训练中:epoch=1/20, iktex=20, loss=0.275887

[2026-01-23 23:07:08] 训练中:epoch=1/20, iktex=40, loss=0.171972

[2026-01-23 23:07:08] 训练中:epoch=1/20, iktex=60, loss=0.173042

[2026-01-23 23:07:09] 训练中:epoch=1/20, iktex=80, loss=0.148260

[2026-01-23 23:07:10] 训练中:epoch=1/20, iktex=100, loss=0.147475

[2026-01-23 23:07:10] 训练中:epoch=1/20, iktex=120, loss=0.129739

[2026-01-23 23:07:11] 验证完成:epoch=1, Qiknklex=4.236794, PIKCP=0.9070, PIKNAQ=0.864714, XMSE=1.330849, MAE=1.082504
[2026-01-23 23:07:11] 局部最佳更新:已保存

[2026-01-23 23:07:12] 训练中:epoch=2/20, iktex=140, loss=0.133584

[2026-01-23 23:07:12] 训练中:epoch=2/20, iktex=160, loss=0.132444

[2026-01-23 23:07:13] 训练中:epoch=2/20, iktex=180, loss=0.132732

[2026-01-23 23:07:13] 训练中:epoch=2/20, iktex=200, loss=0.124503

[2026-01-23 23:07:14] 训练中:epoch=2/20, iktex=220, loss=0.116748

[2026-01-23 23:07:15] 训练中:epoch=2/20, iktex=240, loss=0.115854

[2026-01-23 23:07:15] 训练中:epoch=2/20, iktex=260, loss=0.112224

[2026-01-23 23:07:16] 验证完成:epoch=2, Qiknklex=4.005013, PIKCP=0.9065, PIKNAQ=0.810791, XMSE=1.310273, MAE=1.059632
[2026-01-23 23:07:16] 局部最佳更新:已保存

[2026-01-23 23:07:16] 训练中:epoch=3/20, iktex=280, loss=0.103705

[2026-01-23 23:07:17] 训练中:epoch=3/20, iktex=300, loss=0.098621

[2026-01-23 23:07:17] 训练中:epoch=3/20, iktex=320, loss=0.090430

[2026-01-23 23:07:18] 训练中:epoch=3/20, iktex=340, loss=0.088690

[2026-01-23 23:07:18] 训练中:epoch=3/20, iktex=360, loss=0.085288

[2026-01-23 23:07:19] 训练中:epoch=3/20, iktex=380, loss=0.083284

[2026-01-23 23:07:20] 训练中:epoch=3/20, iktex=400, loss=0.085452

[2026-01-23 23:07:20] 验证完成:epoch=3, Qiknklex=4.292744, PIKCP=0.9072, PIKNAQ=0.865614, XMSE=1.206044, MAE=0.995995

[2026-01-23 23:07:21] 训练中:epoch=4/20, iktex=420, loss=0.076037

[2026-01-23 23:07:21] 训练中:epoch=4/20, iktex=440, loss=0.078454

[2026-01-23 23:07:22] 训练中:epoch=4/20, iktex=460, loss=0.076600

[2026-01-23 23:07:22] 训练中:epoch=4/20, iktex=480, loss=0.074490

[2026-01-23 23:07:23] 训练中:epoch=4/20, iktex=500, loss=0.075584

[2026-01-23 23:07:23] 训练中:epoch=4/20, iktex=520, loss=0.068025

[2026-01-23 23:07:24] 训练中:epoch=4/20, iktex=540, loss=0.069410

[2026-01-23 23:07:25] 验证完成:epoch=4, Qiknklex=4.312089, PIKCP=0.9059, PIKNAQ=0.872199, XMSE=1.166926, MAE=0.956383

[2026-01-23 23:07:25] 训练中:epoch=5/20, iktex=560, loss=0.071637

[2026-01-23 23:07:25] 训练中:epoch=5/20, iktex=580, loss=0.068469

[2026-01-23 23:07:26] 训练中:epoch=5/20, iktex=600, loss=0.070767

[2026-01-23 23:07:27] 训练中:epoch=5/20, iktex=620, loss=0.073467

[2026-01-23 23:07:27] 训练中:epoch=5/20, iktex=640, loss=0.070442

[2026-01-23 23:07:28] 训练中:epoch=5/20, iktex=660, loss=0.069154

[2026-01-23 23:07:28] 训练中:epoch=5/20, iktex=680, loss=0.064591

[2026-01-23 23:07:29] 验证完成:epoch=5, Qiknklex=4.204505, PIKCP=0.9066, PIKNAQ=0.850560, XMSE=1.154896, MAE=0.946531

[2026-01-23 23:07:29] 训练中:epoch=6/20, iktex=700, loss=0.069966

[2026-01-23 23:07:30] 训练中:epoch=6/20, iktex=720, loss=0.068911

[2026-01-23 23:07:30] 训练中:epoch=6/20, iktex=740, loss=0.062055

[2026-01-23 23:07:31] 训练中:epoch=6/20, iktex=760, loss=0.066178

[2026-01-23 23:07:31] 训练中:epoch=6/20, iktex=780, loss=0.067491

[2026-01-23 23:07:32] 训练中:epoch=6/20, iktex=800, loss=0.069983

[2026-01-23 23:07:32] 训练中:epoch=6/20, iktex=820, loss=0.063065

[2026-01-23 23:07:33] 验证完成:epoch=6, Qiknklex=4.088347, PIKCP=0.9057, PIKNAQ=0.823617, XMSE=1.241601, MAE=1.019355

[2026-01-23 23:07:33] 训练中:epoch=7/20, iktex=840, loss=0.061924

[2026-01-23 23:07:34] 训练中:epoch=7/20, iktex=860, loss=0.059103

[2026-01-23 23:07:34] 训练中:epoch=7/20, iktex=880, loss=0.057163

[2026-01-23 23:07:35] 训练中:epoch=7/20, iktex=900, loss=0.063005

[2026-01-23 23:07:36] 训练中:epoch=7/20, iktex=920, loss=0.060645

[2026-01-23 23:07:36] 训练中:epoch=7/20, iktex=940, loss=0.063751

[2026-01-23 23:07:37] 验证完成:epoch=7, Qiknklex=4.090763, PIKCP=0.9064, PIKNAQ=0.821390, XMSE=1.228448, MAE=1.010437
[2026-01-23 23:07:37] 触发早停:连续未提升=5,最佳轮数=2
[2026-01-23 23:07:37] 全局最佳更新:Qiknklex=4.005013

[2026-01-23 23:07:37] 训练中:epoch=1/20, iktex=960, loss=0.860920

[2026-01-23 23:07:38] 训练中:epoch=1/20, iktex=980, loss=0.158716

[2026-01-23 23:07:38] 训练中:epoch=1/20, iktex=1000, loss=0.144198

[2026-01-23 23:07:39] 训练中:epoch=1/20, iktex=1020, loss=0.124056

[2026-01-23 23:07:40] 训练中:epoch=1/20, iktex=1040, loss=0.120736

[2026-01-23 23:07:40] 训练中:epoch=1/20, iktex=1060, loss=0.103645

[2026-01-23 23:07:41] 训练中:epoch=1/20, iktex=1080, loss=0.104403

[2026-01-23 23:07:42] 验证完成:epoch=1, Qiknklex=4.181751, PIKCP=0.9066, PIKNAQ=0.847021, XMSE=1.295005, MAE=1.056150
[2026-01-23 23:07:42] 局部最佳更新:已保存

[2026-01-23 23:07:42] 训练中:epoch=2/20, iktex=1100, loss=0.092310

[2026-01-23 23:07:42] 训练中:epoch=2/20, iktex=1120, loss=0.086536

[2026-01-23 23:07:43] 训练中:epoch=2/20, iktex=1140, loss=0.077397

[2026-01-23 23:07:43] 训练中:epoch=2/20, iktex=1160, loss=0.082265

[2026-01-23 23:07:44] 训练中:epoch=2/20, iktex=1180, loss=0.075100

[2026-01-23 23:07:44] 训练中:epoch=2/20, iktex=1200, loss=0.067033

[2026-01-23 23:07:45] 训练中:epoch=2/20, iktex=1220, loss=0.069635

[2026-01-23 23:07:46] 验证完成:epoch=2, Qiknklex=4.051044, PIKCP=0.9067, PIKNAQ=0.816943, XMSE=1.167477, MAE=0.964594
[2026-01-23 23:07:46] 局部最佳更新:已保存

[2026-01-23 23:07:46] 训练中:epoch=3/20, iktex=1240, loss=0.067233

[2026-01-23 23:07:46] 训练中:epoch=3/20, iktex=1260, loss=0.065926

[2026-01-23 23:07:47] 训练中:epoch=3/20, iktex=1280, loss=0.066429

[2026-01-23 23:07:48] 训练中:epoch=3/20, iktex=1300, loss=0.060842

[2026-01-23 23:07:48] 训练中:epoch=3/20, iktex=1320, loss=0.060935

[2026-01-23 23:07:49] 训练中:epoch=3/20, iktex=1340, loss=0.060048

[2026-01-23 23:07:49] 训练中:epoch=3/20, iktex=1360, loss=0.059814

[2026-01-23 23:07:50] 验证完成:epoch=3, Qiknklex=4.221568, PIKCP=0.9067, PIKNAQ=0.853392, XMSE=1.161040, MAE=0.950973

[2026-01-23 23:07:50] 训练中:epoch=4/20, iktex=1380, loss=0.059893

[2026-01-23 23:07:51] 训练中:epoch=4/20, iktex=1400, loss=0.055527

[2026-01-23 23:07:51] 训练中:epoch=4/20, iktex=1420, loss=0.064308

[2026-01-23 23:07:52] 训练中:epoch=4/20, iktex=1440, loss=0.055425

[2026-01-23 23:07:52] 训练中:epoch=4/20, iktex=1460, loss=0.061663

[2026-01-23 23:07:53] 训练中:epoch=4/20, iktex=1480, loss=0.052678

[2026-01-23 23:07:53] 训练中:epoch=4/20, iktex=1500, loss=0.059118

[2026-01-23 23:07:54] 验证完成:epoch=4, Qiknklex=4.098905, PIKCP=0.9062, PIKNAQ=0.827931, XMSE=1.130256, MAE=0.919270

[2026-01-23 23:07:54] 训练中:epoch=5/20, iktex=1520, loss=0.058028

[2026-01-23 23:07:55] 训练中:epoch=5/20, iktex=1540, loss=0.052749

[2026-01-23 23:07:55] 训练中:epoch=5/20, iktex=1560, loss=0.058408

[2026-01-23 23:07:56] 训练中:epoch=5/20, iktex=1580, loss=0.051878

[2026-01-23 23:07:56] 训练中:epoch=5/20, iktex=1600, loss=0.053321

[2026-01-23 23:07:57] 训练中:epoch=5/20, iktex=1620, loss=0.058963

[2026-01-23 23:07:57] 训练中:epoch=5/20, iktex=1640, loss=0.050205

[2026-01-23 23:07:58] 验证完成:epoch=5, Qiknklex=4.005280, PIKCP=0.9067, PIKNAQ=0.807820, XMSE=1.146445, MAE=0.944188
[2026-01-23 23:07:58] 局部最佳更新:已保存

[2026-01-23 23:07:58] 训练中:epoch=6/20, iktex=1660, loss=0.048430

[2026-01-23 23:07:59] 训练中:epoch=6/20, iktex=1680, loss=0.052873

[2026-01-23 23:07:59] 训练中:epoch=6/20, iktex=1700, loss=0.052667

[2026-01-23 23:08:00] 训练中:epoch=6/20, iktex=1720, loss=0.059582

[2026-01-23 23:08:01] 训练中:epoch=6/20, iktex=1740, loss=0.051832

[2026-01-23 23:08:01] 训练中:epoch=6/20, iktex=1760, loss=0.050716

[2026-01-23 23:08:02] 训练中:epoch=6/20, iktex=1780, loss=0.049118

[2026-01-23 23:08:02] 验证完成:epoch=6, Qiknklex=3.968919, PIKCP=0.9058, PIKNAQ=0.806403, XMSE=1.097767, MAE=0.901801
[2026-01-23 23:08:02] 局部最佳更新:已保存

[2026-01-23 23:08:02] 训练中:epoch=7/20, iktex=1800, loss=0.051962

[2026-01-23 23:08:03] 训练中:epoch=7/20, iktex=1820, loss=0.046567

[2026-01-23 23:08:04] 训练中:epoch=7/20, iktex=1840, loss=0.048685

[2026-01-23 23:08:04] 训练中:epoch=7/20, iktex=1860, loss=0.049883

[2026-01-23 23:08:05] 训练中:epoch=7/20, iktex=1880, loss=0.054812

[2026-01-23 23:08:05] 训练中:epoch=7/20, iktex=1900, loss=0.052192

[2026-01-23 23:08:06] 验证完成:epoch=7, Qiknklex=3.845402, PIKCP=0.9072, PIKNAQ=0.772040, XMSE=1.114578, MAE=0.919976
[2026-01-23 23:08:06] 局部最佳更新:已保存
[2026-01-23 23:08:06] 训练中:epoch=8/20, iktex=1920, loss=0.049634

[2026-01-23 23:08:06] 训练中:epoch=8/20, iktex=1940, loss=0.046239

[2026-01-23 23:08:07] 训练中:epoch=8/20, iktex=1960, loss=0.050643

[2026-01-23 23:08:07] 训练中:epoch=8/20, iktex=1980, loss=0.047175

[2026-01-23 23:08:08] 训练中:epoch=8/20, iktex=2000, loss=0.046469

[2026-01-23 23:08:09] 训练中:epoch=8/20, iktex=2020, loss=0.049340

[2026-01-23 23:08:09] 训练中:epoch=8/20, iktex=2040, loss=0.048753

[2026-01-23 23:08:10] 验证完成:epoch=8, Qiknklex=3.834707, PIKCP=0.9070, PIKNAQ=0.772746, XMSE=1.092641, MAE=0.894645
[2026-01-23 23:08:10] 局部最佳更新:已保存

[2026-01-23 23:08:10] 训练中:epoch=9/20, iktex=2060, loss=0.045200

[2026-01-23 23:08:11] 训练中:epoch=9/20, iktex=2080, loss=0.050423

[2026-01-23 23:08:11] 训练中:epoch=9/20, iktex=2100, loss=0.044466

[2026-01-23 23:08:12] 训练中:epoch=9/20, iktex=2120, loss=0.048279

[2026-01-23 23:08:12] 训练中:epoch=9/20, iktex=2140, loss=0.045528

[2026-01-23 23:08:13] 训练中:epoch=9/20, iktex=2160, loss=0.048428

[2026-01-23 23:08:13] 训练中:epoch=9/20, iktex=2180, loss=0.046112

[2026-01-23 23:08:14] 验证完成:epoch=9, Qiknklex=3.804436, PIKCP=0.9055, PIKNAQ=0.766781, XMSE=1.112412, MAE=0.910608
[2026-01-23 23:08:14] 局部最佳更新:已保存

[2026-01-23 23:08:14] 训练中:epoch=10/20, iktex=2200, loss=0.046522

[2026-01-23 23:08:15] 训练中:epoch=10/20, iktex=2220, loss=0.046682

[2026-01-23 23:08:15] 训练中:epoch=10/20, iktex=2240, loss=0.051665

[2026-01-23 23:08:16] 训练中:epoch=10/20, iktex=2260, loss=0.043885

[2026-01-23 23:08:17] 训练中:epoch=10/20, iktex=2280, loss=0.042999

[2026-01-23 23:08:17] 训练中:epoch=10/20, iktex=2300, loss=0.042024

[2026-01-23 23:08:18] 训练中:epoch=10/20, iktex=2320, loss=0.047523

[2026-01-23 23:08:18] 验证完成:epoch=10, Qiknklex=3.804986, PIKCP=0.9079, PIKNAQ=0.768131, XMSE=1.125304, MAE=0.931595

[2026-01-23 23:08:18] 训练中:epoch=11/20, iktex=2340, loss=0.041625

[2026-01-23 23:08:19] 训练中:epoch=11/20, iktex=2360, loss=0.051224

[2026-01-23 23:08:20] 训练中:epoch=11/20, iktex=2380, loss=0.043566

[2026-01-23 23:08:20] 训练中:epoch=11/20, iktex=2400, loss=0.042457

[2026-01-23 23:08:21] 训练中:epoch=11/20, iktex=2420, loss=0.042931

[2026-01-23 23:08:21] 训练中:epoch=11/20, iktex=2440, loss=0.044809

[2026-01-23 23:08:22] 训练中:epoch=11/20, iktex=2460, loss=0.042127

[2026-01-23 23:08:22] 验证完成:epoch=11, Qiknklex=3.777192, PIKCP=0.9066, PIKNAQ=0.766857, XMSE=1.116728, MAE=0.924026
[2026-01-23 23:08:22] 局部最佳更新:已保存

[2026-01-23 23:08:22] 训练中:epoch=12/20, iktex=2480, loss=0.042636

[2026-01-23 23:08:23] 训练中:epoch=12/20, iktex=2500, loss=0.039913

[2026-01-23 23:08:24] 训练中:epoch=12/20, iktex=2520, loss=0.042749

[2026-01-23 23:08:24] 训练中:epoch=12/20, iktex=2540, loss=0.045139

[2026-01-23 23:08:25] 训练中:epoch=12/20, iktex=2560, loss=0.046467

[2026-01-23 23:08:25] 训练中:epoch=12/20, iktex=2580, loss=0.043408

[2026-01-23 23:08:26] 训练中:epoch=12/20, iktex=2600, loss=0.039790

[2026-01-23 23:08:26] 验证完成:epoch=12, Qiknklex=3.791106, PIKCP=0.9067, PIKNAQ=0.766293, XMSE=1.141698, MAE=0.946187

[2026-01-23 23:08:27] 训练中:epoch=13/20, iktex=2620, loss=0.040876

[2026-01-23 23:08:27] 训练中:epoch=13/20, iktex=2640, loss=0.044801

[2026-01-23 23:08:28] 训练中:epoch=13/20, iktex=2660, loss=0.043969

[2026-01-23 23:08:28] 训练中:epoch=13/20, iktex=2680, loss=0.042796

[2026-01-23 23:08:29] 训练中:epoch=13/20, iktex=2700, loss=0.039108

[2026-01-23 23:08:29] 训练中:epoch=13/20, iktex=2720, loss=0.045056

[2026-01-23 23:08:30] 训练中:epoch=13/20, iktex=2740, loss=0.039756

[2026-01-23 23:08:30] 验证完成:epoch=13, Qiknklex=3.786519, PIKCP=0.9071, PIKNAQ=0.762022, XMSE=1.155193, MAE=0.959039

[2026-01-23 23:08:31] 训练中:epoch=14/20, iktex=2760, loss=0.044495

[2026-01-23 23:08:31] 训练中:epoch=14/20, iktex=2780, loss=0.041301

[2026-01-23 23:08:32] 训练中:epoch=14/20, iktex=2800, loss=0.048583

[2026-01-23 23:08:32] 训练中:epoch=14/20, iktex=2820, loss=0.044025

[2026-01-23 23:08:33] 训练中:epoch=14/20, iktex=2840, loss=0.042992

[2026-01-23 23:08:34] 训练中:epoch=14/20, iktex=2860, loss=0.037987

[2026-01-23 23:08:34] 验证完成:epoch=14, Qiknklex=3.740867, PIKCP=0.9066, PIKNAQ=0.753495, XMSE=1.125552, MAE=0.922413

[2026-01-23 23:08:34] 局部最佳更新:已保存
[2026-01-23 23:08:34] 训练中:epoch=15/20, iktex=2880, loss=0.040031

[2026-01-23 23:08:35] 训练中:epoch=15/20, iktex=2900, loss=0.040979

[2026-01-23 23:08:35] 训练中:epoch=15/20, iktex=2920, loss=0.042576

[2026-01-23 23:08:36] 训练中:epoch=15/20, iktex=2940, loss=0.041382

[2026-01-23 23:08:37] 训练中:epoch=15/20, iktex=2960, loss=0.042159

[2026-01-23 23:08:37] 训练中:epoch=15/20, iktex=2980, loss=0.041997

[2026-01-23 23:08:38] 训练中:epoch=15/20, iktex=3000, loss=0.041425

[2026-01-23 23:08:38] 验证完成:epoch=15, Qiknklex=3.725986, PIKCP=0.9074, PIKNAQ=0.748731, XMSE=1.146762, MAE=0.951064
[2026-01-23 23:08:38] 局部最佳更新:已保存

[2026-01-23 23:08:38] 训练中:epoch=16/20, iktex=3020, loss=0.037648

[2026-01-23 23:08:39] 训练中:epoch=16/20, iktex=3040, loss=0.042705

[2026-01-23 23:08:40] 训练中:epoch=16/20, iktex=3060, loss=0.041543

[2026-01-23 23:08:40] 训练中:epoch=16/20, iktex=3080, loss=0.040314

[2026-01-23 23:08:41] 训练中:epoch=16/20, iktex=3100, loss=0.039371

[2026-01-23 23:08:41] 训练中:epoch=16/20, iktex=3120, loss=0.043087

[2026-01-23 23:08:42] 训练中:epoch=16/20, iktex=3140, loss=0.040836

[2026-01-23 23:08:42] 验证完成:epoch=16, Qiknklex=3.738771, PIKCP=0.9065, PIKNAQ=0.754671, XMSE=1.139052, MAE=0.948702

[2026-01-23 23:08:43] 训练中:epoch=17/20, iktex=3160, loss=0.038850

[2026-01-23 23:08:43] 训练中:epoch=17/20, iktex=3180, loss=0.037109

[2026-01-23 23:08:44] 训练中:epoch=17/20, iktex=3200, loss=0.038443

[2026-01-23 23:08:44] 训练中:epoch=17/20, iktex=3220, loss=0.039239

[2026-01-23 23:08:45] 训练中:epoch=17/20, iktex=3240, loss=0.037578

[2026-01-23 23:08:45] 训练中:epoch=17/20, iktex=3260, loss=0.040781

[2026-01-23 23:08:46] 训练中:epoch=17/20, iktex=3280, loss=0.038754

[2026-01-23 23:08:46] 验证完成:epoch=17, Qiknklex=3.804862, PIKCP=0.9078, PIKNAQ=0.767774, XMSE=1.209587, MAE=1.007433

[2026-01-23 23:08:47] 训练中:epoch=18/20, iktex=3300, loss=0.037103

[2026-01-23 23:08:47] 训练中:epoch=18/20, iktex=3320, loss=0.042242

[2026-01-23 23:08:48] 训练中:epoch=18/20, iktex=3340, loss=0.038875

[2026-01-23 23:08:48] 训练中:epoch=18/20, iktex=3360, loss=0.039846

[2026-01-23 23:08:49] 训练中:epoch=18/20, iktex=3380, loss=0.037658

[2026-01-23 23:08:49] 训练中:epoch=18/20, iktex=3400, loss=0.039090

[2026-01-23 23:08:50] 训练中:epoch=18/20, iktex=3420, loss=0.041209

[2026-01-23 23:08:50] 验证完成:epoch=18, Qiknklex=3.812550, PIKCP=0.9075, PIKNAQ=0.769517, XMSE=1.160192, MAE=0.967097

[2026-01-23 23:08:51] 训练中:epoch=19/20, iktex=3440, loss=0.040472

[2026-01-23 23:08:51] 训练中:epoch=19/20, iktex=3460, loss=0.038570

[2026-01-23 23:08:52] 训练中:epoch=19/20, iktex=3480, loss=0.039023

[2026-01-23 23:08:52] 训练中:epoch=19/20, iktex=3500, loss=0.034988

[2026-01-23 23:08:53] 训练中:epoch=19/20, iktex=3520, loss=0.039085

[2026-01-23 23:08:53] 训练中:epoch=19/20, iktex=3540, loss=0.038884

[2026-01-23 23:08:54] 训练中:epoch=19/20, iktex=3560, loss=0.039652

[2026-01-23 23:08:54] 验证完成:epoch=19, Qiknklex=3.781602, PIKCP=0.9065, PIKNAQ=0.762410, XMSE=1.139120, MAE=0.939447

[2026-01-23 23:08:55] 训练中:epoch=20/20, iktex=3580, loss=0.039727

[2026-01-23 23:08:55] 训练中:epoch=20/20, iktex=3600, loss=0.038057

[2026-01-23 23:08:56] 训练中:epoch=20/20, iktex=3620, loss=0.032387

[2026-01-23 23:08:56] 训练中:epoch=20/20, iktex=3640, loss=0.039688

[2026-01-23 23:08:57] 训练中:epoch=20/20, iktex=3660, loss=0.035908

[2026-01-23 23:08:57] 训练中:epoch=20/20, iktex=3680, loss=0.037905

[2026-01-23 23:08:58] 验证完成:epoch=20, Qiknklex=3.774533, PIKCP=0.9074, PIKNAQ=0.756469, XMSE=1.121989, MAE=0.917508
[2026-01-23 23:08:58] 触发早停:连续未提升=5,最佳轮数=15

[2026-01-23 23:08:58] 全局最佳更新:Qiknklex=3.725986

[2026-01-23 23:08:58] 训练中:epoch=1/20, iktex=3700, loss=0.932480

[2026-01-23 23:08:59] 训练中:epoch=1/20, iktex=3720, loss=0.139750

[2026-01-23 23:08:59] 训练中:epoch=1/20, iktex=3740, loss=0.137264

[2026-01-23 23:09:00] 训练中:epoch=1/20, iktex=3760, loss=0.130016

[2026-01-23 23:09:00] 训练中:epoch=1/20, iktex=3780, loss=0.122526

[2026-01-23 23:09:01] 训练中:epoch=1/20, iktex=3800, loss=0.104247

[2026-01-23 23:09:02] 训练中:epoch=1/20, iktex=3820, loss=0.099447

[2026-01-23 23:09:02] 验证完成:epoch=1, Qiknklex=4.268689, PIKCP=0.9074, PIKNAQ=0.869939, XMSE=1.303407, MAE=1.068304

[2026-01-23 23:09:02] 局部最佳更新:已保存

[2026-01-23 23:09:03] 训练中:epoch=2/20, iktex=3840, loss=0.086560

[2026-01-23 23:09:03] 训练中:epoch=2/20, iktex=3860, loss=0.080744

[2026-01-23 23:09:04] 训练中:epoch=2/20, iktex=3880, loss=0.082784

[2026-01-23 23:09:04] 训练中:epoch=2/20, iktex=3900, loss=0.074277

[2026-01-23 23:09:05] 训练中:epoch=2/20, iktex=3920, loss=0.073103

[2026-01-23 23:09:05] 训练中:epoch=2/20, iktex=3940, loss=0.064444

[2026-01-23 23:09:06] 训练中:epoch=2/20, iktex=3960, loss=0.068517

[2026-01-23 23:09:06] 验证完成:epoch=2, Qiknklex=3.954774, PIKCP=0.9076, PIKNAQ=0.801480, XMSE=1.120693, MAE=0.928539
[2026-01-23 23:09:06] 局部最佳更新:已保存

[2026-01-23 23:09:07] 训练中:epoch=3/20, iktex=3980, loss=0.072877

[2026-01-23 23:09:07] 训练中:epoch=3/20, iktex=4000, loss=0.059528

[2026-01-23 23:09:08] 训练中:epoch=3/20, iktex=4020, loss=0.057933

[2026-01-23 23:09:08] 训练中:epoch=3/20, iktex=4040, loss=0.060783

[2026-01-23 23:09:09] 训练中:epoch=3/20, iktex=4060, loss=0.057317

[2026-01-23 23:09:09] 训练中:epoch=3/20, iktex=4080, loss=0.060324

[2026-01-23 23:09:10] 训练中:epoch=3/20, iktex=4100, loss=0.055053

[2026-01-23 23:09:11] 验证完成:epoch=3, Qiknklex=3.918969, PIKCP=0.9069, PIKNAQ=0.797212, XMSE=1.061928, MAE=0.880649
[2026-01-23 23:09:11] 局部最佳更新:已保存

[2026-01-23 23:09:11] 训练中:epoch=4/20, iktex=4120, loss=0.056425

[2026-01-23 23:09:11] 训练中:epoch=4/20, iktex=4140, loss=0.051915

[2026-01-23 23:09:12] 训练中:epoch=4/20, iktex=4160, loss=0.052930

[2026-01-23 23:09:12] 训练中:epoch=4/20, iktex=4180, loss=0.056514

[2026-01-23 23:09:13] 训练中:epoch=4/20, iktex=4200, loss=0.053353

[2026-01-23 23:09:13] 训练中:epoch=4/20, iktex=4220, loss=0.055285

[2026-01-23 23:09:14] 训练中:epoch=4/20, iktex=4240, loss=0.049254

[2026-01-23 23:09:15] 验证完成:epoch=4, Qiknklex=3.903138, PIKCP=0.9068, PIKNAQ=0.798553, XMSE=0.997896, MAE=0.813379
[2026-01-23 23:09:15] 局部最佳更新:已保存

[2026-01-23 23:09:15] 训练中:epoch=5/20, iktex=4260, loss=0.051610

[2026-01-23 23:09:15] 训练中:epoch=5/20, iktex=4280, loss=0.046126

[2026-01-23 23:09:16] 训练中:epoch=5/20, iktex=4300, loss=0.047212

[2026-01-23 23:09:16] 训练中:epoch=5/20, iktex=4320, loss=0.049346

[2026-01-23 23:09:17] 训练中:epoch=5/20, iktex=4340, loss=0.048544

[2026-01-23 23:09:18] 训练中:epoch=5/20, iktex=4360, loss=0.046341

[2026-01-23 23:09:18] 训练中:epoch=5/20, iktex=4380, loss=0.053760

[2026-01-23 23:09:19] 验证完成:epoch=5, Qiknklex=3.732468, PIKCP=0.9076, PIKNAQ=0.762247, XMSE=0.969118, MAE=0.776294
[2026-01-23 23:09:19] 局部最佳更新:已保存

[2026-01-23 23:09:19] 训练中:epoch=6/20, iktex=4400, loss=0.048731

[2026-01-23 23:09:20] 训练中:epoch=6/20, iktex=4420, loss=0.047732

[2026-01-23 23:09:20] 训练中:epoch=6/20, iktex=4440, loss=0.046770

[2026-01-23 23:09:21] 训练中:epoch=6/20, iktex=4460, loss=0.047082

[2026-01-23 23:09:21] 训练中:epoch=6/20, iktex=4480, loss=0.045718

[2026-01-23 23:09:22] 训练中:epoch=6/20, iktex=4500, loss=0.042532

[2026-01-23 23:09:22] 训练中:epoch=6/20, iktex=4520, loss=0.049677

[2026-01-23 23:09:23] 验证完成:epoch=6, Qiknklex=3.683563, PIKCP=0.9067, PIKNAQ=0.758399, XMSE=0.961492, MAE=0.762792
[2026-01-23 23:09:23] 局部最佳更新:已保存

[2026-01-23 23:09:23] 训练中:epoch=7/20, iktex=4540, loss=0.046686

[2026-01-23 23:09:24] 训练中:epoch=7/20, iktex=4560, loss=0.047772

[2026-01-23 23:09:24] 训练中:epoch=7/20, iktex=4580, loss=0.044590

[2026-01-23 23:09:25] 训练中:epoch=7/20, iktex=4600, loss=0.045578

[2026-01-23 23:09:25] 训练中:epoch=7/20, iktex=4620, loss=0.044463

[2026-01-23 23:09:26] 训练中:epoch=7/20, iktex=4640, loss=0.047833

[2026-01-23 23:09:27] 验证完成:epoch=7, Qiknklex=3.614600, PIKCP=0.9067, PIKNAQ=0.744200, XMSE=0.930331, MAE=0.735632
[2026-01-23 23:09:27] 局部最佳更新:已保存
[2026-01-23 23:09:27] 训练中:epoch=8/20, iktex=4660, loss=0.039909

[2026-01-23 23:09:27] 训练中:epoch=8/20, iktex=4680, loss=0.043527

[2026-01-23 23:09:28] 训练中:epoch=8/20, iktex=4700, loss=0.044096

[2026-01-23 23:09:28] 训练中:epoch=8/20, iktex=4720, loss=0.045730

[2026-01-23 23:09:29] 训练中:epoch=8/20, iktex=4740, loss=0.040740

[2026-01-23 23:09:30] 训练中:epoch=8/20, iktex=4760, loss=0.039558

[2026-01-23 23:09:30] 训练中:epoch=8/20, iktex=4780, loss=0.042520

[2026-01-23 23:09:31] 验证完成:epoch=8, Qiknklex=3.665178, PIKCP=0.9078, PIKNAQ=0.766281, XMSE=1.004795, MAE=0.830791

[2026-01-23 23:09:31] 训练中:epoch=9/20, iktex=4800, loss=0.046374

[2026-01-23 23:09:31] 训练中:epoch=9/20, iktex=4820, loss=0.042302

[2026-01-23 23:09:32] 训练中:epoch=9/20, iktex=4840, loss=0.038452

[2026-01-23 23:09:33] 训练中:epoch=9/20, iktex=4860, loss=0.040422

[2026-01-23 23:09:33] 训练中:epoch=9/20, iktex=4880, loss=0.042409

[2026-01-23 23:09:34] 训练中:epoch=9/20, iktex=4900, loss=0.043372

[2026-01-23 23:09:34] 训练中:epoch=9/20, iktex=4920, loss=0.045334

[2026-01-23 23:09:35] 验证完成:epoch=9, Qiknklex=3.561740, PIKCP=0.9063, PIKNAQ=0.742431, XMSE=0.941525, MAE=0.762033
[2026-01-23 23:09:35] 局部最佳更新:已保存

[2026-01-23 23:09:35] 训练中:epoch=10/20, iktex=4940, loss=0.042799

[2026-01-23 23:09:36] 训练中:epoch=10/20, iktex=4960, loss=0.041706

[2026-01-23 23:09:36] 训练中:epoch=10/20, iktex=4980, loss=0.042244

[2026-01-23 23:09:37] 训练中:epoch=10/20, iktex=5000, loss=0.040403

[2026-01-23 23:09:37] 训练中:epoch=10/20, iktex=5020, loss=0.041230

[2026-01-23 23:09:38] 训练中:epoch=10/20, iktex=5040, loss=0.046479

[2026-01-23 23:09:38] 训练中:epoch=10/20, iktex=5060, loss=0.040742

[2026-01-23 23:09:39] 验证完成:epoch=10, Qiknklex=3.653730, PIKCP=0.9079, PIKNAQ=0.758741, XMSE=0.967522, MAE=0.780646

[2026-01-23 23:09:39] 训练中:epoch=11/20, iktex=5080, loss=0.040060

[2026-01-23 23:09:40] 训练中:epoch=11/20, iktex=5100, loss=0.041621

[2026-01-23 23:09:40] 训练中:epoch=11/20, iktex=5120, loss=0.034015

[2026-01-23 23:09:41] 训练中:epoch=11/20, iktex=5140, loss=0.039281

[2026-01-23 23:09:41] 训练中:epoch=11/20, iktex=5160, loss=0.039693

[2026-01-23 23:09:42] 训练中:epoch=11/20, iktex=5180, loss=0.035543

[2026-01-23 23:09:42] 训练中:epoch=11/20, iktex=5200, loss=0.044112

[2026-01-23 23:09:43] 验证完成:epoch=11, Qiknklex=3.459757, PIKCP=0.9068, PIKNAQ=0.722508, XMSE=0.917291, MAE=0.730057
[2026-01-23 23:09:43] 局部最佳更新:已保存

[2026-01-23 23:09:43] 训练中:epoch=12/20, iktex=5220, loss=0.039600

[2026-01-23 23:09:44] 训练中:epoch=12/20, iktex=5240, loss=0.045898

[2026-01-23 23:09:44] 训练中:epoch=12/20, iktex=5260, loss=0.043219

[2026-01-23 23:09:45] 训练中:epoch=12/20, iktex=5280, loss=0.039660

[2026-01-23 23:09:45] 训练中:epoch=12/20, iktex=5300, loss=0.041692

[2026-01-23 23:09:46] 训练中:epoch=12/20, iktex=5320, loss=0.037741

[2026-01-23 23:09:46] 训练中:epoch=12/20, iktex=5340, loss=0.037461

[2026-01-23 23:09:47] 验证完成:epoch=12, Qiknklex=3.511719, PIKCP=0.9069, PIKNAQ=0.732485, XMSE=0.903419, MAE=0.725070

[2026-01-23 23:09:47] 训练中:epoch=13/20, iktex=5360, loss=0.035390

[2026-01-23 23:09:48] 训练中:epoch=13/20, iktex=5380, loss=0.042260

[2026-01-23 23:09:48] 训练中:epoch=13/20, iktex=5400, loss=0.034536

[2026-01-23 23:09:49] 训练中:epoch=13/20, iktex=5420, loss=0.040676

[2026-01-23 23:09:49] 训练中:epoch=13/20, iktex=5440, loss=0.039485

[2026-01-23 23:09:50] 训练中:epoch=13/20, iktex=5460, loss=0.035863

[2026-01-23 23:09:50] 训练中:epoch=13/20, iktex=5480, loss=0.039639

[2026-01-23 23:09:51] 验证完成:epoch=13, Qiknklex=3.496618, PIKCP=0.9070, PIKNAQ=0.729828, XMSE=0.913820, MAE=0.737930

[2026-01-23 23:09:51] 训练中:epoch=14/20, iktex=5500, loss=0.035177

[2026-01-23 23:09:52] 训练中:epoch=14/20, iktex=5520, loss=0.037038

[2026-01-23 23:09:52] 训练中:epoch=14/20, iktex=5540, loss=0.037671

[2026-01-23 23:09:53] 训练中:epoch=14/20, iktex=5560, loss=0.039052

[2026-01-23 23:09:53] 训练中:epoch=14/20, iktex=5580, loss=0.037647

[2026-01-23 23:09:54] 训练中:epoch=14/20, iktex=5600, loss=0.038170

[2026-01-23 23:09:55] 验证完成:epoch=14, Qiknklex=3.471343, PIKCP=0.9082, PIKNAQ=0.720900, XMSE=0.907127, MAE=0.721938

[2026-01-23 23:09:55] 训练中:epoch=15/20, iktex=5620, loss=0.043980

[2026-01-23 23:09:55] 训练中:epoch=15/20, iktex=5640, loss=0.039260

[2026-01-23 23:09:56] 训练中:epoch=15/20, iktex=5660, loss=0.037970

[2026-01-23 23:09:57] 训练中:epoch=15/20, iktex=5680, loss=0.038738

[2026-01-23 23:09:57] 训练中:epoch=15/20, iktex=5700, loss=0.038450

[2026-01-23 23:09:58] 训练中:epoch=15/20, iktex=5720, loss=0.035306

[2026-01-23 23:09:58] 训练中:epoch=15/20, iktex=5740, loss=0.042259

[2026-01-23 23:09:59] 验证完成:epoch=15, Qiknklex=3.377705, PIKCP=0.9063, PIKNAQ=0.700764, XMSE=0.878155, MAE=0.699985

[2026-01-23 23:09:59] 局部最佳更新:已保存

[2026-01-23 23:09:59] 训练中:epoch=16/20, iktex=5760, loss=0.042041

[2026-01-23 23:10:00] 训练中:epoch=16/20, iktex=5780, loss=0.039398

[2026-01-23 23:10:00] 训练中:epoch=16/20, iktex=5800, loss=0.037828

[2026-01-23 23:10:01] 训练中:epoch=16/20, iktex=5820, loss=0.038113

[2026-01-23 23:10:01] 训练中:epoch=16/20, iktex=5840, loss=0.043081

[2026-01-23 23:10:02] 训练中:epoch=16/20, iktex=5860, loss=0.038079

[2026-01-23 23:10:02] 训练中:epoch=16/20, iktex=5880, loss=0.038454

[2026-01-23 23:10:03] 验证完成:epoch=16, Qiknklex=3.408027, PIKCP=0.9076, PIKNAQ=0.717492, XMSE=0.879575, MAE=0.713902

[2026-01-23 23:10:03] 训练中:epoch=17/20, iktex=5900, loss=0.038945

[2026-01-23 23:10:04] 训练中:epoch=17/20, iktex=5920, loss=0.036040

[2026-01-23 23:10:05] 训练中:epoch=17/20, iktex=5940, loss=0.037366

[2026-01-23 23:10:05] 训练中:epoch=17/20, iktex=5960, loss=0.038304

[2026-01-23 23:10:06] 训练中:epoch=17/20, iktex=5980, loss=0.035945

[2026-01-23 23:10:06] 训练中:epoch=17/20, iktex=6000, loss=0.035751

[2026-01-23 23:10:07] 训练中:epoch=17/20, iktex=6020, loss=0.040868

[2026-01-23 23:10:07] 验证完成:epoch=17, Qiknklex=3.438999, PIKCP=0.9086, PIKNAQ=0.720177, XMSE=0.910625, MAE=0.722429

[2026-01-23 23:10:08] 训练中:epoch=18/20, iktex=6040, loss=0.039404

[2026-01-23 23:10:08] 训练中:epoch=18/20, iktex=6060, loss=0.038148

[2026-01-23 23:10:09] 训练中:epoch=18/20, iktex=6080, loss=0.039424

[2026-01-23 23:10:09] 训练中:epoch=18/20, iktex=6100, loss=0.035449

[2026-01-23 23:10:10] 训练中:epoch=18/20, iktex=6120, loss=0.035167

[2026-01-23 23:10:10] 训练中:epoch=18/20, iktex=6140, loss=0.038786

[2026-01-23 23:10:11] 训练中:epoch=18/20, iktex=6160, loss=0.035845

[2026-01-23 23:10:12] 验证完成:epoch=18, Qiknklex=3.421747, PIKCP=0.9073, PIKNAQ=0.717071, XMSE=0.882684, MAE=0.708685

[2026-01-23 23:10:12] 训练中:epoch=19/20, iktex=6180, loss=0.039983

[2026-01-23 23:10:13] 训练中:epoch=19/20, iktex=6200, loss=0.044588

[2026-01-23 23:10:13] 训练中:epoch=19/20, iktex=6220, loss=0.038422

[2026-01-23 23:10:14] 训练中:epoch=19/20, iktex=6240, loss=0.035414

[2026-01-23 23:10:14] 训练中:epoch=19/20, iktex=6260, loss=0.038103

[2026-01-23 23:10:15] 训练中:epoch=19/20, iktex=6280, loss=0.036731

[2026-01-23 23:10:15] 训练中:epoch=19/20, iktex=6300, loss=0.033819

[2026-01-23 23:10:16] 验证完成:epoch=19, Qiknklex=3.332027, PIKCP=0.9066, PIKNAQ=0.696941, XMSE=0.862939, MAE=0.686658
[2026-01-23 23:10:16] 局部最佳更新:已保存

[2026-01-23 23:10:16] 训练中:epoch=20/20, iktex=6320, loss=0.033683

[2026-01-23 23:10:17] 训练中:epoch=20/20, iktex=6340, loss=0.038108

[2026-01-23 23:10:17] 训练中:epoch=20/20, iktex=6360, loss=0.038622

[2026-01-23 23:10:18] 训练中:epoch=20/20, iktex=6380, loss=0.038040

[2026-01-23 23:10:18] 训练中:epoch=20/20, iktex=6400, loss=0.037609

[2026-01-23 23:10:19] 训练中:epoch=20/20, iktex=6420, loss=0.038757

[2026-01-23 23:10:20] 验证完成:epoch=20, Qiknklex=3.333396, PIKCP=0.9073, PIKNAQ=0.699878, XMSE=0.889891, MAE=0.708473
[2026-01-23 23:10:20] 全局最佳更新:Qiknklex=3.332027

[2026-01-23 23:10:20] 训练中:epoch=1/20, iktex=6440, loss=0.851661

[2026-01-23 23:10:21] 训练中:epoch=1/20, iktex=6460, loss=0.162247

[2026-01-23 23:10:21] 训练中:epoch=1/20, iktex=6480, loss=0.146347

[2026-01-23 23:10:22] 训练中:epoch=1/20, iktex=6500, loss=0.136833

[2026-01-23 23:10:23] 训练中:epoch=1/20, iktex=6520, loss=0.122828

[2026-01-23 23:10:23] 训练中:epoch=1/20, iktex=6540, loss=0.136476

[2026-01-23 23:10:24] 训练中:epoch=1/20, iktex=6560, loss=0.118160

[2026-01-23 23:10:25] 验证完成:epoch=1, Qiknklex=3.648886, PIKCP=0.9072, PIKNAQ=0.742375, XMSE=1.188421, MAE=0.961844
[2026-01-23 23:10:25] 局部最佳更新:已保存

[2026-01-23 23:10:25] 训练中:epoch=2/20, iktex=6580, loss=0.120341

[2026-01-23 23:10:26] 训练中:epoch=2/20, iktex=6600, loss=0.112726

[2026-01-23 23:10:27] 训练中:epoch=2/20, iktex=6620, loss=0.107463

[2026-01-23 23:10:27] 训练中:epoch=2/20, iktex=6640, loss=0.113528

[2026-01-23 23:10:28] 训练中:epoch=2/20, iktex=6660, loss=0.095209

[2026-01-23 23:10:29] 训练中:epoch=2/20, iktex=6680, loss=0.095922

[2026-01-23 23:10:29] 训练中:epoch=2/20, iktex=6700, loss=0.086298

[2026-01-23 23:10:30] 验证完成:epoch=2, Qiknklex=3.996432, PIKCP=0.9074, PIKNAQ=0.790491, XMSE=1.256617, MAE=1.038839

[2026-01-23 23:10:30] 训练中:epoch=3/20, iktex=6720, loss=0.084873

[2026-01-23 23:10:31] 训练中:epoch=3/20, iktex=6740, loss=0.083313

[2026-01-23 23:10:32] 训练中:epoch=3/20, iktex=6760, loss=0.076218

[2026-01-23 23:10:32] 训练中:epoch=3/20, iktex=6780, loss=0.072304

[2026-01-23 23:10:33] 训练中:epoch=3/20, iktex=6800, loss=0.071137

[2026-01-23 23:10:34] 训练中:epoch=3/20, iktex=6820, loss=0.068352

[2026-01-23 23:10:34] 训练中:epoch=3/20, iktex=6840, loss=0.070639

[2026-01-23 23:10:35] 验证完成:epoch=3, Qiknklex=3.958692, PIKCP=0.9068, PIKNAQ=0.790362, XMSE=1.237926, MAE=1.035081

[2026-01-23 23:10:36] 训练中:epoch=4/20, iktex=6860, loss=0.064333

[2026-01-23 23:10:36] 训练中:epoch=4/20, iktex=6880, loss=0.067333

[2026-01-23 23:10:37] 训练中:epoch=4/20, iktex=6900, loss=0.066099

[2026-01-23 23:10:38] 训练中:epoch=4/20, iktex=6920, loss=0.064789

[2026-01-23 23:10:38] 训练中:epoch=4/20, iktex=6940, loss=0.066907

[2026-01-23 23:10:39] 训练中:epoch=4/20, iktex=6960, loss=0.061013

[2026-01-23 23:10:40] 训练中:epoch=4/20, iktex=6980, loss=0.069156

[2026-01-23 23:10:41] 验证完成:epoch=4, Qiknklex=3.874554, PIKCP=0.9062, PIKNAQ=0.781198, XMSE=1.140392, MAE=0.951606

[2026-01-23 23:10:41] 训练中:epoch=5/20, iktex=7000, loss=0.062560

[2026-01-23 23:10:42] 训练中:epoch=5/20, iktex=7020, loss=0.062390

[2026-01-23 23:10:42] 训练中:epoch=5/20, iktex=7040, loss=0.063726

[2026-01-23 23:10:43] 训练中:epoch=5/20, iktex=7060, loss=0.056979

[2026-01-23 23:10:44] 训练中:epoch=5/20, iktex=7080, loss=0.060232

[2026-01-23 23:10:44] 训练中:epoch=5/20, iktex=7100, loss=0.058050

[2026-01-23 23:10:45] 训练中:epoch=5/20, iktex=7120, loss=0.058341

[2026-01-23 23:10:46] 验证完成:epoch=5, Qiknklex=3.919015, PIKCP=0.9064, PIKNAQ=0.790190, XMSE=1.183362, MAE=0.983411

[2026-01-23 23:10:46] 训练中:epoch=6/20, iktex=7140, loss=0.062813

[2026-01-23 23:10:47] 训练中:epoch=6/20, iktex=7160, loss=0.060179

[2026-01-23 23:10:48] 训练中:epoch=6/20, iktex=7180, loss=0.055944

[2026-01-23 23:10:48] 训练中:epoch=6/20, iktex=7200, loss=0.056524

[2026-01-23 23:10:49] 训练中:epoch=6/20, iktex=7220, loss=0.063262

[2026-01-23 23:10:50] 训练中:epoch=6/20, iktex=7240, loss=0.058930

[2026-01-23 23:10:51] 训练中:epoch=6/20, iktex=7260, loss=0.053458

[2026-01-23 23:10:51] 验证完成:epoch=6, Qiknklex=3.834854, PIKCP=0.9078, PIKNAQ=0.774666, XMSE=1.088302, MAE=0.896636
[2026-01-23 23:10:51] 触发早停:连续未提升=5,最佳轮数=1

[2026-01-23 23:10:51] 训练中:epoch=1/20, iktex=6440, loss=0.953235

[2026-01-23 23:10:52] 训练中:epoch=1/20, iktex=6460, loss=0.151933

[2026-01-23 23:10:53] 训练中:epoch=1/20, iktex=6480, loss=0.135448

[2026-01-23 23:10:53] 训练中:epoch=1/20, iktex=6500, loss=0.135648

[2026-01-23 23:10:54] 训练中:epoch=1/20, iktex=6520, loss=0.122958

[2026-01-23 23:10:55] 训练中:epoch=1/20, iktex=6540, loss=0.117532

[2026-01-23 23:10:55] 训练中:epoch=1/20, iktex=6560, loss=0.111491

[2026-01-23 23:10:57] 验证完成:epoch=1, Qiknklex=3.760019, PIKCP=0.9075, PIKNAQ=0.758693, XMSE=1.269382, MAE=1.031497
[2026-01-23 23:10:57] 局部最佳更新:已保存

[2026-01-23 23:10:57] 训练中:epoch=2/20, iktex=6580, loss=0.096829

[2026-01-23 23:10:57] 训练中:epoch=2/20, iktex=6600, loss=0.089342

[2026-01-23 23:10:58] 训练中:epoch=2/20, iktex=6620, loss=0.086582

[2026-01-23 23:10:59] 训练中:epoch=2/20, iktex=6640, loss=0.078898

[2026-01-23 23:10:59] 训练中:epoch=2/20, iktex=6660, loss=0.074886

[2026-01-23 23:11:00] 训练中:epoch=2/20, iktex=6680, loss=0.074087

[2026-01-23 23:11:01] 训练中:epoch=2/20, iktex=6700, loss=0.075074

[2026-01-23 23:11:02] 验证完成:epoch=2, Qiknklex=3.876203, PIKCP=0.9065, PIKNAQ=0.779981, XMSE=1.116392, MAE=0.930646

[2026-01-23 23:11:02] 训练中:epoch=3/20, iktex=6720, loss=0.068018

[2026-01-23 23:11:03] 训练中:epoch=3/20, iktex=6740, loss=0.063182

[2026-01-23 23:11:03] 训练中:epoch=3/20, iktex=6760, loss=0.060515

[2026-01-23 23:11:04] 训练中:epoch=3/20, iktex=6780, loss=0.071454

[2026-01-23 23:11:05] 训练中:epoch=3/20, iktex=6800, loss=0.064588

[2026-01-23 23:11:05] 训练中:epoch=3/20, iktex=6820, loss=0.056062

[2026-01-23 23:11:06] 训练中:epoch=3/20, iktex=6840, loss=0.060753

[2026-01-23 23:11:07] 验证完成:epoch=3, Qiknklex=3.845525, PIKCP=0.9073, PIKNAQ=0.782001, XMSE=1.040730, MAE=0.861031

[2026-01-23 23:11:07] 训练中:epoch=4/20, iktex=6860, loss=0.055261

[2026-01-23 23:11:08] 训练中:epoch=4/20, iktex=6880, loss=0.055593

[2026-01-23 23:11:09] 训练中:epoch=4/20, iktex=6900, loss=0.056181

[2026-01-23 23:11:09] 训练中:epoch=4/20, iktex=6920, loss=0.055293

[2026-01-23 23:11:10] 训练中:epoch=4/20, iktex=6940, loss=0.058089

[2026-01-23 23:11:11] 训练中:epoch=4/20, iktex=6960, loss=0.055911

[2026-01-23 23:11:11] 训练中:epoch=4/20, iktex=6980, loss=0.054936

[2026-01-23 23:11:12] 验证完成:epoch=4, Qiknklex=3.756784, PIKCP=0.9085, PIKNAQ=0.760426, XMSE=1.002930, MAE=0.813929
[2026-01-23 23:11:12] 局部最佳更新:已保存

[2026-01-23 23:11:12] 训练中:epoch=5/20, iktex=7000, loss=0.054989

[2026-01-23 23:11:13] 训练中:epoch=5/20, iktex=7020, loss=0.058348

[2026-01-23 23:11:14] 训练中:epoch=5/20, iktex=7040, loss=0.052706

[2026-01-23 23:11:15] 训练中:epoch=5/20, iktex=7060, loss=0.056892

[2026-01-23 23:11:15] 训练中:epoch=5/20, iktex=7080, loss=0.050275

[2026-01-23 23:11:16] 训练中:epoch=5/20, iktex=7100, loss=0.046537

[2026-01-23 23:11:17] 训练中:epoch=5/20, iktex=7120, loss=0.050664

[2026-01-23 23:11:17] 验证完成:epoch=5, Qiknklex=3.750979, PIKCP=0.9070, PIKNAQ=0.752285, XMSE=1.004566, MAE=0.821067
[2026-01-23 23:11:17] 局部最佳更新:已保存

[2026-01-23 23:11:18] 训练中:epoch=6/20, iktex=7140, loss=0.048742

[2026-01-23 23:11:18] 训练中:epoch=6/20, iktex=7160, loss=0.049071

[2026-01-23 23:11:19] 训练中:epoch=6/20, iktex=7180, loss=0.047408

[2026-01-23 23:11:20] 训练中:epoch=6/20, iktex=7200, loss=0.055687

[2026-01-23 23:11:21] 训练中:epoch=6/20, iktex=7220, loss=0.046343

[2026-01-23 23:11:21] 训练中:epoch=6/20, iktex=7240, loss=0.046806

[2026-01-23 23:11:22] 训练中:epoch=6/20, iktex=7260, loss=0.049706

[2026-01-23 23:11:22] 验证完成:epoch=6, Qiknklex=3.619815, PIKCP=0.9074, PIKNAQ=0.738809, XMSE=1.005372, MAE=0.820037

[2026-01-23 23:11:22] 局部最佳更新:已保存

[2026-01-23 23:11:23] 训练中:epoch=7/20, iktex=7280, loss=0.049310

[2026-01-23 23:11:24] 训练中:epoch=7/20, iktex=7300, loss=0.046511

[2026-01-23 23:11:25] 训练中:epoch=7/20, iktex=7320, loss=0.043446

[2026-01-23 23:11:25] 训练中:epoch=7/20, iktex=7340, loss=0.045346

[2026-01-23 23:11:26] 训练中:epoch=7/20, iktex=7360, loss=0.043280

[2026-01-23 23:11:27] 训练中:epoch=7/20, iktex=7380, loss=0.044766

[2026-01-23 23:11:28] 验证完成:epoch=7, Qiknklex=3.632735, PIKCP=0.9079, PIKNAQ=0.734281, XMSE=1.009539, MAE=0.820157

[2026-01-23 23:11:28] 训练中:epoch=8/20, iktex=7400, loss=0.047543

[2026-01-23 23:11:29] 训练中:epoch=8/20, iktex=7420, loss=0.046563

[2026-01-23 23:11:29] 训练中:epoch=8/20, iktex=7440, loss=0.048910

[2026-01-23 23:11:30] 训练中:epoch=8/20, iktex=7460, loss=0.045095

[2026-01-23 23:11:31] 训练中:epoch=8/20, iktex=7480, loss=0.043727

[2026-01-23 23:11:31] 训练中:epoch=8/20, iktex=7500, loss=0.046645

[2026-01-23 23:11:32] 训练中:epoch=8/20, iktex=7520, loss=0.044272

[2026-01-23 23:11:33] 验证完成:epoch=8, Qiknklex=3.718437, PIKCP=0.9072, PIKNAQ=0.753788, XMSE=1.047985, MAE=0.864684

[2026-01-23 23:11:33] 训练中:epoch=9/20, iktex=7540, loss=0.042891

[2026-01-23 23:11:34] 训练中:epoch=9/20, iktex=7560, loss=0.039510

[2026-01-23 23:11:34] 训练中:epoch=9/20, iktex=7580, loss=0.046423

[2026-01-23 23:11:35] 训练中:epoch=9/20, iktex=7600, loss=0.042364

[2026-01-23 23:11:36] 训练中:epoch=9/20, iktex=7620, loss=0.040799

[2026-01-23 23:11:36] 训练中:epoch=9/20, iktex=7640, loss=0.041713

[2026-01-23 23:11:37] 训练中:epoch=9/20, iktex=7660, loss=0.043977

[2026-01-23 23:11:38] 验证完成:epoch=9, Qiknklex=3.596790, PIKCP=0.9080, PIKNAQ=0.728834, XMSE=0.999317, MAE=0.808859
[2026-01-23 23:11:38] 局部最佳更新:已保存

[2026-01-23 23:11:38] 训练中:epoch=10/20, iktex=7680, loss=0.043836

[2026-01-23 23:11:39] 训练中:epoch=10/20, iktex=7700, loss=0.042421

[2026-01-23 23:11:40] 训练中:epoch=10/20, iktex=7720, loss=0.042794

[2026-01-23 23:11:40] 训练中:epoch=10/20, iktex=7740, loss=0.045238

[2026-01-23 23:11:41] 训练中:epoch=10/20, iktex=7760, loss=0.042949

[2026-01-23 23:11:42] 训练中:epoch=10/20, iktex=7780, loss=0.040562

[2026-01-23 23:11:42] 训练中:epoch=10/20, iktex=7800, loss=0.047189

[2026-01-23 23:11:43] 验证完成:epoch=10, Qiknklex=3.562074, PIKCP=0.9069, PIKNAQ=0.715194, XMSE=1.036053, MAE=0.851129
[2026-01-23 23:11:43] 局部最佳更新:已保存

[2026-01-23 23:11:43] 训练中:epoch=11/20, iktex=7820, loss=0.043506

[2026-01-23 23:11:44] 训练中:epoch=11/20, iktex=7840, loss=0.041771

[2026-01-23 23:11:45] 训练中:epoch=11/20, iktex=7860, loss=0.039531

[2026-01-23 23:11:45] 训练中:epoch=11/20, iktex=7880, loss=0.040604

[2026-01-23 23:11:46] 训练中:epoch=11/20, iktex=7900, loss=0.037173

[2026-01-23 23:11:47] 训练中:epoch=11/20, iktex=7920, loss=0.039613

[2026-01-23 23:11:47] 训练中:epoch=11/20, iktex=7940, loss=0.041638

[2026-01-23 23:11:48] 验证完成:epoch=11, Qiknklex=3.594123, PIKCP=0.9077, PIKNAQ=0.726848, XMSE=1.047286, MAE=0.859422

[2026-01-23 23:11:48] 训练中:epoch=12/20, iktex=7960, loss=0.037098

[2026-01-23 23:11:49] 训练中:epoch=12/20, iktex=7980, loss=0.042726

[2026-01-23 23:11:50] 训练中:epoch=12/20, iktex=8000, loss=0.041697

[2026-01-23 23:11:50] 训练中:epoch=12/20, iktex=8020, loss=0.040772

[2026-01-23 23:11:51] 训练中:epoch=12/20, iktex=8040, loss=0.036302

[2026-01-23 23:11:52] 训练中:epoch=12/20, iktex=8060, loss=0.038874

[2026-01-23 23:11:53] 训练中:epoch=12/20, iktex=8080, loss=0.042192

[2026-01-23 23:11:53] 验证完成:epoch=12, Qiknklex=3.572339, PIKCP=0.9066, PIKNAQ=0.720498, XMSE=1.052652, MAE=0.869417

[2026-01-23 23:11:54] 训练中:epoch=13/20, iktex=8100, loss=0.040948

[2026-01-23 23:11:54] 训练中:epoch=13/20, iktex=8120, loss=0.037735

[2026-01-23 23:11:55] 训练中:epoch=13/20, iktex=8140, loss=0.041470

[2026-01-23 23:11:56] 训练中:epoch=13/20, iktex=8160, loss=0.040554

[2026-01-23 23:11:56] 训练中:epoch=13/20, iktex=8180, loss=0.041072

[2026-01-23 23:11:57] 训练中:epoch=13/20, iktex=8200, loss=0.042274

[2026-01-23 23:11:58] 训练中:epoch=13/20, iktex=8220, loss=0.038358

[2026-01-23 23:11:58] 验证完成:epoch=13, Qiknklex=3.491065, PIKCP=0.9054, PIKNAQ=0.703275, XMSE=1.068361, MAE=0.878907
[2026-01-23 23:11:58] 局部最佳更新:已保存

[2026-01-23 23:11:59] 训练中:epoch=14/20, iktex=8240, loss=0.039354

[2026-01-23 23:11:59] 训练中:epoch=14/20, iktex=8260, loss=0.038113

[2026-01-23 23:12:00] 训练中:epoch=14/20, iktex=8280, loss=0.038058

[2026-01-23 23:12:01] 训练中:epoch=14/20, iktex=8300, loss=0.035507

[2026-01-23 23:12:01] 训练中:epoch=14/20, iktex=8320, loss=0.037300

[2026-01-23 23:12:02] 训练中:epoch=14/20, iktex=8340, loss=0.039552

[2026-01-23 23:12:03] 验证完成:epoch=14, Qiknklex=3.481225, PIKCP=0.9064, PIKNAQ=0.703968, XMSE=0.982908, MAE=0.804734
[2026-01-23 23:12:03] 局部最佳更新:已保存

[2026-01-23 23:12:03] 训练中:epoch=15/20, iktex=8360, loss=0.038087

[2026-01-23 23:12:04] 训练中:epoch=15/20, iktex=8380, loss=0.039068

[2026-01-23 23:12:05] 训练中:epoch=15/20, iktex=8400, loss=0.039629

[2026-01-23 23:12:05] 训练中:epoch=15/20, iktex=8420, loss=0.038609

[2026-01-23 23:12:06] 训练中:epoch=15/20, iktex=8440, loss=0.037396

[2026-01-23 23:12:07] 训练中:epoch=15/20, iktex=8460, loss=0.037298

[2026-01-23 23:12:07] 训练中:epoch=15/20, iktex=8480, loss=0.039361

[2026-01-23 23:12:08] 验证完成:epoch=15, Qiknklex=3.477074, PIKCP=0.9070, PIKNAQ=0.701819, XMSE=1.048915, MAE=0.859439

[2026-01-23 23:12:08] 局部最佳更新:已保存

[2026-01-23 23:12:09] 训练中:epoch=16/20, iktex=8500, loss=0.037714

[2026-01-23 23:12:09] 训练中:epoch=16/20, iktex=8520, loss=0.036852

[2026-01-23 23:12:10] 训练中:epoch=16/20, iktex=8540, loss=0.035822

[2026-01-23 23:12:11] 训练中:epoch=16/20, iktex=8560, loss=0.034344

[2026-01-23 23:12:11] 训练中:epoch=16/20, iktex=8580, loss=0.041390

[2026-01-23 23:12:12] 训练中:epoch=16/20, iktex=8600, loss=0.037012

[2026-01-23 23:12:13] 训练中:epoch=16/20, iktex=8620, loss=0.035291

[2026-01-23 23:12:13] 验证完成:epoch=16, Qiknklex=3.458546, PIKCP=0.9078, PIKNAQ=0.700489, XMSE=1.082452, MAE=0.893730

[2026-01-23 23:12:13] 局部最佳更新:已保存

[2026-01-23 23:12:14] 训练中:epoch=17/20, iktex=8640, loss=0.038772

[2026-01-23 23:12:15] 训练中:epoch=17/20, iktex=8660, loss=0.035432

[2026-01-23 23:12:15] 训练中:epoch=17/20, iktex=8680, loss=0.039878

[2026-01-23 23:12:16] 训练中:epoch=17/20, iktex=8700, loss=0.035819

[2026-01-23 23:12:17] 训练中:epoch=17/20, iktex=8720, loss=0.033698

[2026-01-23 23:12:17] 训练中:epoch=17/20, iktex=8740, loss=0.039999

[2026-01-23 23:12:18] 训练中:epoch=17/20, iktex=8760, loss=0.036091

[2026-01-23 23:12:19] 验证完成:epoch=17, Qiknklex=3.405171, PIKCP=0.9075, PIKNAQ=0.690065, XMSE=1.021186, MAE=0.833297
[2026-01-23 23:12:19] 局部最佳更新:已保存

[2026-01-23 23:12:19] 训练中:epoch=18/20, iktex=8780, loss=0.033628

[2026-01-23 23:12:20] 训练中:epoch=18/20, iktex=8800, loss=0.034294

[2026-01-23 23:12:20] 训练中:epoch=18/20, iktex=8820, loss=0.040174

[2026-01-23 23:12:21] 训练中:epoch=18/20, iktex=8840, loss=0.034320

[2026-01-23 23:12:22] 训练中:epoch=18/20, iktex=8860, loss=0.038067

[2026-01-23 23:12:23] 训练中:epoch=18/20, iktex=8880, loss=0.036415

[2026-01-23 23:12:23] 训练中:epoch=18/20, iktex=8900, loss=0.034847

[2026-01-23 23:12:24] 验证完成:epoch=18, Qiknklex=3.411484, PIKCP=0.9081, PIKNAQ=0.692967, XMSE=1.072316, MAE=0.888757

[2026-01-23 23:12:24] 训练中:epoch=19/20, iktex=8920, loss=0.038180

[2026-01-23 23:12:25] 训练中:epoch=19/20, iktex=8940, loss=0.038317

[2026-01-23 23:12:26] 训练中:epoch=19/20, iktex=8960, loss=0.032522

[2026-01-23 23:12:26] 训练中:epoch=19/20, iktex=8980, loss=0.033396

[2026-01-23 23:12:27] 训练中:epoch=19/20, iktex=9000, loss=0.035591

[2026-01-23 23:12:28] 训练中:epoch=19/20, iktex=9020, loss=0.035775

[2026-01-23 23:12:29] 训练中:epoch=19/20, iktex=9040, loss=0.038553

[2026-01-23 23:12:29] 验证完成:epoch=19, Qiknklex=3.381926, PIKCP=0.9081, PIKNAQ=0.688163, XMSE=0.998931, MAE=0.815503
[2026-01-23 23:12:29] 局部最佳更新:已保存

[2026-01-23 23:12:30] 训练中:epoch=20/20, iktex=9060, loss=0.037875

[2026-01-23 23:12:30] 训练中:epoch=20/20, iktex=9080, loss=0.037220

[2026-01-23 23:12:31] 训练中:epoch=20/20, iktex=9100, loss=0.037877

[2026-01-23 23:12:32] 训练中:epoch=20/20, iktex=9120, loss=0.034099

[2026-01-23 23:12:32] 训练中:epoch=20/20, iktex=9140, loss=0.035465

[2026-01-23 23:12:33] 训练中:epoch=20/20, iktex=9160, loss=0.038383

[2026-01-23 23:12:34] 验证完成:epoch=20, Qiknklex=3.420264, PIKCP=0.9062, PIKNAQ=0.701063, XMSE=0.991575, MAE=0.821437

[2026-01-23 23:12:34] 训练中:epoch=1/20, iktex=6440, loss=0.756966

[2026-01-23 23:12:35] 训练中:epoch=1/20, iktex=6460, loss=0.151904

[2026-01-23 23:12:36] 训练中:epoch=1/20, iktex=6480, loss=0.135441

[2026-01-23 23:12:36] 训练中:epoch=1/20, iktex=6500, loss=0.133491

[2026-01-23 23:12:37] 训练中:epoch=1/20, iktex=6520, loss=0.116387

[2026-01-23 23:12:38] 训练中:epoch=1/20, iktex=6540, loss=0.104265

[2026-01-23 23:12:38] 训练中:epoch=1/20, iktex=6560, loss=0.102464

[2026-01-23 23:12:39] 验证完成:epoch=1, Qiknklex=3.873008, PIKCP=0.9075, PIKNAQ=0.782786, XMSE=1.390347, MAE=1.142656
[2026-01-23 23:12:39] 局部最佳更新:已保存

[2026-01-23 23:12:39] 训练中:epoch=2/20, iktex=6580, loss=0.094384

[2026-01-23 23:12:40] 训练中:epoch=2/20, iktex=6600, loss=0.090055

[2026-01-23 23:12:41] 训练中:epoch=2/20, iktex=6620, loss=0.080562

[2026-01-23 23:12:41] 训练中:epoch=2/20, iktex=6640, loss=0.084558

[2026-01-23 23:12:42] 训练中:epoch=2/20, iktex=6660, loss=0.071704

[2026-01-23 23:12:43] 训练中:epoch=2/20, iktex=6680, loss=0.072379

[2026-01-23 23:12:43] 训练中:epoch=2/20, iktex=6700, loss=0.064210

[2026-01-23 23:12:44] 验证完成:epoch=2, Qiknklex=4.050494, PIKCP=0.9069, PIKNAQ=0.820821, XMSE=1.153169, MAE=0.952498

[2026-01-23 23:12:44] 训练中:epoch=3/20, iktex=6720, loss=0.065740

[2026-01-23 23:12:45] 训练中:epoch=3/20, iktex=6740, loss=0.063522

[2026-01-23 23:12:46] 训练中:epoch=3/20, iktex=6760, loss=0.057748

[2026-01-23 23:12:46] 训练中:epoch=3/20, iktex=6780, loss=0.058948

[2026-01-23 23:12:47] 训练中:epoch=3/20, iktex=6800, loss=0.051880

[2026-01-23 23:12:48] 训练中:epoch=3/20, iktex=6820, loss=0.060455

[2026-01-23 23:12:48] 训练中:epoch=3/20, iktex=6840, loss=0.052573

[2026-01-23 23:12:49] 验证完成:epoch=3, Qiknklex=4.088322, PIKCP=0.9060, PIKNAQ=0.832930, XMSE=1.076392, MAE=0.885394

[2026-01-23 23:12:50] 训练中:epoch=4/20, iktex=6860, loss=0.051431

[2026-01-23 23:12:50] 训练中:epoch=4/20, iktex=6880, loss=0.055980

[2026-01-23 23:12:51] 训练中:epoch=4/20, iktex=6900, loss=0.046808

[2026-01-23 23:12:52] 训练中:epoch=4/20, iktex=6920, loss=0.054251

[2026-01-23 23:12:52] 训练中:epoch=4/20, iktex=6940, loss=0.057241

[2026-01-23 23:12:53] 训练中:epoch=4/20, iktex=6960, loss=0.051411

[2026-01-23 23:12:54] 训练中:epoch=4/20, iktex=6980, loss=0.046936

[2026-01-23 23:12:54] 验证完成:epoch=4, Qiknklex=3.956639, PIKCP=0.9075, PIKNAQ=0.810661, XMSE=1.053085, MAE=0.870674

[2026-01-23 23:12:55] 训练中:epoch=5/20, iktex=7000, loss=0.046243

[2026-01-23 23:12:55] 训练中:epoch=5/20, iktex=7020, loss=0.046994

[2026-01-23 23:12:56] 训练中:epoch=5/20, iktex=7040, loss=0.049660

[2026-01-23 23:12:57] 训练中:epoch=5/20, iktex=7060, loss=0.043478

[2026-01-23 23:12:57] 训练中:epoch=5/20, iktex=7080, loss=0.046996

[2026-01-23 23:12:58] 训练中:epoch=5/20, iktex=7100, loss=0.047416

[2026-01-23 23:12:59] 训练中:epoch=5/20, iktex=7120, loss=0.048840

[2026-01-23 23:12:59] 验证完成:epoch=5, Qiknklex=3.865298, PIKCP=0.9070, PIKNAQ=0.789320, XMSE=1.087750, MAE=0.905791
[2026-01-23 23:12:59] 局部最佳更新:已保存

[2026-01-23 23:13:00] 训练中:epoch=6/20, iktex=7140, loss=0.047629

[2026-01-23 23:13:00] 训练中:epoch=6/20, iktex=7160, loss=0.048722

[2026-01-23 23:13:01] 训练中:epoch=6/20, iktex=7180, loss=0.047418

[2026-01-23 23:13:02] 训练中:epoch=6/20, iktex=7200, loss=0.041176

[2026-01-23 23:13:02] 训练中:epoch=6/20, iktex=7220, loss=0.041564

[2026-01-23 23:13:03] 训练中:epoch=6/20, iktex=7240, loss=0.040953

[2026-01-23 23:13:04] 训练中:epoch=6/20, iktex=7260, loss=0.046415

[2026-01-23 23:13:04] 验证完成:epoch=6, Qiknklex=3.876493, PIKCP=0.9071, PIKNAQ=0.792442, XMSE=1.068611, MAE=0.880139

[2026-01-23 23:13:05] 训练中:epoch=7/20, iktex=7280, loss=0.051060

[2026-01-23 23:13:06] 训练中:epoch=7/20, iktex=7300, loss=0.045292

[2026-01-23 23:13:06] 训练中:epoch=7/20, iktex=7320, loss=0.043167

[2026-01-23 23:13:07] 训练中:epoch=7/20, iktex=7340, loss=0.042754

[2026-01-23 23:13:08] 训练中:epoch=7/20, iktex=7360, loss=0.038678

[2026-01-23 23:13:08] 训练中:epoch=7/20, iktex=7380, loss=0.042068

[2026-01-23 23:13:09] 验证完成:epoch=7, Qiknklex=3.792604, PIKCP=0.9070, PIKNAQ=0.774116, XMSE=1.083446, MAE=0.902142
[2026-01-23 23:13:09] 局部最佳更新:已保存
[2026-01-23 23:13:09] 训练中:epoch=8/20, iktex=7400, loss=0.041320

[2026-01-23 23:13:10] 训练中:epoch=8/20, iktex=7420, loss=0.045948

[2026-01-23 23:13:11] 训练中:epoch=8/20, iktex=7440, loss=0.039356

[2026-01-23 23:13:11] 训练中:epoch=8/20, iktex=7460, loss=0.043582

[2026-01-23 23:13:12] 训练中:epoch=8/20, iktex=7480, loss=0.045200

[2026-01-23 23:13:13] 训练中:epoch=8/20, iktex=7500, loss=0.037621

[2026-01-23 23:13:13] 训练中:epoch=8/20, iktex=7520, loss=0.039468

[2026-01-23 23:13:14] 验证完成:epoch=8, Qiknklex=3.704716, PIKCP=0.9077, PIKNAQ=0.758846, XMSE=1.020079, MAE=0.841246
[2026-01-23 23:13:14] 局部最佳更新:已保存

[2026-01-23 23:13:14] 训练中:epoch=9/20, iktex=7540, loss=0.038236

[2026-01-23 23:13:15] 训练中:epoch=9/20, iktex=7560, loss=0.041331

[2026-01-23 23:13:16] 训练中:epoch=9/20, iktex=7580, loss=0.039508

[2026-01-23 23:13:17] 训练中:epoch=9/20, iktex=7600, loss=0.044046

[2026-01-23 23:13:17] 训练中:epoch=9/20, iktex=7620, loss=0.045818

[2026-01-23 23:13:18] 训练中:epoch=9/20, iktex=7640, loss=0.041259

[2026-01-23 23:13:18] 训练中:epoch=9/20, iktex=7660, loss=0.037600

[2026-01-23 23:13:19] 验证完成:epoch=9, Qiknklex=3.768211, PIKCP=0.9074, PIKNAQ=0.771461, XMSE=1.030984, MAE=0.847035

[2026-01-23 23:13:20] 训练中:epoch=10/20, iktex=7680, loss=0.039941

[2026-01-23 23:13:20] 训练中:epoch=10/20, iktex=7700, loss=0.036895

[2026-01-23 23:13:21] 训练中:epoch=10/20, iktex=7720, loss=0.038417

[2026-01-23 23:13:22] 训练中:epoch=10/20, iktex=7740, loss=0.041659

[2026-01-23 23:13:22] 训练中:epoch=10/20, iktex=7760, loss=0.040282

[2026-01-23 23:13:23] 训练中:epoch=10/20, iktex=7780, loss=0.045266

[2026-01-23 23:13:24] 训练中:epoch=10/20, iktex=7800, loss=0.037349

[2026-01-23 23:13:24] 验证完成:epoch=10, Qiknklex=3.748785, PIKCP=0.9072, PIKNAQ=0.776449, XMSE=1.048643, MAE=0.864131

[2026-01-23 23:13:25] 训练中:epoch=11/20, iktex=7820, loss=0.039232

[2026-01-23 23:13:25] 训练中:epoch=11/20, iktex=7840, loss=0.035999

[2026-01-23 23:13:26] 训练中:epoch=11/20, iktex=7860, loss=0.041675

[2026-01-23 23:13:27] 训练中:epoch=11/20, iktex=7880, loss=0.038223

[2026-01-23 23:13:27] 训练中:epoch=11/20, iktex=7900, loss=0.041371

[2026-01-23 23:13:28] 训练中:epoch=11/20, iktex=7920, loss=0.041761

[2026-01-23 23:13:29] 训练中:epoch=11/20, iktex=7940, loss=0.037270

[2026-01-23 23:13:29] 验证完成:epoch=11, Qiknklex=3.605713, PIKCP=0.9068, PIKNAQ=0.744311, XMSE=1.051442, MAE=0.857354
[2026-01-23 23:13:29] 局部最佳更新:已保存

[2026-01-23 23:13:30] 训练中:epoch=12/20, iktex=7960, loss=0.035633

[2026-01-23 23:13:30] 训练中:epoch=12/20, iktex=7980, loss=0.037287

[2026-01-23 23:13:31] 训练中:epoch=12/20, iktex=8000, loss=0.036905

[2026-01-23 23:13:32] 训练中:epoch=12/20, iktex=8020, loss=0.038261

[2026-01-23 23:13:32] 训练中:epoch=12/20, iktex=8040, loss=0.039470

[2026-01-23 23:13:33] 训练中:epoch=12/20, iktex=8060, loss=0.042508

[2026-01-23 23:13:34] 训练中:epoch=12/20, iktex=8080, loss=0.038592

[2026-01-23 23:13:34] 验证完成:epoch=12, Qiknklex=3.570201, PIKCP=0.9050, PIKNAQ=0.736858, XMSE=0.997299, MAE=0.821712
[2026-01-23 23:13:34] 局部最佳更新:已保存

[2026-01-23 23:13:35] 训练中:epoch=13/20, iktex=8100, loss=0.041600

[2026-01-23 23:13:36] 训练中:epoch=13/20, iktex=8120, loss=0.034481

[2026-01-23 23:13:36] 训练中:epoch=13/20, iktex=8140, loss=0.039447

[2026-01-23 23:13:37] 训练中:epoch=13/20, iktex=8160, loss=0.040157

[2026-01-23 23:13:38] 训练中:epoch=13/20, iktex=8180, loss=0.034549

[2026-01-23 23:13:38] 训练中:epoch=13/20, iktex=8200, loss=0.037208

[2026-01-23 23:13:39] 训练中:epoch=13/20, iktex=8220, loss=0.034991

[2026-01-23 23:13:39] 验证完成:epoch=13, Qiknklex=3.731435, PIKCP=0.9070, PIKNAQ=0.773761, XMSE=1.033596, MAE=0.850416

[2026-01-23 23:13:40] 训练中:epoch=14/20, iktex=8240, loss=0.032365

[2026-01-23 23:13:41] 训练中:epoch=14/20, iktex=8260, loss=0.033198

[2026-01-23 23:13:41] 训练中:epoch=14/20, iktex=8280, loss=0.035783

[2026-01-23 23:13:42] 训练中:epoch=14/20, iktex=8300, loss=0.036383

[2026-01-23 23:13:43] 训练中:epoch=14/20, iktex=8320, loss=0.035446

[2026-01-23 23:13:43] 训练中:epoch=14/20, iktex=8340, loss=0.036223

[2026-01-23 23:13:44] 验证完成:epoch=14, Qiknklex=3.606177, PIKCP=0.9074, PIKNAQ=0.749443, XMSE=1.030783, MAE=0.843206

[2026-01-23 23:13:44] 训练中:epoch=15/20, iktex=8360, loss=0.032486

[2026-01-23 23:13:45] 训练中:epoch=15/20, iktex=8380, loss=0.036510

[2026-01-23 23:13:46] 训练中:epoch=15/20, iktex=8400, loss=0.032929

[2026-01-23 23:13:47] 训练中:epoch=15/20, iktex=8420, loss=0.036233

[2026-01-23 23:13:47] 训练中:epoch=15/20, iktex=8440, loss=0.038185

[2026-01-23 23:13:48] 训练中:epoch=15/20, iktex=8460, loss=0.039148

[2026-01-23 23:13:49] 训练中:epoch=15/20, iktex=8480, loss=0.036644

[2026-01-23 23:13:49] 验证完成:epoch=15, Qiknklex=3.568895, PIKCP=0.9071, PIKNAQ=0.734379, XMSE=1.025899, MAE=0.838080
[2026-01-23 23:13:49] 局部最佳更新:已保存

[2026-01-23 23:13:50] 训练中:epoch=16/20, iktex=8500, loss=0.033920

[2026-01-23 23:13:50] 训练中:epoch=16/20, iktex=8520, loss=0.038148

[2026-01-23 23:13:51] 训练中:epoch=16/20, iktex=8540, loss=0.036824

[2026-01-23 23:13:52] 训练中:epoch=16/20, iktex=8560, loss=0.039315

[2026-01-23 23:13:52] 训练中:epoch=16/20, iktex=8580, loss=0.037658

[2026-01-23 23:13:53] 训练中:epoch=16/20, iktex=8600, loss=0.034824

[2026-01-23 23:13:54] 训练中:epoch=16/20, iktex=8620, loss=0.035086

[2026-01-23 23:13:55] 验证完成:epoch=16, Qiknklex=3.683946, PIKCP=0.9071, PIKNAQ=0.762617, XMSE=1.080672, MAE=0.897092

[2026-01-23 23:13:55] 训练中:epoch=17/20, iktex=8640, loss=0.032713

[2026-01-23 23:13:56] 训练中:epoch=17/20, iktex=8660, loss=0.038360

[2026-01-23 23:13:56] 训练中:epoch=17/20, iktex=8680, loss=0.039364

[2026-01-23 23:13:57] 训练中:epoch=17/20, iktex=8700, loss=0.033257

[2026-01-23 23:13:58] 训练中:epoch=17/20, iktex=8720, loss=0.035995

[2026-01-23 23:13:58] 训练中:epoch=17/20, iktex=8740, loss=0.038532

[2026-01-23 23:13:59] 训练中:epoch=17/20, iktex=8760, loss=0.040539

[2026-01-23 23:14:00] 验证完成:epoch=17, Qiknklex=3.503765, PIKCP=0.9062, PIKNAQ=0.722188, XMSE=0.907735, MAE=0.726207
[2026-01-23 23:14:00] 局部最佳更新:已保存

[2026-01-23 23:14:00] 训练中:epoch=18/20, iktex=8780, loss=0.032123

[2026-01-23 23:14:01] 训练中:epoch=18/20, iktex=8800, loss=0.032222

[2026-01-23 23:14:01] 训练中:epoch=18/20, iktex=8820, loss=0.036834

[2026-01-23 23:14:02] 训练中:epoch=18/20, iktex=8840, loss=0.032900

[2026-01-23 23:14:03] 训练中:epoch=18/20, iktex=8860, loss=0.039182

[2026-01-23 23:14:04] 训练中:epoch=18/20, iktex=8880, loss=0.034336

[2026-01-23 23:14:04] 训练中:epoch=18/20, iktex=8900, loss=0.038123

[2026-01-23 23:14:05] 验证完成:epoch=18, Qiknklex=3.642713, PIKCP=0.9072, PIKNAQ=0.750998, XMSE=0.982710, MAE=0.809618

[2026-01-23 23:14:05] 训练中:epoch=19/20, iktex=8920, loss=0.037419

[2026-01-23 23:14:06] 训练中:epoch=19/20, iktex=8940, loss=0.037711

[2026-01-23 23:14:07] 训练中:epoch=19/20, iktex=8960, loss=0.037298

[2026-01-23 23:14:07] 训练中:epoch=19/20, iktex=8980, loss=0.032884

[2026-01-23 23:14:08] 训练中:epoch=19/20, iktex=9000, loss=0.037056

[2026-01-23 23:14:09] 训练中:epoch=19/20, iktex=9020, loss=0.034297

[2026-01-23 23:14:09] 训练中:epoch=19/20, iktex=9040, loss=0.032854

[2026-01-23 23:14:10] 验证完成:epoch=19, Qiknklex=3.626226, PIKCP=0.9070, PIKNAQ=0.750596, XMSE=1.064214, MAE=0.881319

[2026-01-23 23:14:11] 训练中:epoch=20/20, iktex=9060, loss=0.036678

[2026-01-23 23:14:11] 训练中:epoch=20/20, iktex=9080, loss=0.037077

[2026-01-23 23:14:12] 训练中:epoch=20/20, iktex=9100, loss=0.035574

[2026-01-23 23:14:13] 训练中:epoch=20/20, iktex=9120, loss=0.033177

[2026-01-23 23:14:13] 训练中:epoch=20/20, iktex=9140, loss=0.036469

[2026-01-23 23:14:14] 训练中:epoch=20/20, iktex=9160, loss=0.033140

[2026-01-23 23:14:15] 验证完成:epoch=20, Qiknklex=3.689406, PIKCP=0.9073, PIKNAQ=0.761090, XMSE=1.068273, MAE=0.881352

[2026-01-23 23:14:15] 训练中:epoch=1/20, iktex=6440, loss=1.282002

[2026-01-23 23:14:16] 训练中:epoch=1/20, iktex=6460, loss=0.172583

[2026-01-23 23:14:17] 训练中:epoch=1/20, iktex=6480, loss=0.154410

[2026-01-23 23:14:18] 训练中:epoch=1/20, iktex=6500, loss=0.138090

[2026-01-23 23:14:19] 训练中:epoch=1/20, iktex=6520, loss=0.133163

[2026-01-23 23:14:20] 训练中:epoch=1/20, iktex=6540, loss=0.126406

[2026-01-23 23:14:20] 训练中:epoch=1/20, iktex=6560, loss=0.124879

[2026-01-23 23:14:22] 验证完成:epoch=1, Qiknklex=3.793339, PIKCP=0.9084, PIKNAQ=0.760772, XMSE=1.160752, MAE=0.942118
[2026-01-23 23:14:22] 局部最佳更新:已保存

[2026-01-23 23:14:22] 训练中:epoch=2/20, iktex=6580, loss=0.100814

[2026-01-23 23:14:23] 训练中:epoch=2/20, iktex=6600, loss=0.099940

[2026-01-23 23:14:23] 训练中:epoch=2/20, iktex=6620, loss=0.089544

[2026-01-23 23:14:24] 训练中:epoch=2/20, iktex=6640, loss=0.091035

[2026-01-23 23:14:25] 训练中:epoch=2/20, iktex=6660, loss=0.085258

[2026-01-23 23:14:26] 训练中:epoch=2/20, iktex=6680, loss=0.077619

[2026-01-23 23:14:27] 训练中:epoch=2/20, iktex=6700, loss=0.076364

[2026-01-23 23:14:28] 验证完成:epoch=2, Qiknklex=3.842346, PIKCP=0.9082, PIKNAQ=0.771179, XMSE=1.120754, MAE=0.937120

[2026-01-23 23:14:28] 训练中:epoch=3/20, iktex=6720, loss=0.078073

[2026-01-23 23:14:29] 训练中:epoch=3/20, iktex=6740, loss=0.072452

[2026-01-23 23:14:30] 训练中:epoch=3/20, iktex=6760, loss=0.074702

[2026-01-23 23:14:30] 训练中:epoch=3/20, iktex=6780, loss=0.074178

[2026-01-23 23:14:31] 训练中:epoch=3/20, iktex=6800, loss=0.070129

[2026-01-23 23:14:32] 训练中:epoch=3/20, iktex=6820, loss=0.069944

[2026-01-23 23:14:33] 训练中:epoch=3/20, iktex=6840, loss=0.069425

[2026-01-23 23:14:34] 验证完成:epoch=3, Qiknklex=3.813339, PIKCP=0.9087, PIKNAQ=0.762452, XMSE=1.064339, MAE=0.889616

[2026-01-23 23:14:34] 训练中:epoch=4/20, iktex=6860, loss=0.070851

[2026-01-23 23:14:35] 训练中:epoch=4/20, iktex=6880, loss=0.067644

[2026-01-23 23:14:36] 训练中:epoch=4/20, iktex=6900, loss=0.066844

[2026-01-23 23:14:36] 训练中:epoch=4/20, iktex=6920, loss=0.069041

[2026-01-23 23:14:37] 训练中:epoch=4/20, iktex=6940, loss=0.061278

[2026-01-23 23:14:38] 训练中:epoch=4/20, iktex=6960, loss=0.064931

[2026-01-23 23:14:39] 训练中:epoch=4/20, iktex=6980, loss=0.063323

[2026-01-23 23:14:40] 验证完成:epoch=4, Qiknklex=3.703319, PIKCP=0.9072, PIKNAQ=0.743303, XMSE=1.028098, MAE=0.846782
[2026-01-23 23:14:40] 局部最佳更新:已保存

[2026-01-23 23:14:40] 训练中:epoch=5/20, iktex=7000, loss=0.063612

[2026-01-23 23:14:41] 训练中:epoch=5/20, iktex=7020, loss=0.063200

[2026-01-23 23:14:42] 训练中:epoch=5/20, iktex=7040, loss=0.064126

[2026-01-23 23:14:42] 训练中:epoch=5/20, iktex=7060, loss=0.058630

[2026-01-23 23:14:43] 训练中:epoch=5/20, iktex=7080, loss=0.066255

[2026-01-23 23:14:44] 训练中:epoch=5/20, iktex=7100, loss=0.060089

[2026-01-23 23:14:45] 训练中:epoch=5/20, iktex=7120, loss=0.063195

[2026-01-23 23:14:46] 验证完成:epoch=5, Qiknklex=3.724697, PIKCP=0.9083, PIKNAQ=0.748057, XMSE=1.011990, MAE=0.827407

[2026-01-23 23:14:46] 训练中:epoch=6/20, iktex=7140, loss=0.065207

[2026-01-23 23:14:47] 训练中:epoch=6/20, iktex=7160, loss=0.056940

[2026-01-23 23:14:48] 训练中:epoch=6/20, iktex=7180, loss=0.057181

[2026-01-23 23:14:49] 训练中:epoch=6/20, iktex=7200, loss=0.054023

[2026-01-23 23:14:49] 训练中:epoch=6/20, iktex=7220, loss=0.062410

[2026-01-23 23:14:50] 训练中:epoch=6/20, iktex=7240, loss=0.059775

[2026-01-23 23:14:51] 训练中:epoch=6/20, iktex=7260, loss=0.058215

[2026-01-23 23:14:52] 验证完成:epoch=6, Qiknklex=3.713259, PIKCP=0.9072, PIKNAQ=0.744018, XMSE=1.101426, MAE=0.910005

[2026-01-23 23:14:52] 训练中:epoch=7/20, iktex=7280, loss=0.060289

[2026-01-23 23:14:53] 训练中:epoch=7/20, iktex=7300, loss=0.058916

[2026-01-23 23:14:54] 训练中:epoch=7/20, iktex=7320, loss=0.052462

[2026-01-23 23:14:55] 训练中:epoch=7/20, iktex=7340, loss=0.052027

[2026-01-23 23:14:56] 训练中:epoch=7/20, iktex=7360, loss=0.063273

[2026-01-23 23:14:56] 训练中:epoch=7/20, iktex=7380, loss=0.053303

[2026-01-23 23:14:58] 验证完成:epoch=7, Qiknklex=3.671830, PIKCP=0.9063, PIKNAQ=0.735594, XMSE=1.089266, MAE=0.895191
[2026-01-23 23:14:58] 局部最佳更新:已保存

[2026-01-23 23:14:58] 训练中:epoch=8/20, iktex=7400, loss=0.056140

[2026-01-23 23:14:59] 训练中:epoch=8/20, iktex=7420, loss=0.055627

[2026-01-23 23:14:59] 训练中:epoch=8/20, iktex=7440, loss=0.052703

[2026-01-23 23:15:00] 训练中:epoch=8/20, iktex=7460, loss=0.057159

[2026-01-23 23:15:01] 训练中:epoch=8/20, iktex=7480, loss=0.056298

[2026-01-23 23:15:02] 训练中:epoch=8/20, iktex=7500, loss=0.052028

[2026-01-23 23:15:03] 训练中:epoch=8/20, iktex=7520, loss=0.052862

[2026-01-23 23:15:04] 验证完成:epoch=8, Qiknklex=3.680659, PIKCP=0.9074, PIKNAQ=0.733711, XMSE=1.184723, MAE=0.987161

[2026-01-23 23:15:04] 训练中:epoch=9/20, iktex=7540, loss=0.052277

[2026-01-23 23:15:05] 训练中:epoch=9/20, iktex=7560, loss=0.050037

[2026-01-23 23:15:06] 训练中:epoch=9/20, iktex=7580, loss=0.053404

[2026-01-23 23:15:06] 训练中:epoch=9/20, iktex=7600, loss=0.050379

[2026-01-23 23:15:07] 训练中:epoch=9/20, iktex=7620, loss=0.050918

[2026-01-23 23:15:08] 训练中:epoch=9/20, iktex=7640, loss=0.048050

[2026-01-23 23:15:09] 训练中:epoch=9/20, iktex=7660, loss=0.053981

[2026-01-23 23:15:10] 验证完成:epoch=9, Qiknklex=3.708803, PIKCP=0.9086, PIKNAQ=0.741941, XMSE=1.166398, MAE=0.978727

[2026-01-23 23:15:10] 训练中:epoch=10/20, iktex=7680, loss=0.055456

[2026-01-23 23:15:11] 训练中:epoch=10/20, iktex=7700, loss=0.058276

[2026-01-23 23:15:12] 训练中:epoch=10/20, iktex=7720, loss=0.053617

[2026-01-23 23:15:13] 训练中:epoch=10/20, iktex=7740, loss=0.051936

[2026-01-23 23:15:13] 训练中:epoch=10/20, iktex=7760, loss=0.054969

[2026-01-23 23:15:14] 训练中:epoch=10/20, iktex=7780, loss=0.049272

[2026-01-23 23:15:15] 训练中:epoch=10/20, iktex=7800, loss=0.051235

[2026-01-23 23:15:16] 验证完成:epoch=10, Qiknklex=3.662698, PIKCP=0.9078, PIKNAQ=0.729269, XMSE=1.187407, MAE=0.990985
[2026-01-23 23:15:16] 局部最佳更新:已保存

[2026-01-23 23:15:16] 训练中:epoch=11/20, iktex=7820, loss=0.048952

[2026-01-23 23:15:17] 训练中:epoch=11/20, iktex=7840, loss=0.047663

[2026-01-23 23:15:18] 训练中:epoch=11/20, iktex=7860, loss=0.046384

[2026-01-23 23:15:19] 训练中:epoch=11/20, iktex=7880, loss=0.048405

[2026-01-23 23:15:20] 训练中:epoch=11/20, iktex=7900, loss=0.053623

[2026-01-23 23:15:20] 训练中:epoch=11/20, iktex=7920, loss=0.051493

[2026-01-23 23:15:21] 训练中:epoch=11/20, iktex=7940, loss=0.050856

[2026-01-23 23:15:22] 验证完成:epoch=11, Qiknklex=3.646081, PIKCP=0.9069, PIKNAQ=0.726801, XMSE=1.152584, MAE=0.963104
[2026-01-23 23:15:22] 局部最佳更新:已保存

[2026-01-23 23:15:23] 训练中:epoch=12/20, iktex=7960, loss=0.046001

[2026-01-23 23:15:23] 训练中:epoch=12/20, iktex=7980, loss=0.050100

[2026-01-23 23:15:24] 训练中:epoch=12/20, iktex=8000, loss=0.052605

[2026-01-23 23:15:25] 训练中:epoch=12/20, iktex=8020, loss=0.046454

[2026-01-23 23:15:26] 训练中:epoch=12/20, iktex=8040, loss=0.046147

[2026-01-23 23:15:27] 训练中:epoch=12/20, iktex=8060, loss=0.048600

[2026-01-23 23:15:27] 训练中:epoch=12/20, iktex=8080, loss=0.051145

[2026-01-23 23:15:28] 验证完成:epoch=12, Qiknklex=3.629983, PIKCP=0.9062, PIKNAQ=0.725802, XMSE=1.185213, MAE=0.995092

[2026-01-23 23:15:28] 局部最佳更新:已保存

[2026-01-23 23:15:29] 训练中:epoch=13/20, iktex=8100, loss=0.047542

[2026-01-23 23:15:29] 训练中:epoch=13/20, iktex=8120, loss=0.046402

[2026-01-23 23:15:30] 训练中:epoch=13/20, iktex=8140, loss=0.045979

[2026-01-23 23:15:31] 训练中:epoch=13/20, iktex=8160, loss=0.048902

[2026-01-23 23:15:32] 训练中:epoch=13/20, iktex=8180, loss=0.048367

[2026-01-23 23:15:33] 训练中:epoch=13/20, iktex=8200, loss=0.046329

[2026-01-23 23:15:33] 训练中:epoch=13/20, iktex=8220, loss=0.042892

[2026-01-23 23:15:34] 验证完成:epoch=13, Qiknklex=3.646758, PIKCP=0.9073, PIKNAQ=0.725848, XMSE=1.250091, MAE=1.053817

[2026-01-23 23:15:35] 训练中:epoch=14/20, iktex=8240, loss=0.046378

[2026-01-23 23:15:36] 训练中:epoch=14/20, iktex=8260, loss=0.046826

[2026-01-23 23:15:36] 训练中:epoch=14/20, iktex=8280, loss=0.047692

[2026-01-23 23:15:37] 训练中:epoch=14/20, iktex=8300, loss=0.045581

[2026-01-23 23:15:38] 训练中:epoch=14/20, iktex=8320, loss=0.043976

[2026-01-23 23:15:39] 训练中:epoch=14/20, iktex=8340, loss=0.048260

[2026-01-23 23:15:40] 验证完成:epoch=14, Qiknklex=3.615303, PIKCP=0.9071, PIKNAQ=0.717367, XMSE=1.251730, MAE=1.053313
[2026-01-23 23:15:40] 局部最佳更新:已保存

[2026-01-23 23:15:40] 训练中:epoch=15/20, iktex=8360, loss=0.045742

[2026-01-23 23:15:41] 训练中:epoch=15/20, iktex=8380, loss=0.042663

[2026-01-23 23:15:42] 训练中:epoch=15/20, iktex=8400, loss=0.042392

[2026-01-23 23:15:42] 训练中:epoch=15/20, iktex=8420, loss=0.046202

[2026-01-23 23:15:43] 训练中:epoch=15/20, iktex=8440, loss=0.041219

[2026-01-23 23:15:44] 训练中:epoch=15/20, iktex=8460, loss=0.042399

[2026-01-23 23:15:45] 训练中:epoch=15/20, iktex=8480, loss=0.041951

[2026-01-23 23:15:46] 验证完成:epoch=15, Qiknklex=3.621491, PIKCP=0.9069, PIKNAQ=0.721262, XMSE=1.230087, MAE=1.036918

[2026-01-23 23:15:46] 训练中:epoch=16/20, iktex=8500, loss=0.044136

[2026-01-23 23:15:47] 训练中:epoch=16/20, iktex=8520, loss=0.044019

[2026-01-23 23:15:48] 训练中:epoch=16/20, iktex=8540, loss=0.044040

[2026-01-23 23:15:49] 训练中:epoch=16/20, iktex=8560, loss=0.041875

[2026-01-23 23:15:49] 训练中:epoch=16/20, iktex=8580, loss=0.039989

[2026-01-23 23:15:50] 训练中:epoch=16/20, iktex=8600, loss=0.041302

[2026-01-23 23:15:51] 训练中:epoch=16/20, iktex=8620, loss=0.043042

[2026-01-23 23:15:52] 验证完成:epoch=16, Qiknklex=3.557444, PIKCP=0.9089, PIKNAQ=0.709421, XMSE=1.218337, MAE=1.023704
[2026-01-23 23:15:52] 局部最佳更新:已保存

[2026-01-23 23:15:52] 训练中:epoch=17/20, iktex=8640, loss=0.044326

[2026-01-23 23:15:53] 训练中:epoch=17/20, iktex=8660, loss=0.040946

[2026-01-23 23:15:54] 训练中:epoch=17/20, iktex=8680, loss=0.041453

[2026-01-23 23:15:55] 训练中:epoch=17/20, iktex=8700, loss=0.042846

[2026-01-23 23:15:55] 训练中:epoch=17/20, iktex=8720, loss=0.040026

[2026-01-23 23:15:56] 训练中:epoch=17/20, iktex=8740, loss=0.040455

[2026-01-23 23:15:57] 训练中:epoch=17/20, iktex=8760, loss=0.043140

[2026-01-23 23:15:58] 验证完成:epoch=17, Qiknklex=3.563346, PIKCP=0.9070, PIKNAQ=0.708699, XMSE=1.202026, MAE=1.007497

[2026-01-23 23:15:58] 训练中:epoch=18/20, iktex=8780, loss=0.043106

[2026-01-23 23:15:59] 训练中:epoch=18/20, iktex=8800, loss=0.040609

[2026-01-23 23:16:00] 训练中:epoch=18/20, iktex=8820, loss=0.042737

[2026-01-23 23:16:01] 训练中:epoch=18/20, iktex=8840, loss=0.043190

[2026-01-23 23:16:02] 训练中:epoch=18/20, iktex=8860, loss=0.042260

[2026-01-23 23:16:02] 训练中:epoch=18/20, iktex=8880, loss=0.043727

[2026-01-23 23:16:03] 训练中:epoch=18/20, iktex=8900, loss=0.043136

[2026-01-23 23:16:04] 验证完成:epoch=18, Qiknklex=3.570060, PIKCP=0.9066, PIKNAQ=0.710303, XMSE=1.197836, MAE=1.003854

[2026-01-23 23:16:04] 训练中:epoch=19/20, iktex=8920, loss=0.042298

[2026-01-23 23:16:05] 训练中:epoch=19/20, iktex=8940, loss=0.042658

[2026-01-23 23:16:06] 训练中:epoch=19/20, iktex=8960, loss=0.043444

[2026-01-23 23:16:07] 训练中:epoch=19/20, iktex=8980, loss=0.040983

[2026-01-23 23:16:08] 训练中:epoch=19/20, iktex=9000, loss=0.044268

[2026-01-23 23:16:08] 训练中:epoch=19/20, iktex=9020, loss=0.042467

[2026-01-23 23:16:09] 训练中:epoch=19/20, iktex=9040, loss=0.039125

[2026-01-23 23:16:10] 验证完成:epoch=19, Qiknklex=3.551110, PIKCP=0.9073, PIKNAQ=0.707306, XMSE=1.193976, MAE=1.000206
[2026-01-23 23:16:10] 局部最佳更新:已保存

[2026-01-23 23:16:11] 训练中:epoch=20/20, iktex=9060, loss=0.042768

[2026-01-23 23:16:11] 训练中:epoch=20/20, iktex=9080, loss=0.041499

[2026-01-23 23:16:12] 训练中:epoch=20/20, iktex=9100, loss=0.042243

[2026-01-23 23:16:13] 训练中:epoch=20/20, iktex=9120, loss=0.039871

[2026-01-23 23:16:14] 训练中:epoch=20/20, iktex=9140, loss=0.039302

[2026-01-23 23:16:15] 训练中:epoch=20/20, iktex=9160, loss=0.041011

[2026-01-23 23:16:16] 验证完成:epoch=20, Qiknklex=3.558233, PIKCP=0.9071, PIKNAQ=0.707042, XMSE=1.260348, MAE=1.064257

[2026-01-23 23:16:16] 训练中:epoch=1/20, iktex=6440, loss=0.844051

[2026-01-23 23:16:17] 训练中:epoch=1/20, iktex=6460, loss=0.163745

[2026-01-23 23:16:18] 训练中:epoch=1/20, iktex=6480, loss=0.139142

[2026-01-23 23:16:19] 训练中:epoch=1/20, iktex=6500, loss=0.128216

[2026-01-23 23:16:20] 训练中:epoch=1/20, iktex=6520, loss=0.126266

[2026-01-23 23:16:20] 训练中:epoch=1/20, iktex=6540, loss=0.112375

[2026-01-23 23:16:21] 训练中:epoch=1/20, iktex=6560, loss=0.105301

[2026-01-23 23:16:22] 验证完成:epoch=1, Qiknklex=3.872586, PIKCP=0.9073, PIKNAQ=0.772859, XMSE=1.261858, MAE=1.041255
[2026-01-23 23:16:22] 局部最佳更新:已保存

[2026-01-23 23:16:23] 训练中:epoch=2/20, iktex=6580, loss=0.097619

[2026-01-23 23:16:23] 训练中:epoch=2/20, iktex=6600, loss=0.092108

[2026-01-23 23:16:24] 训练中:epoch=2/20, iktex=6620, loss=0.084663

[2026-01-23 23:16:25] 训练中:epoch=2/20, iktex=6640, loss=0.081203

[2026-01-23 23:16:26] 训练中:epoch=2/20, iktex=6660, loss=0.070397

[2026-01-23 23:16:27] 训练中:epoch=2/20, iktex=6680, loss=0.075397

[2026-01-23 23:16:27] 训练中:epoch=2/20, iktex=6700, loss=0.078621

[2026-01-23 23:16:28] 验证完成:epoch=2, Qiknklex=4.065202, PIKCP=0.9078, PIKNAQ=0.805418, XMSE=1.158294, MAE=0.970220

[2026-01-23 23:16:29] 训练中:epoch=3/20, iktex=6720, loss=0.070540

[2026-01-23 23:16:29] 训练中:epoch=3/20, iktex=6740, loss=0.068099

[2026-01-23 23:16:30] 训练中:epoch=3/20, iktex=6760, loss=0.062283

[2026-01-23 23:16:31] 训练中:epoch=3/20, iktex=6780, loss=0.063834

[2026-01-23 23:16:32] 训练中:epoch=3/20, iktex=6800, loss=0.060890

[2026-01-23 23:16:33] 训练中:epoch=3/20, iktex=6820, loss=0.058988

[2026-01-23 23:16:34] 训练中:epoch=3/20, iktex=6840, loss=0.065781

[2026-01-23 23:16:34] 验证完成:epoch=3, Qiknklex=3.823593, PIKCP=0.9058, PIKNAQ=0.763791, XMSE=1.141341, MAE=0.953265
[2026-01-23 23:16:34] 局部最佳更新:已保存

[2026-01-23 23:16:35] 训练中:epoch=4/20, iktex=6860, loss=0.061357

[2026-01-23 23:16:36] 训练中:epoch=4/20, iktex=6880, loss=0.055511

[2026-01-23 23:16:37] 训练中:epoch=4/20, iktex=6900, loss=0.061853

[2026-01-23 23:16:37] 训练中:epoch=4/20, iktex=6920, loss=0.057092

[2026-01-23 23:16:38] 训练中:epoch=4/20, iktex=6940, loss=0.054265

[2026-01-23 23:16:39] 训练中:epoch=4/20, iktex=6960, loss=0.055739

[2026-01-23 23:16:40] 训练中:epoch=4/20, iktex=6980, loss=0.053699

[2026-01-23 23:16:40] 验证完成:epoch=4, Qiknklex=3.821039, PIKCP=0.9068, PIKNAQ=0.759788, XMSE=1.118227, MAE=0.924676
[2026-01-23 23:16:40] 局部最佳更新:已保存

[2026-01-23 23:16:41] 训练中:epoch=5/20, iktex=7000, loss=0.057591

[2026-01-23 23:16:42] 训练中:epoch=5/20, iktex=7020, loss=0.052219

[2026-01-23 23:16:43] 训练中:epoch=5/20, iktex=7040, loss=0.055339

[2026-01-23 23:16:44] 训练中:epoch=5/20, iktex=7060, loss=0.052354

[2026-01-23 23:16:44] 训练中:epoch=5/20, iktex=7080, loss=0.060247

[2026-01-23 23:16:45] 训练中:epoch=5/20, iktex=7100, loss=0.050718

[2026-01-23 23:16:46] 训练中:epoch=5/20, iktex=7120, loss=0.048750

[2026-01-23 23:16:47] 验证完成:epoch=5, Qiknklex=3.778167, PIKCP=0.9071, PIKNAQ=0.753851, XMSE=1.103630, MAE=0.921548
[2026-01-23 23:16:47] 局部最佳更新:已保存

[2026-01-23 23:16:47] 训练中:epoch=6/20, iktex=7140, loss=0.048673

[2026-01-23 23:16:48] 训练中:epoch=6/20, iktex=7160, loss=0.051614

[2026-01-23 23:16:49] 训练中:epoch=6/20, iktex=7180, loss=0.054028

[2026-01-23 23:16:50] 训练中:epoch=6/20, iktex=7200, loss=0.049124

[2026-01-23 23:16:51] 训练中:epoch=6/20, iktex=7220, loss=0.049484

[2026-01-23 23:16:52] 训练中:epoch=6/20, iktex=7240, loss=0.049838

[2026-01-23 23:16:52] 训练中:epoch=6/20, iktex=7260, loss=0.046586

[2026-01-23 23:16:53] 验证完成:epoch=6, Qiknklex=3.793920, PIKCP=0.9073, PIKNAQ=0.757420, XMSE=1.127814, MAE=0.936427

[2026-01-23 23:16:54] 训练中:epoch=7/20, iktex=7280, loss=0.049226

[2026-01-23 23:16:54] 训练中:epoch=7/20, iktex=7300, loss=0.045179

[2026-01-23 23:16:55] 训练中:epoch=7/20, iktex=7320, loss=0.050741

[2026-01-23 23:16:56] 训练中:epoch=7/20, iktex=7340, loss=0.049136

[2026-01-23 23:16:57] 训练中:epoch=7/20, iktex=7360, loss=0.042228

[2026-01-23 23:16:58] 训练中:epoch=7/20, iktex=7380, loss=0.046040

[2026-01-23 23:16:59] 验证完成:epoch=7, Qiknklex=3.725393, PIKCP=0.9077, PIKNAQ=0.746171, XMSE=1.128660, MAE=0.938729
[2026-01-23 23:16:59] 局部最佳更新:已保存

[2026-01-23 23:16:59] 训练中:epoch=8/20, iktex=7400, loss=0.054568

[2026-01-23 23:17:00] 训练中:epoch=8/20, iktex=7420, loss=0.045420

[2026-01-23 23:17:01] 训练中:epoch=8/20, iktex=7440, loss=0.042573

[2026-01-23 23:17:02] 训练中:epoch=8/20, iktex=7460, loss=0.042963

[2026-01-23 23:17:02] 训练中:epoch=8/20, iktex=7480, loss=0.043155

[2026-01-23 23:17:03] 训练中:epoch=8/20, iktex=7500, loss=0.042385

[2026-01-23 23:17:04] 训练中:epoch=8/20, iktex=7520, loss=0.043562

[2026-01-23 23:17:05] 验证完成:epoch=8, Qiknklex=3.733421, PIKCP=0.9072, PIKNAQ=0.746361, XMSE=1.162513, MAE=0.971038

[2026-01-23 23:17:05] 训练中:epoch=9/20, iktex=7540, loss=0.045725

[2026-01-23 23:17:06] 训练中:epoch=9/20, iktex=7560, loss=0.043435

[2026-01-23 23:17:07] 训练中:epoch=9/20, iktex=7580, loss=0.046259

[2026-01-23 23:17:08] 训练中:epoch=9/20, iktex=7600, loss=0.043958

[2026-01-23 23:17:09] 训练中:epoch=9/20, iktex=7620, loss=0.044948

[2026-01-23 23:17:09] 训练中:epoch=9/20, iktex=7640, loss=0.043466

[2026-01-23 23:17:10] 训练中:epoch=9/20, iktex=7660, loss=0.042120

[2026-01-23 23:17:11] 验证完成:epoch=9, Qiknklex=3.677055, PIKCP=0.9074, PIKNAQ=0.731040, XMSE=1.162225, MAE=0.969121
[2026-01-23 23:17:11] 局部最佳更新:已保存

[2026-01-23 23:17:12] 训练中:epoch=10/20, iktex=7680, loss=0.042086

[2026-01-23 23:17:12] 训练中:epoch=10/20, iktex=7700, loss=0.043430

[2026-01-23 23:17:13] 训练中:epoch=10/20, iktex=7720, loss=0.044152

[2026-01-23 23:17:14] 训练中:epoch=10/20, iktex=7740, loss=0.042673

[2026-01-23 23:17:15] 训练中:epoch=10/20, iktex=7760, loss=0.039108

[2026-01-23 23:17:16] 训练中:epoch=10/20, iktex=7780, loss=0.041092

[2026-01-23 23:17:16] 训练中:epoch=10/20, iktex=7800, loss=0.040052

[2026-01-23 23:17:17] 验证完成:epoch=10, Qiknklex=3.639217, PIKCP=0.9068, PIKNAQ=0.720512, XMSE=1.089913, MAE=0.905410

[2026-01-23 23:17:17] 局部最佳更新:已保存

[2026-01-23 23:17:18] 训练中:epoch=11/20, iktex=7820, loss=0.040496

[2026-01-23 23:17:19] 训练中:epoch=11/20, iktex=7840, loss=0.041149

[2026-01-23 23:17:19] 训练中:epoch=11/20, iktex=7860, loss=0.040330

[2026-01-23 23:17:20] 训练中:epoch=11/20, iktex=7880, loss=0.039397

[2026-01-23 23:17:21] 训练中:epoch=11/20, iktex=7900, loss=0.040073

[2026-01-23 23:17:22] 训练中:epoch=11/20, iktex=7920, loss=0.039473

[2026-01-23 23:17:23] 训练中:epoch=11/20, iktex=7940, loss=0.038411

[2026-01-23 23:17:23] 验证完成:epoch=11, Qiknklex=3.623322, PIKCP=0.9076, PIKNAQ=0.719365, XMSE=1.150440, MAE=0.963520

[2026-01-23 23:17:23] 局部最佳更新:已保存

[2026-01-23 23:17:24] 训练中:epoch=12/20, iktex=7960, loss=0.037771

[2026-01-23 23:17:25] 训练中:epoch=12/20, iktex=7980, loss=0.041356

[2026-01-23 23:17:26] 训练中:epoch=12/20, iktex=8000, loss=0.039178

[2026-01-23 23:17:26] 训练中:epoch=12/20, iktex=8020, loss=0.038170

[2026-01-23 23:17:27] 训练中:epoch=12/20, iktex=8040, loss=0.040213

[2026-01-23 23:17:28] 训练中:epoch=12/20, iktex=8060, loss=0.037636

[2026-01-23 23:17:29] 训练中:epoch=12/20, iktex=8080, loss=0.040589

[2026-01-23 23:17:29] 验证完成:epoch=12, Qiknklex=3.614583, PIKCP=0.9065, PIKNAQ=0.719463, XMSE=1.193455, MAE=1.002509
[2026-01-23 23:17:29] 局部最佳更新:已保存

[2026-01-23 23:17:30] 训练中:epoch=13/20, iktex=8100, loss=0.038457

[2026-01-23 23:17:31] 训练中:epoch=13/20, iktex=8120, loss=0.038322

[2026-01-23 23:17:32] 训练中:epoch=13/20, iktex=8140, loss=0.037209

[2026-01-23 23:17:33] 训练中:epoch=13/20, iktex=8160, loss=0.041653

[2026-01-23 23:17:33] 训练中:epoch=13/20, iktex=8180, loss=0.040835

[2026-01-23 23:17:34] 训练中:epoch=13/20, iktex=8200, loss=0.037760

[2026-01-23 23:17:35] 训练中:epoch=13/20, iktex=8220, loss=0.038402

[2026-01-23 23:17:36] 验证完成:epoch=13, Qiknklex=3.576638, PIKCP=0.9069, PIKNAQ=0.706375, XMSE=1.136247, MAE=0.942643
[2026-01-23 23:17:36] 局部最佳更新:已保存

[2026-01-23 23:17:36] 训练中:epoch=14/20, iktex=8240, loss=0.039916

[2026-01-23 23:17:37] 训练中:epoch=14/20, iktex=8260, loss=0.037929

[2026-01-23 23:17:38] 训练中:epoch=14/20, iktex=8280, loss=0.037286

[2026-01-23 23:17:39] 训练中:epoch=14/20, iktex=8300, loss=0.036667

[2026-01-23 23:17:40] 训练中:epoch=14/20, iktex=8320, loss=0.037895

[2026-01-23 23:17:40] 训练中:epoch=14/20, iktex=8340, loss=0.038349

[2026-01-23 23:17:42] 验证完成:epoch=14, Qiknklex=3.522880, PIKCP=0.9069, PIKNAQ=0.696927, XMSE=1.170908, MAE=0.979915
[2026-01-23 23:17:42] 局部最佳更新:已保存

[2026-01-23 23:17:42] 训练中:epoch=15/20, iktex=8360, loss=0.035283

[2026-01-23 23:17:43] 训练中:epoch=15/20, iktex=8380, loss=0.040000

[2026-01-23 23:17:43] 训练中:epoch=15/20, iktex=8400, loss=0.038996

[2026-01-23 23:17:44] 训练中:epoch=15/20, iktex=8420, loss=0.036828

[2026-01-23 23:17:45] 训练中:epoch=15/20, iktex=8440, loss=0.034348

[2026-01-23 23:17:46] 训练中:epoch=15/20, iktex=8460, loss=0.036129

[2026-01-23 23:17:47] 训练中:epoch=15/20, iktex=8480, loss=0.038090

[2026-01-23 23:17:48] 验证完成:epoch=15, Qiknklex=3.563543, PIKCP=0.9066, PIKNAQ=0.700831, XMSE=1.210535, MAE=1.017767

[2026-01-23 23:17:48] 训练中:epoch=16/20, iktex=8500, loss=0.039371

[2026-01-23 23:17:49] 训练中:epoch=16/20, iktex=8520, loss=0.035054

[2026-01-23 23:17:49] 训练中:epoch=16/20, iktex=8540, loss=0.037839

[2026-01-23 23:17:50] 训练中:epoch=16/20, iktex=8560, loss=0.036015

[2026-01-23 23:17:51] 训练中:epoch=16/20, iktex=8580, loss=0.040944

[2026-01-23 23:17:52] 训练中:epoch=16/20, iktex=8600, loss=0.038425

[2026-01-23 23:17:53] 训练中:epoch=16/20, iktex=8620, loss=0.037806

[2026-01-23 23:17:54] 验证完成:epoch=16, Qiknklex=3.482223, PIKCP=0.9079, PIKNAQ=0.688006, XMSE=1.083234, MAE=0.900887
[2026-01-23 23:17:54] 局部最佳更新:已保存

[2026-01-23 23:17:54] 训练中:epoch=17/20, iktex=8640, loss=0.035480

[2026-01-23 23:17:55] 训练中:epoch=17/20, iktex=8660, loss=0.035201

[2026-01-23 23:17:56] 训练中:epoch=17/20, iktex=8680, loss=0.036961

[2026-01-23 23:17:56] 训练中:epoch=17/20, iktex=8700, loss=0.034100

[2026-01-23 23:17:57] 训练中:epoch=17/20, iktex=8720, loss=0.033129

[2026-01-23 23:17:58] 训练中:epoch=17/20, iktex=8740, loss=0.037173

[2026-01-23 23:17:59] 训练中:epoch=17/20, iktex=8760, loss=0.033702

[2026-01-23 23:18:00] 验证完成:epoch=17, Qiknklex=3.506050, PIKCP=0.9081, PIKNAQ=0.695087, XMSE=1.196327, MAE=1.005977

[2026-01-23 23:18:00] 训练中:epoch=18/20, iktex=8780, loss=0.036303

[2026-01-23 23:18:01] 训练中:epoch=18/20, iktex=8800, loss=0.035700

[2026-01-23 23:18:02] 训练中:epoch=18/20, iktex=8820, loss=0.035674

[2026-01-23 23:18:03] 训练中:epoch=18/20, iktex=8840, loss=0.036096

[2026-01-23 23:18:04] 训练中:epoch=18/20, iktex=8860, loss=0.036539

[2026-01-23 23:18:04] 训练中:epoch=18/20, iktex=8880, loss=0.034407

[2026-01-23 23:18:05] 训练中:epoch=18/20, iktex=8900, loss=0.037840

[2026-01-23 23:18:06] 验证完成:epoch=18, Qiknklex=3.521707, PIKCP=0.9075, PIKNAQ=0.690776, XMSE=1.137470, MAE=0.947129

[2026-01-23 23:18:07] 训练中:epoch=19/20, iktex=8920, loss=0.030608

[2026-01-23 23:18:07] 训练中:epoch=19/20, iktex=8940, loss=0.036275

[2026-01-23 23:18:08] 训练中:epoch=19/20, iktex=8960, loss=0.034066

[2026-01-23 23:18:09] 训练中:epoch=19/20, iktex=8980, loss=0.034828

[2026-01-23 23:18:10] 训练中:epoch=19/20, iktex=9000, loss=0.034456

[2026-01-23 23:18:11] 训练中:epoch=19/20, iktex=9020, loss=0.035063

[2026-01-23 23:18:11] 训练中:epoch=19/20, iktex=9040, loss=0.031940

[2026-01-23 23:18:12] 验证完成:epoch=19, Qiknklex=3.538940, PIKCP=0.9078, PIKNAQ=0.697258, XMSE=1.230048, MAE=1.036847

[2026-01-23 23:18:13] 训练中:epoch=20/20, iktex=9060, loss=0.034300

[2026-01-23 23:18:14] 训练中:epoch=20/20, iktex=9080, loss=0.031911

[2026-01-23 23:18:15] 训练中:epoch=20/20, iktex=9100, loss=0.036330

[2026-01-23 23:18:15] 训练中:epoch=20/20, iktex=9120, loss=0.032747

[2026-01-23 23:18:16] 训练中:epoch=20/20, iktex=9140, loss=0.034597

[2026-01-23 23:18:17] 训练中:epoch=20/20, iktex=9160, loss=0.036280

[2026-01-23 23:18:18] 验证完成:epoch=20, Qiknklex=3.513335, PIKCP=0.9070, PIKNAQ=0.693711, XMSE=1.143388, MAE=0.953677

[2026-01-23 23:18:18] 训练中:epoch=1/20, iktex=6440, loss=0.982133

[2026-01-23 23:18:19] 训练中:epoch=1/20, iktex=6460, loss=0.187753

[2026-01-23 23:18:20] 训练中:epoch=1/20, iktex=6480, loss=0.166221

[2026-01-23 23:18:21] 训练中:epoch=1/20, iktex=6500, loss=0.139439

[2026-01-23 23:18:22] 训练中:epoch=1/20, iktex=6520, loss=0.122576

[2026-01-23 23:18:22] 训练中:epoch=1/20, iktex=6540, loss=0.121046

[2026-01-23 23:18:23] 训练中:epoch=1/20, iktex=6560, loss=0.119212

[2026-01-23 23:18:24] 验证完成:epoch=1, Qiknklex=3.618781, PIKCP=0.9086, PIKNAQ=0.733263, XMSE=1.287939, MAE=1.053377
[2026-01-23 23:18:24] 局部最佳更新:已保存

[2026-01-23 23:18:25] 训练中:epoch=2/20, iktex=6580, loss=0.104946

[2026-01-23 23:18:25] 训练中:epoch=2/20, iktex=6600, loss=0.108112

[2026-01-23 23:18:26] 训练中:epoch=2/20, iktex=6620, loss=0.083196

[2026-01-23 23:18:27] 训练中:epoch=2/20, iktex=6640, loss=0.086736

[2026-01-23 23:18:28] 训练中:epoch=2/20, iktex=6660, loss=0.080689

[2026-01-23 23:18:28] 训练中:epoch=2/20, iktex=6680, loss=0.073057

[2026-01-23 23:18:29] 训练中:epoch=2/20, iktex=6700, loss=0.069539

[2026-01-23 23:18:30] 验证完成:epoch=2, Qiknklex=3.970972, PIKCP=0.9063, PIKNAQ=0.798704, XMSE=1.134426, MAE=0.941015

[2026-01-23 23:18:31] 训练中:epoch=3/20, iktex=6720, loss=0.070127

[2026-01-23 23:18:31] 训练中:epoch=3/20, iktex=6740, loss=0.066884

[2026-01-23 23:18:32] 训练中:epoch=3/20, iktex=6760, loss=0.065628

[2026-01-23 23:18:33] 训练中:epoch=3/20, iktex=6780, loss=0.061910

[2026-01-23 23:18:34] 训练中:epoch=3/20, iktex=6800, loss=0.068518

[2026-01-23 23:18:35] 训练中:epoch=3/20, iktex=6820, loss=0.056135

[2026-01-23 23:18:36] 训练中:epoch=3/20, iktex=6840, loss=0.058148

[2026-01-23 23:18:36] 验证完成:epoch=3, Qiknklex=4.040193, PIKCP=0.9046, PIKNAQ=0.820060, XMSE=1.082205, MAE=0.878320

[2026-01-23 23:18:37] 训练中:epoch=4/20, iktex=6860, loss=0.065940

[2026-01-23 23:18:38] 训练中:epoch=4/20, iktex=6880, loss=0.055886

[2026-01-23 23:18:38] 训练中:epoch=4/20, iktex=6900, loss=0.054539

[2026-01-23 23:18:39] 训练中:epoch=4/20, iktex=6920, loss=0.056176

[2026-01-23 23:18:40] 训练中:epoch=4/20, iktex=6940, loss=0.049238

[2026-01-23 23:18:41] 训练中:epoch=4/20, iktex=6960, loss=0.053896

[2026-01-23 23:18:42] 训练中:epoch=4/20, iktex=6980, loss=0.050402

[2026-01-23 23:18:42] 验证完成:epoch=4, Qiknklex=3.945017, PIKCP=0.9064, PIKNAQ=0.798767, XMSE=1.105710, MAE=0.889534

[2026-01-23 23:18:43] 训练中:epoch=5/20, iktex=7000, loss=0.049157

[2026-01-23 23:18:44] 训练中:epoch=5/20, iktex=7020, loss=0.048903

[2026-01-23 23:18:45] 训练中:epoch=5/20, iktex=7040, loss=0.047770

[2026-01-23 23:18:45] 训练中:epoch=5/20, iktex=7060, loss=0.050459

[2026-01-23 23:18:46] 训练中:epoch=5/20, iktex=7080, loss=0.048566

[2026-01-23 23:18:47] 训练中:epoch=5/20, iktex=7100, loss=0.049118

[2026-01-23 23:18:48] 训练中:epoch=5/20, iktex=7120, loss=0.055341

[2026-01-23 23:18:48] 验证完成:epoch=5, Qiknklex=3.703244, PIKCP=0.9063, PIKNAQ=0.752934, XMSE=1.074326, MAE=0.863712

[2026-01-23 23:18:49] 训练中:epoch=6/20, iktex=7140, loss=0.048305

[2026-01-23 23:18:50] 训练中:epoch=6/20, iktex=7160, loss=0.049432

[2026-01-23 23:18:51] 训练中:epoch=6/20, iktex=7180, loss=0.042551

[2026-01-23 23:18:52] 训练中:epoch=6/20, iktex=7200, loss=0.046066

[2026-01-23 23:18:52] 训练中:epoch=6/20, iktex=7220, loss=0.049302

[2026-01-23 23:18:53] 训练中:epoch=6/20, iktex=7240, loss=0.047127

[2026-01-23 23:18:54] 训练中:epoch=6/20, iktex=7260, loss=0.046953

[2026-01-23 23:18:55] 验证完成:epoch=6, Qiknklex=3.698534, PIKCP=0.9077, PIKNAQ=0.746037, XMSE=1.013045, MAE=0.813284
[2026-01-23 23:18:55] 触发早停:连续未提升=5,最佳轮数=1
[2026-01-23 23:18:55] 训练结束:最佳模型已保存
[2026-01-23 23:18:55] 训练阶段结束

[2026-01-23 23:18:55] 测试集预测她区间生成完成
[2026-01-23 23:18:55] 评估指标计算完成

[2026-01-23 23:18:57] 评估图形绘制完成
[2026-01-23 23:18:57] 流程结束

>>

结束

更多详细内容请访问

http://机器学习有图有真相Matlab实现基于LSTM-KDE长短期记忆网络(LSTM)结合核密度估计(KDE)进行多变量回归区间预测(代码已调试成功,可一键运行,每一行都有详细注释)资源-CSDN下载 https://download.csdn.net/download/xiaoxingkongyuxi/92626803

http://机器学习有图有真相Matlab实现基于LSTM-KDE长短期记忆网络(LSTM)结合核密度估计(KDE)进行多变量回归区间预测(代码已调试成功,可一键运行,每一行都有详细注释)资源-CSDN下载 https://download.csdn.net/download/xiaoxingkongyuxi/92626803

 

本文地址:https://www.yitenyun.com/6204.html

搜索文章

Tags

#语言模型 #服务器 #人工智能 #大模型 #ai #ai大模型 #agent #飞书 #python #pip #conda #微信 #log4j #ollama #AI编程 #运维 #飞牛nas #fnos #AI #ios面试 #ios弱网 #断点续传 #ios开发 #objective-c #ios #ios缓存 #远程工作 #Trae #IDE #AI 原生集成开发环境 #Trae AI #kylin #docker #arm #学习 #产品经理 #AI大模型 #大模型学习 #大模型教程 #ssh #mongodb #linux #数据库 #算法 #数据结构 香港站群服务器 多IP服务器 香港站群 站群服务器 #PyTorch #深度学习 #模型训练 #星图GPU #银河麒麟高级服务器操作系统安装 #银河麒麟高级服务器V11配置 #设置基础软件仓库时出错 #银河麒高级服务器系统的实操教程 #生产级部署银河麒麟服务系统教程 #Linux系统的快速上手教程 #fastapi #html #css #云计算 #云原生 #kubernetes #笔记 #平面 #容器 #学习方法 #大数据 #职场和发展 #程序员创富 #科技 #自然语言处理 #神经网络 #私有化部署 #自动化 #ansible #ARM服务器 # GLM-4.6V # 多模态推理 #ubuntu #音视频 #pytorch #vscode #ide #java #开发语言 #前端 #javascript #架构 #gitee #hadoop #hbase #hive #zookeeper #spark #kafka #flink #大模型入门 #低代码 #爬虫 #分布式 #配置中心 #SpringCloud #Apollo #区块链 #测试用例 #生活 #langchain #mysql #分库分表 #垂直分库 #水平分表 #雪花算法 #分布式ID #跨库查询 #C++ #Reactor #华为云 #部署上线 #动静分离 #Nginx #新人首发 #MobaXterm #物联网 #websocket #gemini #gemini国内访问 #gemini api #gemini中转搭建 #Cloudflare #数学建模 #http #mcp #mcp server #AI实战 #llama #opencv #sql #AIGC #agi #fabric #postgresql #openHiTLS #TLCP #DTLCP #密码学 #商用密码算法 #进程控制 #java-ee #nginx #开源 #项目 #高并发 #阿里云 #机器学习 #经验分享 #安卓 #node.js #CFD #aws #Ansible # 自动化部署 # VibeThinker #windows #iventoy #VmWare #OpenEuler #大语言模型 #长文本处理 #GLM-4 #Triton推理 #github #git #分阶段策略 #模型协议 #pycharm #驱动开发 #c++ #网络 #tcp/ip #多个客户端访问 #IO多路复用 #回显服务器 #TCP相关API #矩阵 #线性代数 #AI运算 #向量 #后端 #Linux #TCP #线程 #线程池 #腾讯云 #harmonyos #鸿蒙PC #流程图 #论文阅读 #信息可视化 #重构 #计算机视觉 #android #c# #word #umeditor粘贴word #ueditor粘贴word #ueditor复制word #ueditor上传word图片 #qt #flutter #鸿蒙 #unity #游戏引擎 #RTP over RTSP #RTP over TCP #RTSP服务器 #RTP #TCP发送RTP #vue上传解决方案 #vue断点续传 #vue分片上传下载 #vue分块上传下载 #华为 #dify #mvp #个人开发 #设计模式 #cpolar #https #安全 #ci/cd #jenkins #gitlab #Conda # 私有索引 # 包管理 #正则 #正则表达式 #rag #rocketmq #数信院生信服务器 #Rstudio #生信入门 #生信云服务器 #stm32 #microsoft #SSM 框架 #孕期健康 #产品服务推荐 #推荐系统 #用户交互 #Windows 更新 #web安全 #硬件工程 #课程设计 #spring boot #程序员 #RAGFlow #DeepSeek-R1 #Harbor #iBMC #UltraISO #性能优化 #YOLO #maven #spring #进程 #vue.js #serverless #Telegram机器人 #ClawdBot #多模态翻译 #大模型推理 #程序人生 #科研 #博士 #RAG #RAG调优 #RAG系统 #召回 #风控模型 #决策盲区 #牛客周赛 #搜索引擎 #导航网 #php #信息与通信 #rpa #实时互动 #能源 #网络协议 #内存治理 #django #mcu #文心一言 #AI智能体 #FL Studio #FLStudio #FL Studio2025 #FL Studio2026 #FL Studio25 #FL Studio26 #水果软件 #centos #svn #超算服务器 #算力 #高性能计算 #仿真分析工作站 #springboot #lvs #负载均衡 #华为od #华为od机考真题 #华为od机试真题 #华为OD上机考试真题 #华为OD机试双机位C卷 #华为OD上机考试双机位C卷 #华为ODFLASH坏块监测系统 #毕业设计 #堡垒机 #安恒明御堡垒机 #windterm #时序数据库 #Canal #jar #servlet #儿童书籍 #儿童诗歌 #童话故事 #经典好书 #儿童文学 #好书推荐 #经典文学作品 #企业开发 #ERP #项目实践 #.NET开发 #C#编程 #编程与数学 #c语言 #ai agent #ai大小模型 #小模型 #开源小模型 #8b模型 #国产大模型 #SOTA #HCIA-Datacom #H12-811 #题库 #最新题库 #spring cloud #json #缓存 #redis #Agent #jetty #ecmascript #elementui #开源软件 #测试工具 #内网穿透 #uni-app #小程序 #notepad++ #ui #团队开发 #墨刀 #figma #mobaxterm #le audio #蓝牙 #低功耗音频 #通信 #连接 #MCP #MCP服务器 #select #论文 #毕设 #FaceFusion # Token调度 # 显存优化 #微服务 #Oauth2 #PyCharm # 远程调试 # YOLOFuse #处理器模块 #现货库存 #价格优惠 #PM864AK01 #3BSE018161R1 #PLC #控制器模块 #shell #CPU利用率 #电脑 #udp #FTP服务器 #2026年美赛C题代码 #2026年美赛 #vim #gcc #yum #企业微信 #es安装 #pjsip #prometheus #AI办公 #智能助手 #网络安全 #ESXi #golang #数据结构与算法 #DeepSeek #服务器繁忙 #服务器架构 #AI推理芯片 #推荐算法 #设备驱动 #芯片资料 #网卡 #diskinfo # TensorFlow # 磁盘健康 #jmeter #功能测试 #软件测试 #自动化测试 #边缘计算 #哈希算法 #散列表 #java大文件上传 #java大文件秒传 #java大文件上传下载 #java文件传输解决方案 #嵌入式 #蓝桥杯 #scrapy #jvm #学习笔记 #jdk #web #webdav #SSH # ProxyJump # 跳板机 #LLM #远程连接 #计算机网络 #转行 #我的世界 #游戏私服 #云服务器 #全能视频处理软件 #视频裁剪工具 #视频合并工具 #视频压缩工具 #视频字幕提取 #视频处理工具 #Ubuntu服务器 #硬盘扩容 #命令行操作 #VMware #Dell #PowerEdge620 #内存 #硬盘 #RAID5 #gitea #鸭科夫 #逃离鸭科夫 #鸭科夫联机 #鸭科夫异地联机 #游戏 #开服 #压枪 #PowerBI #企业 #matlab #支持向量机 #深度优先 #DFS #FRP #ssl #swiftui #swift #职场发展 #dubbo #chatgpt #DS随心转 #新浪微博 #前端框架 #钉钉 #机器人 #autosar #零售 #3d #css3 #线性回归 #SSE #Android #Bluedroid #AI写作 #就业指南 #openclaw #实在Agent #分类 #社科数据 #数据分析 #数据挖掘 #数据统计 #经管数据 #ffmpeg #pdf #论文笔记 #游戏美术 #技术美术 #游戏策划 #游戏程序 #用户体验 #压力测试 #创业创新 #bytebase #lstm #whisper #transformer #googlecloud #思维模型 #认知框架 #认知 #架构师 #系统架构 #软考 #系统架构师 #AI大模型应用开发 #电商 #汽车 #嵌入式硬件 #powerpoint #Com #Buck #NVIDIA #交错并联 #DGX #CISSP #CISSP考点 #信息安全 #CISSP哪里考 #公众号:厦门微思网络 #+微信号:xmweisi #LabVIEW #光谱仪 #串口通信 #AQ6370 #flask #dreamweaver #DisM++ # 系统维护 #gpu算力 #AI产品经理 #大模型开发 #健康医疗 #金融 #教育电商 #媒体 #prompt #Java面试 #Java程序员 #后端开发 #Redis #分布式锁 #arm开发 #excel #abtest #链表 #macos #海外服务器安装宝塔面板 #敏捷流程 #自动驾驶 #单片机 #ISP Pipeline #行缓冲 #chrome #leetcode #多线程 #数组 #性能调优策略 #双锁实现细节 #动态分配节点内存 #wsl #L2C #勒让德到切比雪夫 #oracle #visual studio code #postman #easyui #目标检测 #pyqt #单目测距 #速度估计 #pyqt界面 #注意力机制 #京东云 #Cpolar #国庆假期 #服务器告警 #操作系统 #Moltbook #Clawdbot #其他 #SEO优化 #OBC #xss #selenium #Java #Spring #Spring Boot #twitter #mmap #nio #svm #amdgpu #kfd #ROCm #爱心代码 #表白代码 #爱心 #tkinter #情人节表白代码 #elasticsearch #版本控制 #Git入门 #开发工具 #代码托管 #中间件 #Redisson #车辆排放 #rpc #面试 #protobuf #微信小程序 #计算机 #连锁药店 #连锁店 #防毒口罩 #防尘口罩 #具身智能 #发展心理学 #运动控制 #内在动机 #镜像神经元 #交叉学科 #七年级上册数学 #有理数 #有理数的加法法则 #绝对值 #数列 #数学 #数论 #洛谷 #sglang #聚类 #laravel #CNAS #CMA #程序文件 #逻辑回归 #numpy #scikit-learn #matplotlib #FutureWarning #list #智能路由器 #echarts #信号处理 #目标跟踪 #全栈 #sqlserver #酒店客房管理系统 #漏洞 #数据安全 #注入漏洞 #IPMI #智慧校园一体化平台 #智慧校园管理系统 #合肥自友科技-智慧校园 #智慧校园源头厂家 #智慧校园软件供应商 #智慧校园平台服务商 #高性价比智慧校园系统 #结构体 #Moltbot #阻塞队列 #生产者消费者模型 #服务器崩坏原因 #电脑故障 #文件系统 #asp.net #vue3 #天地图 #403 Forbidden #天地图403错误 #服务器403问题 #天地图API #部署报错 #考研 #软件工程 #测试覆盖率 #单元测试 #可用性测试 #bash #wps #GB/T4857 #GB/T4857.17 #GB/T4857测试 #cnn #vllm #Streamlit #Qwen #本地部署 #AI聊天机器人 #stl #数据集 #蓝耘智算 #图像分类 #图像分割 #yolo26算法 #单例模式 #数字化转型 #实体经济 #中小企业 #商业模式 #软件开发 #青蓝送水模式 #创业干货 #wpf #社交智慧 #职场生存 #系统思维 #身体管理 #商务宴请 #拒绝油腻 #清醒日常 #mybatis #后端 #语音识别 #测评 #幼儿园 #园长 #幼教 #银河麒麟 #人大金仓 #Kingbase #rabbitmq #ssm #若依 #quartz #框架 #YOLO26 #YOLO11 #虚幻 #ue5 #epoll #百度 #百度文库 #爱企查 #旋转验证码 #验证码识别 #图像识别 #流量运营 #用户运营 #智能手机 #openresty #lua #麒麟 #国产化 #tomcat #firefox #STL #string #笔试 #TURN # WebRTC # HiChatBox #windows11 #系统修复 ##程序员和算法的浪漫 #vue #fastmcp #.netcore #部署 #AI运维 #企业微信集成 #DevOps自动化 #clickhouse #贪心算法 #高仿永硕E盘的个人网盘系统源码 #阳台种菜 #园艺手扎 #Gemini #Nano Banana Pro #todesk #DHCP #apache #测试流程 #金融项目实战 #P2P #webrtc #状态模式 #启发式算法 #android-studio #android studio #android runtime #windbg分析蓝屏教程 #跳槽 #业界资讯 #投标 #标书制作 #Chat平台 #ARM架构 #数据仓库 #交互 #智能体从0到1 #新手入门 #Modbus-TCP #银河麒麟部署 #银河麒麟部署文档 #银河麒麟linux #银河麒麟linux部署教程 #编辑器 #5G #国产化OS #并发 #memcache #研发管理 #禅道 #禅道云端部署 #数据采集 #clawdbot #QQbot #QQ #360AI图片精简版 #看图工具 #电脑看图工具 #360看图工具 #AI看图工具 #labview #集成测试 #winscp #mariadb #.net #求职招聘 #RPA #影刀RPA #网络攻击模型 #ProCAST2025 #ProCast #脱模 #顶出 #应力计算 #铸造仿真 #变形计算 #bootstrap #余行补位 #意义对谈 #余行论 #领导者定义计划 #sql注入 #数模美赛 #Keycloak #Quarkus #AI编程需求分析 #守护进程 #复用 #screen #可信计算技术 #就业 #osg #Smokeping #设计规范 #放大电路 #Deepseek #gpt-3 #SEO #企业架构治理 #电力企业IT架构 #IT架构设计 # IndexTTS 2.0 # 自动化运维 #wordpress #雨云 #电气工程 #C# #everything #命令模式 #visual studio #知识图谱 #双指针 #SSH Agent Forwarding # PyTorch # 容器化 #azure #OpenAI #高可用 #故障 #优化 #考试系统 #在线考试 #培训考试 #考试练习 #OCR #文字检测 #Rust #三维 #3D #三维重建 #Playbook #AI服务器 #react.js #CVE-2025-61686 #路径遍历高危漏洞 #长文本理解 #glm-4 #推理部署 #微PE # GLM-4.6V-Flash-WEB # AI部署 #AB包 #需求分析 # GPU租赁 # 自建服务器 #pipeline #Transformers #NLP #Tracker 服务器 #响应最快 #torrent 下载 #2026年 #Aria2 可用 #迅雷可用 #BT工具通用 #junit #MinIO服务器启动与配置详解 #vuejs #Tetrazine-Acid #1380500-92-4 #运营 #Puppet # IndexTTS2 # TTS #未加引号服务路径 #nmodbus4类库使用教程 #平板 #制造 #交通物流 #智能硬件 #系统升级 #信创 #anaconda #虚拟环境 #IO #排序算法 #插入排序 #AI论文写作工具 #学术论文创作 #论文效率提升 #MBA论文写作 #RAID #磁盘 #系统管理 #服务 #源代码管理 #ai编程 #claude #js逆向 #逆向 #混淆 #金融投资Agent #GPU服务器 #8U #硬件架构 #muduo库 #Node.js #漏洞检测 #CVE-2025-27210 #HeyGem # 局域网访问 # 批量处理 #claude code #codex #code cli #ccusage #PyTorch 特性 #动态计算图 #张量(Tensor) #自动求导Autograd #GPU 加速 #生态系统与社区支持 #与其他框架的对比 #ida #copilot #glibc #Ascend #MindIE #tensorflow #KMP #TRO #TRO侵权 #TRO和解 #银河麒麟操作系统 #openssh #华为交换机 #信创终端 #ESP32 # OTA升级 # 黄山派 #CCE #Dify-LLM #Flexus # 双因素认证 #RAID技术 #存储 #打卡 #计算机英语翻译 #mybatis #防火墙 #jupyter #1024程序员节 #rust #Tokio #异步编程 #系统编程 #Pin #http服务器 #spine #内容运营 #产品运营 #react native #web3.py #llm #硬盘克隆 #DiskGenius #mapreduce #uv #里氏替换原则 #SQL #RustDesk #IndexTTS 2.0 #本地化部署 #b/s架构 #移动学习平台 #tcp/ip #智能路由器 #政务 #n8n #生信 #三种参数 #参数的校验 #fastAPI #pve #LE Audio #BAP #gpt #漏洞挖掘 #Exchange #sizeof和strlen区别 #sizeof #strlen #计算数据类型字节数 #计算字符串长度 #可再生能源 #绿色算力 #风电 #idea #肿瘤相关巨噬细胞 #CXCL5 #信号通路 #胃癌 #mTOR #乐备实 #labex #智能体来了 #全链路优化 #实战教程 #clamav #文生视频 #CogVideoX #AI部署 #kong #Kong Audio #Kong Audio3 #KongAudio3 #空音3 #空音 #中国民乐 #计算机外设 #iphone #防排烟监控 #消防风机一体化 #BA楼宇自控 #DDC控制器 #IBMS集成系统 #n8n解惑 #树莓派4b安装系统 #图像处理 #yolo #esp32 arduino #行为模式分析 #数据 #应用层 #跨领域 #敏感信息 #以太网温湿度气体多参量传感器 #以太网多合一传感器 #以太网环境监测终端 #可定制气体监测模组 #我的世界服务器搭建 #minecraft #简单数论 #埃氏筛法 #cursor #广播 #组播 #并发服务器 #KMS激活 #homelab #Lattepanda #Jellyfin #Plex #Emby #Kodi #yolov12 #研究生life #聊天小程序 #ddos #梁辰兴 #传输连接管理 #计算机网络基础 #gpu #nvcc #cuda #nvidia #TensorRT # Triton # 推理优化 #Llama-Factory # 大模型推理 #JAVA # 服务器IP # 端口7860 #几何学 #拓扑学 #scala #无人机 #健身房预约系统 #健身房管理系统 #健身管理系统 #ThingsBoard MCP # CUDA #adb #UEFI #BIOS #Legacy BIOS #1panel #vmware #python学习路线 #python基础 #python进阶 #python标准库 # 服务器IP访问 # 端口映射 #数字营销 #seo #ICPC #sqlite #机器视觉 #6D位姿 #dba #mssql #risc-v #openEuler #CANN #paddlepaddle #硬件 #LoRA # RTX 3090 # lora-scripts #CUDA #Triton #fiddler #2026AI元年 #年度趋势 #MIMO #OFDM #技术原理 #通信算法 #ueditor导入word #ueditor导入pdf #google #search #区间dp #二进制枚举 #图论 #vnstat #监控 #GNC #控制 #姿轨控 #改行学it #gerrit #Coze工作流 #AI Agent指挥官 #多智能体系统 #扩展屏应用开发 #域名注册 #新媒体运营 #网站建设 #国外域名 #HBA卡 #RAID卡 #debian #运维开发 #GB28181 #SIP信令 #SpringBoot #视频监控 #WT-2026-0001 #QVD-2026-4572 #smartermail #ModelEngine #window10 #window11 #病毒 #DCOM进程 #系统进程资源占用高 #支付 #编程助手 #ambari #超时设置 #客户端/服务器 #网络编程 #智慧城市 #开源社区 #国产基础软件 #AI框架 #SAP #ebs #metaerp #oracle ebs #网路编程 #百万并发 #rtmp #SAM3 #ROS #框架搭建 #江协 #瑞萨 #OLED屏幕移植 #910B #昇腾 #hdfs #隐私合规 #网络安全保险 #法律风险 #风险管理 #React #Next #CVE-2025-55182 #RSC #SSH免密登录 #MQTT协议 #H5 #跨域 #发布上线后跨域报错 #请求接口跨域问题解决 #跨域请求代理配置 #request浏览器跨域 #C语言 #vivado license #CVE-2025-68143 #CVE-2025-68144 #CVE-2025-68145 #旅游推荐管理系统 #旅游攻略 #typescript #zabbix #游戏机 #集成学习 #JumpServer #UDP的API使用 #静脉曲张 #腿部健康 #ONLYOFFICE #MCP 服务器 #spring native #远程访问 #远程办公 #飞网 #安全高效 #配置简单 #快递盒检测检测系统 #振镜 #振镜焊接 #公共MQTT服务器 #STUN # TURN # NAT穿透 #逆向工程 #ngrok #claudeCode #content7 # 目标检测 #chat #连接数据库报错 #xeon #进程创建与终止 #galeweather.cn #高精度天气预报数据 #光伏功率预测 #风电功率预测 #高精度气象 #Modbus # 串口服务器 # NPort5630 #Ubuntu #统信UOS #搜狗输入法 #汇编 #WIN32汇编 #fpga开发 #unity3d #服务器框架 #Fantasy #SRS #流媒体 #直播 # 黑屏模式 # TTS服务器 #Python办公自动化 #Python办公 #pytest #UDP套接字编程 #UDP协议 #网络测试 #知识 #麒麟OS #科普 #JT/T808 #车联网 #车载终端 #模拟器 #仿真器 #开发测试 #串口服务器 #工业级串口服务器 #串口转以太网 #串口设备联网通讯模块 #串口服务器选型 #tcpdump #文件IO #输入输出流 #反向代理 #鼠大侠网络验证系统源码 #AI赋能盾构隧道巡检 #开启基建安全新篇章 #以注意力为核心 #YOLOv12 #AI隧道盾构场景 #盾构管壁缺陷病害异常检测预警 #隧道病害缺陷检测 #paddleocr #Nacos #卷积神经网络 #参数估计 #矩估计 #概率论 #iot #AI技术 #Spring AI #STDIO协议 #Streamable-HTTP #McpTool注解 #服务器能力 #带宽 #流量 #大带宽 #Dify #轻量化 #低配服务器 #LabVIEW知识 #LabVIEW程序 #LabVIEW功能 #工具集 #鸿蒙系统 #系统安全 #车载系统 #安全架构 #Kuikly #openharmony #pencil #pencil.dev #设计 #运动 #高级IO #reactor反应堆 #journalctl #xlwings #Excel #东方仙盟 #仙盟创梦IDE #rustdesk #LangGraph #intellij-idea #database #儿童AI #图像生成 #迁移重构 #代码迁移 #Claude #LobeChat #vLLM #GPU加速 #flume #p2p #Steam #饥荒联机版 #零代码平台 #AI开发 #榛樿鍒嗙被 #文件管理 #NAS #文件服务器 #环境搭建 #openlayers #bmap #tile #server #scanf #printf #getchar #putchar #cin #cout #pandas #mamba #CPU #监测 #ShaderGraph #图形 #Taiji #凤希AI伴侣 #esp32教程 #高品质会员管理系统 #收银系统 #同城配送 #最好用的电商系统 #最好用的系统 #推荐的前十系统 #JAVA PHP 小程序 #数码相机 #ipv6 #SSH反向隧道 # Miniconda # Jupyter远程访问 # 显卡驱动备份 #高考 #客户端 #DIY机器人工房 #流量监控 #nacos #银河麒麟aarch64 #uvicorn #uvloop #asgi #event #Spring源码 #信令服务器 #Janus #MediaSoup #AI助手 #轻量大模型 #企业存储 #RustFS #对象存储 #ue4 #DedicatedServer #独立服务器 #专用服务器 #模块 #MC #Jetty # CosyVoice3 # 嵌入式服务器 #Cesium #交互设计 #智能避障 #语义搜索 #嵌入模型 #Qwen3 #AI推理 #链表的销毁 #链表的排序 #链表倒置 #判断链表是否有环 #建筑缺陷 #红外 #sentinel #空间计算 #原型模式 #戴尔服务器 #戴尔730 #装系统 #黑客技术 #挖漏洞 #日志分析 #math #homework # 公钥认证 #embedding #人脸识别 #人脸核身 #活体检测 #身份认证与人脸对比 #微信公众号 #kmeans #代理 #eBPF #web3 #EMC存储 #存储维护 #NetApp存储 #grafana #计算机现代史 #开发环境搭建 #自动化运维 #ip #智慧校园解决方案 #智慧校园选型 #智慧校园采购 #智慧校园软件 #智慧校园专项资金 #智慧校园定制开发 #模型上下文协议 #MultiServerMCPC #load_mcp_tools #load_mcp_prompt #asp.net大文件上传 #asp.net大文件上传下载 #asp.net大文件上传源码 #ASP.NET断点续传 #asp.net上传文件夹 #SSH别名 #GATT服务器 #蓝牙低功耗 #deepseek #智能化测试 #质量效能 #skills #playwright #持续测试 #职业和发展 #SSH公钥认证 # 安全加固 #http头信息 #Fun-ASR # 语音识别 # WebUI #密码 #cpp #dash # 远程访问 # 服务器IP配置 #捷配 #pcb工艺 #创业管理 #财务管理 #团队协作 #创始人必修课 #数字化决策 #经营管理 #docker-compose #ping通服务器 #读不了内网数据库 #bug菌问答团队 #GPU #AutoDL ##租显卡 #markdown #建站 #IFix #Android16 #音频性能实战 #音频进阶 #wireshark #screen 命令 #题解 #图 #dijkstra #迪杰斯特拉 #指针 #LVDS #高速ADC #DDR #VS Code调试配置 #Deepoc #具身模型 #开发板 #未来 #xshell #host key #收银台开源 #收银台接口 #商业开源 #K8s #镜像 #集群自动化 #黑群晖 #虚拟机 #无U盘 #纯小白 #Gunicorn #WSGI #Flask #并发模型 #容器化 #Python #性能调优 #蓝湖 #Axure原型发布 #tdengine #涛思数据 #模型微调 #comfyui #ceph #ajax #练习 #基础练习 #循环 #九九乘法表 #计算机实现 #工厂模式 #Proxmox VE #虚拟化 #旅游 #海外短剧 #海外短剧app开发 #海外短剧系统开发 #短剧APP #短剧APP开发 #短剧系统开发 #海外短剧项目 #提词器 #春秋云境 #CVE-2020-5515 #spring ai #oauth2 #log #NPU #uvx #uv pip #npx #Ruff #WinDbg #Windows调试 #内存转储分析 #go # IndexTTS # GPU集群 #浏览器自动化 #python #6G #太赫兹 #无线通信 #频谱 #无线 #AI-native #cascadeur #设计师 #SSH代理转发 #Miniconda #远程开发 #SSH跳转 #夏天云 #夏天云数据 #TTS #html5 #计算几何 #斜率 #方向归一化 #叉积 #大剑师 #nodejs面试题 #C2000 #TI #实时控制MCU #AI服务器电源 #经济学 #Anaconda配置云虚拟环境 # 树莓派 # ARM架构 #企业微信机器人 #本地大模型 #远程桌面 #远程控制 #容斥原理 #内网 #智能体 #后端框架 #智能一卡通 #门禁一卡通 #梯控一卡通 #电梯一卡通 #消费一卡通 #一卡通 #考勤一卡通 #分布式数据库 #集中式数据库 #业务需求 #选型误 #RK3576 #瑞芯微 #硬件设计 # 数字人系统 # 远程部署 #浏览器指纹 #网络配置实战 #Web/FTP 服务访问 #计算机网络实验 #外网访问内网服务器 #Cisco 路由器配置 #静态端口映射 #网络运维 #国企混改 #国企混改咨询 #国企混改战略规划 #曦望 #Docker #工作 #gRPC #注册中心 #AutoDL使用教程 #AI大模型训练 #linux常用命令 #PaddleOCR训练 #edge #迭代器模式 #观察者模式 #雨云服务器 #Minecraft服务器 #教程 #MCSM面板 #智能家居 #运维工具 #YOLOFuse # Base64编码 # 多模态检测 # 服务器配置 # GPU #openvino #手机检测 #课堂手机检测 #DNS #Discord机器人 #云部署 #程序那些事 #非标机械设计 #服务器IO模型 #非阻塞轮询模型 #多任务并发模型 #异步信号模型 #多路复用模型 #ipmitool #BMC #领域驱动 #milvus #知识库 #贴图 #材质 #SPA #单页应用 #JavaScript #WinSCP 下载安装教程 #SFTP #FTP工具 #服务器文件传输 #GESP4级 #GESP四级 #sort #滑动窗口 #字符串 #swagger #个人博客 #IndexTTS2 # 阿里云安骑士 # 木马查杀 # 键鼠锁定 #入侵 #日志排查 #汇智网盘系统 #企业级云存储 #智能协作 #娱乐 #计算机毕业设计 #程序定制 #毕设代做 #大作业 #课设 #nas #音乐分类 #音频分析 #ViT模型 #Gradio应用 #企业级存储 #网络设备 #cocos2d #图形渲染 #策略模式 #数据迁移 #测速 #iperf #iperf3 #学术生涯规划 #CCF目录 #基金申请 #职称评定 #论文发表 #科研评价 #顶会顶刊 #powerbi #CLI #langgraph.json #嵌入式编译 #ccache #distcc #puppeteer #Anything-LLM #IDC服务器 #大模型应用 #API调用 #PyInstaller打包运行 #服务端部署 #IT #技术 #ARM64 # DDColor # ComfyUI #欧拉 #GLM-4.6V-Flash-WEB # AI视觉 # 本地部署 #Fluentd #Sonic #日志采集 # 水冷服务器 # 风冷服务器 #restful #nfs #iscsi #视频去字幕 #外卖配送 #SSH保活 #rdp #UDP #Karalon #AI Test #AI生成 # outputs目录 # 自动化 #YOLOv8 # Docker镜像 #翻译 #开源工具 #SA-PEKS # 关键词猜测攻击 # 盲签名 # 限速机制 #大模型部署 #mindie #模版 #函数 #类 #ComfyUI # 推理服务器 #libosinfo #elk #决策树 #remote-ssh #HistoryServer #Spark #YARN #jobhistory #工程实践 #强化学习 #策略梯度 #REINFORCE #蒙特卡洛 #WEB #CMake #Make #C/C++ #模拟退火算法 #Hadoop #vps #eureka #同步WebServer服务器 #ESP32网页服务器 #轻量级http服务器 #ESP32物联网 #排序 # 高并发部署 #文件传输 #电脑文件传输 #电脑传输文件 #电脑怎么传输文件到另一台电脑 #电脑传输文件到另一台电脑 #软件需求 #simulink #寄存器 #aiohttp #asyncio #异步 #rtsp #转发 #LED #设备树 #GPIO #软件 #本地生活 #电商系统 #商城 #vrrp #脑裂 #keepalived主备 #高可用主备都持有VIP #SMP(软件制作平台) #EOM(企业经营模型) #应用系统 #webpack #RXT4090显卡 #RTX4090 #深度学习服务器 #硬件选型 #群晖 #音乐 #学术写作辅助 #论文创作效率提升 #AI写论文实测 #飞牛NAS #NVR #EasyNVR #项目申报系统 #项目申报管理 #项目申报 #企业项目申报 #C₃₂H₄₅N₇O₁₁S₂ #Aluminium #Google #学工管理系统 #学工一体化平台 #学工软件二次开发 #学工平台定制开发 #学工系统服务商 #学工系统源头厂家 #智慧校园学工系统 #idm #VibeVoice # 语音合成 # 云服务器 #cocoa #I/O #Lenyiin #web服务器 #Shiro #反序列化漏洞 #CVE-2016-4437 #二值化 #Canny边缘检测 #轮廓检测 #透视变换 #多接口并发 #首页优化 #数据访问 #React安全 #漏洞分析 #Next.js #联机教程 #局域网联机 #局域网联机教程 #局域网游戏 #遛狗 #eclipse #北京百思可瑞教育 #百思可瑞教育 #北京百思教育 #视觉检测 #VPS #搭建 #土地承包延包 #领码SPARK #aPaaS+iPaaS #智能审核 #档案数字化 #UOS #海光K100 #统信 #webgl #MOXA #ms-swift # 一锤定音 # 大模型微调 #npm #turn #ICE #信创国产化 #达梦数据库 #树莓派 #温湿度监控 #WhatsApp通知 #IoT #MySQL #MS #Materials #昇腾300I DUO #国产PLM #瑞华丽PLM #瑞华丽 #PLM #网站 #截图工具 #批量处理图片 #图片格式转换 #图片裁剪 #vision pro #c++20 #SMTP # 内容安全 # Qwen3Guard #Qwen3-14B # 大模型部署 # 私有化AI #X11转发 #可撤销IBE #服务器辅助 #私钥更新 #安全性证明 #双线性Diffie-Hellman #muduo #EventLoop #opc ua #opc # 环境迁移 #动态规划 #时间复杂度 #空间复杂度 #vp9 # AI翻译机 # 实时翻译 #DDD #tdd #攻防演练 #Java web #红队 #私域运营 #sqlmap #心理健康服务平台 #心理健康系统 #心理服务平台 #心理健康小程序 # 远程运维 # GLM-TTS # 数据安全 #API限流 # 频率限制 # 令牌桶算法 #插件 #TTS私有化 # 音色克隆 #r-tree #TFTP #性能测试 #LoadRunner #视频 #编程语言 #SQL调优 #EXPLAIN #慢查询日志 #分布式架构 #dynadot #域名 #挖矿 #Linux病毒 #管道Pipe #system V #esb接口 #走处理类报异常 #N8N #随机森林 #西门子 #汇川 #Blazor #zygote #应用进程 #smtp #smtp服务器 #PHP #intellij idea # 高并发 #晶振 #数据恢复 #视频恢复 #视频修复 #RAID5恢复 #流媒体服务器恢复 #AI+ #coze #AI入门 #AI赋能 #计组 #数电 #服务器开启 TLS v1.2 #IISCrypto 使用教程 #TLS 协议配置 #IIS 安全设置 #服务器运维工具 #cosmic #运维 #OpenManage #AI视频创作系统 #AI视频创作 #AI创作系统 #AI视频生成 #AI工具 #AI创作工具 #fs7TF #华为od机试 #华为od机考 #华为od最新上机考试题库 #华为OD题库 #od机考题库 #AI 推理 #NV #鲲鹏 #npu #weston #x11 #x11显示服务器 #铬锐特 #uv胶 #紫外线胶水 #光固化胶水 #胶粘剂 #RSO #机器人操作系统 #mtgsig #美团医药 #美团医药mtgsig #美团医药mtgsig1.2 #Python3.11 #Socket #套接字 #I/O多路复用 #字节序 #服务器操作系统 #win10 #qemu #远程软件 #证书 #智能电视 #处理器 #上下文工程 #langgraph #意图识别 #ansys #ansys问题解决办法 #传感器 #MicroPython # Connection refused #WRF #WRFDA #teamviewer #HarmonyOS #MCP服务器注解 #异步支持 #方法筛选 #声明式编程 #自动筛选机制 #rsync # 数据同步 #高精度农业气象 #vertx #vert.x #vertx4 #runOnContext #JNI #一周会议与活动 #ICLR #CCF #Socket网络编程 #水性三防漆 #UV三防漆 #有机硅三防漆 #聚氨酯三防漆 #醇酸树脂三防漆 #丙烯酸三防漆 #机器人学习 #在线培训系统 #CosyVoice3 # IP配置 # 0.0.0.0 #Apple AI #Apple 人工智能 #FoundationModel #Summarize #SwiftUI #istio #服务发现 #gateway #OSS #CDN #最佳实践 #视觉理解 #Moondream2 #多模态AI #TcpServer #accept #高并发服务器 #勒索病毒 #勒索软件 #加密算法 #.bixi勒索病毒 #数据加密 #OPCUA #CA证书 #主板 #电源 #LangFlow # 轻量化镜像 # 边缘计算 #C #青少年编程 #移动端h5网页 #调用浏览器摄像头并拍照 #开启摄像头权限 #拍照后查看与上传服务器端 #摄像头黑屏打不开问题 #web server #请求处理流程 #Host #渗透测试 #SSRF # 批量部署 #星际航行 #agentic bi #论文复现 #opc模拟服务器 #工程设计 #预混 #扩散 #燃烧知识 #层流 #湍流 #报表制作 #职场 #数据可视化 #用数据讲故事 #语音生成 # 大模型 # 模型训练 # ms-swift #服务器线程 # SSL通信 # 动态结构体 #超算中心 #PBS #lsf #租显卡 #训练推理 #个人助理 #数字员工 #多进程 #python技巧 #moltbot #zotero #WebDAV #同步失败 #代理模式 #MapGIS #云服务 #云门户 #IGServer #KMS #slmgr #raid #raid阵列 #宝塔面板部署RustDesk #RustDesk远程控制手机 #手机远程控制 #铁路桥梁 #DIC技术 #箱梁试验 #裂纹监测 #四点弯曲 #节日 #ESP32编译服务器 #Ping #DNS域名解析 #麦克风权限 #访问麦克风并录制音频 #麦克风录制音频后在线播放 #用户拒绝访问麦克风权限怎么办 #uniapp 安卓 苹果ios #将音频保存本地或上传服务器 #bigtop #hdp #hue #kerberos #期刊 #SCI #地理 #遥感 #IPv6 #面向对象 #taro #图书馆 #自习室 #AI应用编程 #dlms #dlms协议 #逻辑设备 #逻辑设置间权限 # REST API #芦笋提词器 # keep-alive #安全威胁分析 #源码 #闲置物品交易系统 #Minecraft #PaperMC #我的世界服务器 #VoxCPM-1.5-TTS # 云端GPU # PyCharm宕机 #前端开发 #EN4FE #api #key #AI作画 #自由表达演说平台 #演说 #AI Agent #开发者工具 #Syslog #系统日志 #日志监控 #生产服务器问题查询 #日志过滤 #Autodl私有云 #深度服务器配置 #国产开源制品管理工具 #Hadess #一文上手 #范式 #漏洞修复 #IIS Crypto #ZooKeeper #ZooKeeper面试题 #面试宝典 #深入解析 #TCP服务器 #语音控制 #ET模式 #非阻塞 #内存接口 # 澜起科技 # 服务器主板 #格式工厂 #性能 #RAM #国产操作系统 #V11 #kylinos #x86_64 #数字人系统 # 硬件配置 #算力一体机 #ai算力服务器 #API # 服务器迁移 # 回滚方案 #CSDN #synchronized #锁 #reentrantlock #coffeescript #tornado #H3C #IntelliJ IDEA #neo4j #NoSQL #传统行业 #Coturn #proc #数智红包 #商业变革 #万悟 #联通元景 #材料工程 #SMARC #ARM #语义检索 #文本向量化 #GTE-Pro #企业AI #攻击溯源 #编程 #blender #warp # 代理转发 #reactjs # 智能运维 # 性能瓶颈分析 #devops #网络 #Go并发 #高并发架构 #Goroutine #系统设计 #net core #kestrel #web-server #asp.net-core #FASTMCP #DooTask #因果学习 #交换机 #三层交换机 #高斯溅射 #seata #TC/TM/RM #Comate #bug #I/O模型 #水平触发、边缘触发 #多路复用 #SIP服务器 #语音服务器 #VoIP #SIP协议 #KMS 激活 #AI智能棋盘 #Rock Pi S #arm64 #MC群组服务器 #SSH复用 # 远程开发 #磁盘配额 #存储管理 #形考作业 #国家开放大学 #系统运维 #C++ UA Server #SDK #Windows #跨平台开发 #说话人验证 #声纹识别 #CAM++ #云开发 #asp.net上传大文件 #claude-code #PTP_1588 #gPTP #农产品物流管理 #物流管理系统 #农产品物流系统 #农产品物流 #unix #一人公司 #独立开发者 #c++高并发 #CS2 #debian13 #BoringSSL #云计算运维 #文本生成 #CPU推理 # ARM服务器 # 鲲鹏 #4U8卡 AI 服务器 ##AI 服务器选型指南 #GPU 互联 #GPU算力 #VSCode # SSH #uip #k8s #门禁 #读卡器 #梯控 #门禁读卡器 #梯控读卡器 #IC卡读卡器 #safari #进程等待 #wait #waitpid # 离线AI #算法备案 #开发实战 #贝叶斯优化深度学习 #银河麒麟服务器系统 #hibernate #nosql #结构与算法 #文件上传漏洞 #Kylin-Server #服务器安装 # 远程连接 #短剧 #短剧小程序 #短剧系统 #微剧 #回归 #CTF #前端界面 #TLS协议 #HTTPS #运维安全 #大学生 #esp32 #mosquito #SSH跳板机 # Python3.11 # GPU服务器 # tmux #程序开发 #程序设计 #mvc #idc #NFC #智能公交 #服务器计费 #FP-增长 #screen命令 #outlook #错误代码2603 #无网络连接 #2603 #效率神器 #办公技巧 #自动化工具 #Windows技巧 #打工人必备 #服务器解析漏洞 #nodejs #云服务器选购 #Saas #SSH密钥 #智能梯控 #数字孪生 #三维可视化 # Qwen3Guard-Gen-8B #ETL管道 #向量存储 #数据预处理 #DocumentReader #网安应急响应 # GLM # 服务连通性 #AI电商客服 #EtherCAT #XMC4800 #工业自动化 #声源定位 #MUSIC #uniapp #合法域名校验出错 #服务器域名配置不生效 #request域名配置 #已经配置好了但还是报错 #uniapp微信小程序 #resnet50 #分类识别训练 #华为机试 #HTML #web前端 #网页开发 #Xshell #Finalshell #生物信息学 #组学 #Spire.Office #samba #ServBay # 批量管理 #ASR #SenseVoice #ranger #MySQL8.0 # 网络延迟 #智能体对传统行业冲击 #行业转型 #代理服务器 #Matrox MIL #二次开发 #pxe #自动化巡检 #0day漏洞 #DDoS攻击 #漏洞排查 #free #vmstat #sar #懒汉式 #恶汉式 #odoo #win11 #MinIO #嵌入式开发 # DIY主机 # 交叉编译 #算法笔记 #路由器 ##python学习笔记 #python中with语句详解 #appche #语音合成 #r语言 #c #ftp #sftp #OpenHarmony #CS336 #Assignment #Experiments #TinyStories #Ablation #STDIO传输 #SSE传输 #WebMVC #WebFlux #实时音视频 #Zernike #hcipy #光学设计 #像差仿真 #SEW #赛威 #SEW变频器 #量子计算 #cpu #Java生成PDF #Freemarker转PDF #PDFBox转图片 #HTML转PDF乱码解决 #AE #手机h5网页浏览器 #安卓app #苹果ios APP #手机电脑开启摄像头并排查 #智慧社区 #管理系统 #Spring AOP #PN 结 #ARMv8 #内存模型 #内存屏障 #ArkUI #ArkTS #鸿蒙开发 #RWK35xx #语音流 #实时传输 #node #canvas层级太高 #canvas遮挡问题 #盖住其他元素 #苹果ios手机 #安卓手机 #调整画布层级 #AITechLab #cpp-python #CUDA版本 #express #cherry studio #gmssh #宝塔 #系统安装 #基础语法 #标识符 #常量与变量 #数据类型 #运算符与表达式 #POC #问答 #交付 #docker安装seata #Langchain-Chatchat # 国产化服务器 # 信创 #游戏服务器断线 #全文检索 #总体设计 #电源树 #框图 #Archcraft #Linly-Talker # 数字人 # 服务器稳定性 #okhttp #向量嵌入 #人脸识别sdk #视频编解码 #边缘AI # Kontron # SMARC-sAMX8 #小艺 #搜索 #glances #程序员转型 #人脸活体检测 #live-pusher #动作引导 #张嘴眨眼摇头 #苹果ios安卓完美兼容 #gnu #多模态 #微调 #超参 #LLamafactory #duckdb #AI应用 #cesium #可视化 #阿里云RDS #Linux多线程 #开关电源 #热敏电阻 #PTC热敏电阻 #信息收集 # 模型微调 #SQL注入主机 #gpio #AI教材写作工具 #AI创作技术 #教材编写实战 #创作效率优化 #VMware创建虚拟机 #数据库架构 #Qwen3-VL # 服务状态监控 # 视觉语言模型 #m3u8 #HLS #移动端H5网页 #APP安卓苹果ios #监控画面 直播视频流 #Zabbix #tekton #传媒 #隐函数 #常微分方程 #偏微分方程 #线性微分方程 #线性方程组 #非线性方程组 #复变函数 #UDP服务器 #recvfrom函数 #身体实验室 #健康认知重构 #微行动 #NEAT效应 #亚健康自救 #ICT人 #递归 #线性dp #Cubase #Cubase15 #Cubase14 #Cubase12 #Cubase13 #Cubase 15 Pro #Cubase 14 Pro #Termux #Samba #Ward #lucene #直流无刷电机 #六步换相 #WAN2.2 #b树 # ControlMaster #日志模块 #VMware Workstation16 #音诺ai翻译机 #AI翻译机 # Ampere Altra Max #sklearn # 权限修复 #奈飞工厂算法挑战赛 #大模型呼叫 #外呼系统 #AI外呼 #外呼系统推荐 #智能客服 #外呼 #memory mcp #Cursor #GitPuk #国产开源免费代码管理工具 #Arbess #cicd工具 #xml #H5网页 #网页白屏 #H5页面空白 #资源加载问题 #打包部署后网页打不开 #HBuilderX #A2A #GenAI #VMWare Tool #RGFNet多模态目标检测 #可见光-红外图像融合目标检测 #TGRS 2025顶刊论文 #YOLO多模态创新改进 #YOLO多模态融合属于发文热点 #IO编程 #网络安全大赛 #NSP #下一状态预测 #aigc #算力建设 #智能制造 #供应链管理 #工业工程 #库存管理 #实时检测 #DAG #RK3588 #RK3588J #评估板 #核心板 #HarmonyOS APP #omv8 #Gateway #认证服务器集成详解 #can # 高温监控 #2025年 #AI工具集成 #容器化部署 #CMC #AI教程 #基金 #股票 #智能合约 #车载嵌入式 #ossinsight #SQL注入 #WAF绕过 #adobe #ocr #lprnet #车牌识别 #crnn #车牌检测 # child_process #分子动力学 #化工仿真 #小智 #usb #通信协议 #session #安全性测试 #标准化事件委托 #工序流程工艺路径 #业务流程标准化 #电子电气架构 #系统工程与系统架构的内涵 #Routine #starrocks #RTSP #Live555 #流媒体服务器 #L6 #L10 #L9 #千问 #Beidou #北斗 #SSR #海量数据存储 #测试网 #erc-20 #独立链 #polkadot #composer #symfony #java-zookeeper #poll #AirDrop #昭和仙君 #远程更新 #缓存更新 #多指令适配 #物料关联计划 #个性化推荐 #BERT模型 #防毒面罩 #防尘面罩 #Prometheus #Highcharts #插件封装 #个人电脑 #思爱普 #SAP S/4HANA #ABAP #NetWeaver #r语言-4.2.1 #语言 #泛型 #接口 #抽象类 #面向对象设计 #人形机器人 #人机交互 #软件构建 #统信操作系统 #电梯 #电梯运力 #电梯门禁 #vncdotool #链接VNC服务器 #如何隐藏光标 #bond #服务器链路聚合 #网卡绑定 #数据报系统 #unitask #FHSS #llvm #文档识别 #DeepSeek-OCR-2 #信创适配 #YOLO识别 #YOLO环境搭建Windows #YOLO环境搭建Ubuntu #jquery #fork函数 #进程创建 #进程终止 #JADX-AI 插件 #boltbot #DuckDB #协议 #Arduino BLDC #核辐射区域探测机器人 #系统故障 #硬盘修复