You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Colab中TransE实例无法访问父类KGEModel的train_loss_history属性

解决TransE实例访问train_loss_history时的AttributeError问题

可能原因及排查步骤

1. 确认训练过程是否完整执行

先检查训练日志,确认model.train()是否正常跑完至少一个epoch:

  • 如果训练中途报错中断,父类KGEModel中初始化train_loss_history的代码可能没执行;
  • 如果触发了早停(early_stopping_rounds=10),可以先尝试将early_stopping_rounds设为极大值(比如1000),让训练完整跑2-3个epoch,再尝试访问属性。

2. 检查继承链中的方法调用

查看TranslatingModel的train方法实现,确认它是否调用了父类KGEModel的train方法:

  • 如果TranslatingModel.train()没有执行super().train(**kwargs),父类中初始化train_loss_history的逻辑不会被触发,导致属性不存在;
  • 同时检查TransE类是否重写了train方法且未调用父类方法。

3. 验证KGEModel中train_loss_history的初始化时机

找到KGEModel第126行附近的代码,确认train_loss_history的初始化位置:

  • 如果是在train方法内初始化(比如self.train_loss_history = []),只有当train方法正常执行到该代码行时,属性才会被创建;
  • 如果是在__init__中初始化,可能是子类的__init__未调用父类__init__,导致属性未初始化。

4. 调试查看实例属性

在报错代码前添加调试代码,查看实例的所有属性:

# 在访问train_loss_history前添加
print(dir(model))
train_loss = model.train_loss_history

如果输出中没有train_loss_history,说明该属性确实未被创建,需要回溯train方法的执行流程,确认哪一步没有触发属性初始化。

5. 临时 workaround(手动初始化属性)

如果以上排查后仍无法解决,可以尝试在创建模型实例后手动初始化该属性:

model = TransE(
    embedding_params={"embedding_size": emb_size},
    negative_ratio= neg_ratio,
    corrupt_side="h+t"
)
# 手动初始化训练损失历史
model.train_loss_history = []
model.train(...)

注意这只是临时方案,建议找到根本原因修复。

内容的提问来源于stack exchange,提问作者TheGraduateGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:05:13