1

我知道可以通过model.predict()多次调用并测量返回值的平均值来实现 Monte Carlo dropout。但是,我想知道是否可以通过继承Models 类来实现它tensorflow.keras

使用通过子类化 s 类来实现模型的更典型方式,Model可以支持轻松加载和保存 Keras 模型,而无需任何其他代码,然后predict在运行时(一次)调用。这在使用 Tensorflow Serving 时可能特别有用,但在通过其他 Python 脚本加载它时也已经增加了一些舒适度。(例如,比较多个不同模型时。)

4

1 回答 1

0

我相信这个示例代码应该可以工作:

class MonteCarloDropout(tf.keras.layers.Dropout):

    def __init__(self, rate):
        super(MonteCarloDropout, self).__init__()
        self.rate = rate

    def call(self, inputs):
        return super().call(inputs, training=True)

然后您可以将此层用作模型中的任何层..

...  
model.add(MonteCarloDropout(rate=0.2))  # just example... model is some Sequential model... could be anything...

...

我希望这有帮助!!

于 2020-05-26T21:08:28.790 回答