【问题标题】:Can't instantiate abstract class RootMeanSquaredError无法实例化抽象类 RootMeanSquaredError
【发布时间】:2022-01-19 16:58:40
【问题描述】:

我正在学习 Chollet 的“使用 Python 进行深度学习”。我一直在做一些实现,但我陷入了困境。我以为我打错了什么,但事实并非如此。

有人知道可能发生了什么吗?

model = get_mnist_model()
model.compile(optimizer="rmsprop",
    loss="sparse_categorical_crossentropy",
    metrics=["accuracy", RootMeanSquaredError()])
model.fit(train_images, train_labels,
    epochs=3,
    validation_data=(val_images, val_labels))

test_metrics = model.evaluate(test_images, test_labels)

TypeError: 无法实例化抽象类 RootMeanSquaredError 抽象方法结果

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    我也遇到了这个错误,并意识到这是因为我在 Jupyter 笔记本的新代码块中定义了 resultreset_state 方法。一旦我将它们移动到与RootMeanSquaredError 类定义相同的块中,您发布的代码就可以正常工作而不会触发 TypeError。

    这应该很明显,但直到我看到this example 我才意识到它们属于类定义。

    【讨论】:

      【解决方案2】:

      在模型定义中配置模型编译后重试,并使用tf.keras.metrics.RootMeanSquaredError()作为评估指标。

      def get_mnist_model():
        model = tf.keras.models.Sequential([
          keras.layers.Dense(512, activation='relu', input_shape=(784,)),
          ..
          ..
          
          keras.layers.Dense(10)
        ])
      
        model.compile(optimizer="rmsprop",
          loss="sparse_categorical_crossentropy",
          metrics=["accuracy", tf.keras.metrics.RootMeanSquaredError()])
      
        return model
      

      【讨论】:

      • 问题中没有提到,但本书的这一部分专门关于编写自定义指标,而不是关于使用 Keras 提供的指标。
      猜你喜欢
      • 2015-08-04
      • 1970-01-01
      • 2017-02-05
      • 2015-10-06
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多