Transformer监督下的GRU寿命预测
每个当前窗口的三种模态形状为:
时域: (B, 10, 14)
频域: (B, 10, 14)
时频域: (B, 10, 16)
同一轴承归一化后的首个完整窗口作为健康参考,数据集同时返回当前窗口和参考窗口。
原项目的三路 TemporalAttention + 单向 GRU 保持不变:
当前时域窗口 -> TemporalAttention -> GRU -> 32维
当前频域窗口 -> TemporalAttention -> GRU -> 32维
当前时频域窗口 -> TemporalAttention -> GRU -> 32维
|
相加融合
|
GRU RUL预测
该预测与真实 RUL 计算 Loss_GRU。
Feature Transformer 不把时间步当 token,而是参考 iTransformer 将每一种物理特征
当作变量 token。以时域 (B,10,14) 为例:
(B,10,14) -> 转置为(B,14,10) -> 共享Linear(10,1) -> (B,14)
14枚特征token
当前窗口和健康参考窗口经过同一个 Transformer 编码器分别提取特征:
当前窗口 -> 共享Transformer -> current_features
健康窗口 -> 共享Transformer -> reference_features
↓
difference = current_features-reference_features
变量 token 形状为 (B,14,d_model),Transformer 的 QKV 自注意力沿14枚特征
token 计算,因此注意力矩阵表示特征与特征的关系,而不是时间与时间的关系。
Linear 对10个位置使用不同权重,但会将时间维压缩成一个标量;完整时间趋势仍主要由
GRU 分支提取。三个模态的32维差值向量拼接为 (B,96),不再经过 LayerNorm 或
多层 MLP,而是直接计算:
minus = tanh(Linear(96,1,bias=False)(difference))
RUL_Transformer = 1 - minus
GRU 最终输出与 Transformer 的 minus 激活可分别通过 gru_output_activation 和
transformer_output_activation 配置;支持 relu、leaky_relu、sigmoid、
tanh 和 identity/linear。
无偏置 Linear 保证推理时健康窗口与当前窗口相同,则 difference=0、minus=0、
RUL_Transformer=1。该分支使用真实 RUL 独立计算 Loss_Transformer。
GRU、Transformer 和动态 λ MLP 按以下顺序优化:
阶段1:只执行 GRU -> 反向传播 Loss_GRU -> 按验证 Loss_GRU 保存最优 GRU
阶段2:冻结最优 GRU -> 只执行 Transformer -> 按验证 Loss_Transformer 保存最优 Transformer
阶段3:冻结上述两个分支 -> 只训练动态 λ MLP -> 按总 RUL 验证损失保存最优 λ
推理:加载三个最优模块 -> 逐样本计算 λ -> 动态融合
三个阶段在 config.yaml 的 training.gru、training.transformer 和
training.lambda_mlp 中分别配置 epochs、batch_size、optimizer、
learning_rate 与 weight_decay。修改其中一个区块不会影响另外两个网络的
训练批量或优化器设置;最终测试批量由 training.evaluation_batch_size 单独控制。
Transformer 还可以通过 training.transformer.warmup_ratio 设置线性学习率预热比例:
预热步数为 总训练步数 × warmup_ratio,预热后保持 learning_rate;设为 0 可关闭。
三种模态的当前窗口与健康窗口直接作差,并沿特征维拼接:
(time-reference_time, frequency-reference_frequency,
time_frequency-reference_time_frequency)
-> (B,10,44) -> Flatten(B,440) -> MLP -> λ(B,1)
λ MLP 使用无偏置 Linear,将 (B,440) 映射为退化向量,并计算:
degradation = mean(degradation_features²)
λ = 1 - exp(-degradation)
RUL_total = λ * RUL_GRU + (1-λ) * RUL_Transformer
两个融合权重始终非负且总和为1。健康首窗口满足 difference=0、λ=0,总 RUL
完全采用 Transformer 的结构锚定输出 1;退化分数增大时 λ 趋近1,逐渐提高 GRU
时间趋势分支的权重。
Bearing_trans/
├─ Dataset/ # 从 Bearing 复制的三类 .npy 特征
├─ data_visualize/ # 数据可视化
├─ outputs_transformer/ # 新模型默认输出目录
├─ config.yaml # 模型、三个阶段轮数和训练配置
├─ dataset.py # 当前窗口、健康参考、归一化、标签
├─ model.py # GRU + Feature iTransformer 双分支模型
├─ train.py # 三阶段训练、验证、检查点和曲线
├─ evaluate.py # 评估融合预测及两个独立分支
└─ validate_data.py # 原始数据完整性检查
结果默认写入 outputs_transformer/:
best_gru_model.pt:按 GRU 验证损失选出的最优第一阶段检查点;best_transformer_model.pt:冻结最优 GRU 后按 Transformer 验证损失选出的检查点;best_lambda_model.pt:冻结两个预测分支后按总 RUL 验证损失选出的动态 λ 检查点;best_model.pt:包含三个最优模块、用于最终推理的组合检查点;history.json:GRU、Transformer 与动态 λ 三个阶段的训练记录;test_metrics.json:融合、GRU、Transformer 三套测试指标;gru_loss.png、transformer_loss.png、lambda_loss.png:三个阶段的损失曲线;rul_prediction.png:真实 RUL、融合预测、GRU 预测和 Transformer 预测四条曲线;log.txt:模型参数量、损失构成和逐轮结果。