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
相关产品推荐
相关产品推荐

