【问题标题】:unable to initialize Keras model through subclassing无法通过子类化初始化 Keras 模型
【发布时间】:2021-03-30 09:15:17
【问题描述】:

我试图通过子类化创建一个 keras 模型:

class MyModel(Model):
 def __init__(self):
     super(MyModel, self).__init__()
     self.dense1 = Dense(64, activation='relu')
     self.dense2 = Dense(10)
 def call(self, inputs):
     x = self.dense1(inputs)
     return self.dense2(x)




model = MyModel(tf.random.uniform([1, 10]))
model.summary()

我希望它等于这个 squential api:

inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(64, activation=tf.nn.relu)(inputs)
outputs = tf.keras.layers.Dense(10, activation=tf.nn.softmax)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)

但在运行这些行之后,我得到:

TypeError: __init__() takes 1 positional argument but 2 were given

你能帮忙吗?

【问题讨论】:

  • 我看到您的发帖历史记录包含许多您尚未提供反馈的问题(我已提供答案)。如果答案对您有帮助,请不要犹豫对答案进行投票,如果没有,请提出改进​​建议。
  • 确实,正如@NicolasGervais 建议的那样,如果答案解决了您的问题,请接受(见What should I do when someone answers my question?),否则请留下反馈。

标签: python tensorflow keras tensorflow2.0 tf.keras


【解决方案1】:

您将输入数据作为参数传递给模型构造函数。你需要实例化它

model = MyModel()

然后你可以传递输入张量

model(tf.random.uniform([1, 10]))

这会奏效

<tf.Tensor: shape=(1, 10), dtype=float32, numpy=
array([[-0.10745259, -0.21291552, -0.04618738, -0.0118152 , -0.1662825 ,
         0.8145975 ,  0.44216082, -0.07359659,  0.68233466, -0.15205911]],
      dtype=float32)>

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2023-03-18
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多