Python 使用keras功能模型时出现类型错误

Python 使用keras功能模型时出现类型错误,python,keras,Python,Keras,我使用Keras函数API(Keras版本2.2)来定义模型,但当我尝试将数据拟合到模型时,我得到了一些错误。我目前正在使用Python2.7,代码在Ubuntu 18.04上运行 以下是模型的代码: class Model: def __init__(self, config): self.hidden_layers = config["hidden_layers"] self.loss = config["loss"] self.op

我使用Keras函数API(Keras版本2.2)来定义模型,但当我尝试将数据拟合到模型时,我得到了一些错误。我目前正在使用Python2.7,代码在Ubuntu 18.04上运行

以下是模型的代码:

class Model:

    def __init__(self, config):
        self.hidden_layers = config["hidden_layers"]
        self.loss = config["loss"]
        self.optimizer = config["optimizer"]
        self.batch_normalization = config["batch_normalization"]
        self.model = self._build_model()

    def _build_model(self):
        input = Input(shape=(32,))

        hidden_layers = []

        if self.batch_normalization:
            hidden_layers.append(Dense(self.hidden_layers[0], bias_initializer= Orthogonal)(input))
            hidden_layers.append(BatchNormalization()(hidden_layers[-1]))
            hidden_layers.append(Activation("relu")(hidden_layers[-1]))
        else:
            hidden_layers.append(Dense(self.hidden_layers[0], bias_initializer= Orthogonal, activation='relu')(input))

        for i in self.hidden_layers[1:]:
            if self.batch_normalization:
                hidden_layers.append(Dense(i, bias_initializer= Orthogonal)(hidden_layers[-1]))
                hidden_layers.append(BatchNormalization()(hidden_layers[-1]))
                hidden_layers.append(Activation("relu")(hidden_layers[-1]))
            else:
                hidden_layers.append(Dense(i, bias_initializer= Orthogonal, activation='relu')(hidden_layers[-1]))

        output_layer = Dense(2, activation="softmax")(hidden_layers[-1])
        model = Model(input= input, output= output_layer)
        model.compile(optimizer=self.optimizer, loss=self.loss, metrics=["accuracy"])
        return model
以下是我使用的命令以及运行fit方法后收到的错误消息:

model.fit(x=X_train,y=Y_train, epochs=20)

  File "/home/project/main.py", line 69, in <module>
    main(config)
  File "/home/project/main.py", line 62, in main
    model = Model(config, logging).model
  File "/home/project/model.py", line 18, in __init__
    self.model = self._build_model()
  File "/home/project/model.py", line 34, in _build_model
    hidden_layers.append(Dense(self.hidden_layers[0], bias_initializer= Orthogonal, activation='relu')(input))
  File "/home/project/venv/local/lib/python2.7/site-packages/keras/engine/base_layer.py", line 431, in __call__
    self.build(unpack_singleton(input_shapes))
  File "/home/project/venv/local/lib/python2.7/site-packages/keras/layers/core.py", line 872, in build
    constraint=self.bias_constraint)
  File "/home/project/venv/local/lib/python2.7/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "/home/project/venv/local/lib/python2.7/site-packages/keras/engine/base_layer.py", line 252, in add_weight
    constraint=constraint)
  File "/home/project/venv/local/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 402, in variable
    v = tf.Variable(value, dtype=tf.as_dtype(dtype), name=name)
  File "/home/project/venv/local/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 183, in __call__
    return cls._variable_v1_call(*args, **kwargs)
  ...
  ...
  File "/home/project/venv/local/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 1329, in __init__
    constraint=constraint)
  File "/home/project/venv/local/lib/python2.7/site-packages/tensorflow/python/ops/variables.py", line 1437, in _init_from_args
    initial_value(), name="initial_value", dtype=dtype)
TypeError: __call__() takes at least 2 arguments (1 given)
model.fit(x=x\u列,y=y\u列,历代=20)
文件“/home/project/main.py”,第69行,在
主(配置)
文件“/home/project/main.py”,第62行,在main中
model=model(配置,日志)。model
文件“/home/project/model.py”,第18行,在__
self.model=self.\u build\u model()
文件“/home/project/model.py”,第34行,在构建模型中
hidden_layers.append(密集(self.hidden_layers[0],bias_初始值设定项=正交,activation='relu')(输入))
文件“/home/project/venv/local/lib/python2.7/site packages/keras/engine/base\u layer.py”,第431行,在调用中__
自我构建(解包单例(输入形状))
文件“/home/project/venv/local/lib/python2.7/site packages/keras/layers/core.py”,第872行,内部版本
约束=自身偏差(约束)
文件“/home/project/venv/local/lib/python2.7/site packages/keras/legacy/interfaces.py”,第91行,在包装器中
返回函数(*args,**kwargs)
文件“/home/project/venv/local/lib/python2.7/site packages/keras/engine/base\u layer.py”,第252行,添加重量
约束=约束)
变量中的文件“/home/project/venv/local/lib/python2.7/site packages/keras/backend/tensorflow_backend.py”,第402行
v=tf.Variable(value,dtype=tf.as_dtype(dtype),name=name)
文件“/home/project/venv/local/lib/python2.7/site packages/tensorflow/python/ops/variables.py”,第183行,在调用中__
返回cls.\u变量\u v1\u调用(*args,**kwargs)
...
...
文件“/home/project/venv/local/lib/python2.7/site packages/tensorflow/python/ops/variables.py”,第1329行,在__
约束=约束)
文件“/home/project/venv/local/lib/python2.7/site packages/tensorflow/python/ops/variables.py”,第1437行,在参数的_init_中
初始值(),name=“初始值”,dtype=dtype)
TypeError:_调用__()至少接受2个参数(给定1个)

我真的不明白这个打字错误是什么。我不确定如何更改模型定义以避免此错误。

似乎错误发生在偏差初始值设定项上。当您应该传递一个类的实例时,您正在传递一个类
Orthogonal
,比如
bias\u initializer=Orthogonal()


现在,我强烈建议不要在类中使用与Keras相同的名称。不要创建
类模型
,创建其他任何东西,比如
类模型以外的任何名称

您的
配置[“隐藏层”]
的值是多少?