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

如何解决TypeError: __init__()需2个位置参数却传入3个的问题

Keras构建模型报错:TypeError: init() takes 2 positional arguments but 3 were given

相关代码

layer.py

def repeat_vector(inputs):

    layer_for_repeat, layer_for_getting_rep_num = inputs
    n=K.shape(layer_for_getting_rep_num)[1]
    name='custom_repeat_vector'
    repeated_vector = RepeatVector(n,name)(layer_for_repeat)
    # shape == (batch_size, seq_len, vector_dim)
    return repeated_vector

lambda_layer.py

class Lambda(Layers):

  @tf.__internal__.tracking.no_automatic_dependency_tracking
    def __init__(self, function, output_shape=None, mask=None, arguments=None, **kwargs ):
        super().__init__(**kwargs)

        self.arguments = arguments or {}
        self.function = function

        if mask is not None:
            self.supports_masking = True
        self.mask = mask
        self._output_shape = output_shape

        # Warning on every invocation will be quite irksome in Eager mode.
        self._already_warned = False

        function_args = tf_inspect.getfullargspec(function).args
        self._fn_expects_training_arg = "training" in function_args
        self._fn_expects_mask_arg = "mask" in function_args

报错栈信息

errors are:
 File "/content/gdrive/MyDrive/cakechat-master/tools/fetch.py", line 40, in <module>
get_trained_model(fetch_from_s3=True)
  
File "/usr/local/lib/python3.9/dist-packages/cachetools/__init__.py", line 737, in wrapper
    v = func(*args, **kwargs)
  
File "/content/gdrive/MyDrive/cakechat-master/cakechat/dialog_model/factory.py", line 76, in get_trained_model
    model.init_model()
 
 File "/content/gdrive/MyDrive/cakechat-master/cakechat/dialog_model/keras_model.py", line 30, in wrapper
    return func(*args, **kwargs)
  
File "/content/gdrive/MyDrive/cakechat-master/cakechat/dialog_model/keras_model.py", line 277, in init_model
    self._model = self._build_model()
  
File "/content/gdrive/MyDrive/cakechat-master/cakechat/dialog_model/model.py", line 253, in _build_model
    decoder_training_model, decoder_model = self._decoder(y_tokens_emb_model, condition_emb_model)
  
File "/content/gdrive/MyDrive/cakechat-master/cakechat/dialog_model/model.py", line 387, in _decoder
    repeated_conditioned_tv = Lambda(function=repeat_vector,mask=lambda inputs, inputs_masks: inputs_masks[0],  
 
 File "/usr/local/lib/python3.9/dist-packages/keras/engine/base_layer_v1.py", line 838, in __call__
    outputs = call_fn(cast_inputs, *args, **kwargs)
  
File "/usr/local/lib/python3.9/dist-packages/keras/layers/core/lambda_layer.py", line 209, in call
    result = self.function(inputs, **kwargs)
 
File "/content/gdrive/MyDrive/cakechat-master/cakechat/dialog_model/layers.py", line 20, in repeat_vector
    repeated_vector = RepeatVector(n,name)(layer_for_repeat)

TypeError: __init__() takes 2 positional arguments but 3 were given

解决方案

错误根源是RepeatVector(n,name)的调用方式不符合Keras的参数规则:RepeatVector类的__init__方法仅接受一个必填位置参数n,其余参数(如name)需要以关键字参数形式传递。

修改layer.py中的对应代码:

# 原代码
repeated_vector = RepeatVector(n,name)(layer_for_repeat)

# 修改后
repeated_vector = RepeatVector(n, name=name)(layer_for_repeat)

另外注意到你提供的lambda_layer.py代码中class Lambda(Layers)后面缺少冒号,虽不是当前报错原因,但建议补全以避免后续语法错误:

# 原代码
class Lambda(Layers)

# 修改后
class Lambda(Layers):

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:37