HybridTableMaskedLM初始化报错:需1个位置参数却传入2个
问题排查与解决方案
错误原因分析
报错TypeError: HybridTableMaskedLM.__init__() takes 1 positional argument but 2 were given的核心原因有两种可能:
1. 类继承与父类初始化错误
你提供的两个HybridTableMaskedLM定义中,继承nn.Module的版本存在明显错误:
class HybridTableMaskedLM(nn.Module): def __init__(self, config): super(HybridTableMaskedLM, self).__init__(config) # 此处错误
nn.Module的__init__方法不接受除self外的位置参数,强行传入config会导致父类初始化逻辑异常,进而触发参数数量错误的报错。
2. 类定义冲突
如果你的Notebook中同时存在两个HybridTableMaskedLM的定义(比如先运行了继承nn.Module的版本,再导入model.py中的版本),Python会优先使用先定义的类,导致实际使用的类与预期不符,引发参数错误。
具体解决步骤
方案一:修正继承nn.Module的类定义
如果需要使用继承nn.Module的版本,修改__init__方法,移除传给父类的config参数,并将config保存为实例属性:
class HybridTableMaskedLM(nn.Module): def __init__(self, config): super(HybridTableMaskedLM, self).__init__() # 去掉config参数 self.config = config # 保存config供后续模块使用 self.table = HybridTableModel(config) self.cls = TableMLMHead(config) self.init_weights()
修改后重新运行类定义代码块,再执行创建模型的代码。
方案二:正确使用model.py中的类
如果要使用继承BertPreTrainedModel的版本(该版本的父类初始化逻辑是正确的),需确保正确导入且无类定义冲突:
- 先删除Notebook中所有自定义的
HybridTableMaskedLM类定义代码块,或重新启动Colab运行时清除旧定义。 - 正确导入
model.py中的类:
from model import HybridTableMaskedLM
- 若修改过
model.py文件,需重新加载模块以确保使用最新版本:
import importlib import model importlib.reload(model) from model import HybridTableMaskedLM
内容的提问来源于stack exchange,提问作者Rafael Angarita
相关产品推荐
相关产品推荐

