【问题标题】:Monte Carlo Dropout implemented as subclass of tf.keras.ModelMonte Carlo Dropout 实现为 tf.keras.Model 的子类
【发布时间】:2020-08-07 16:15:44
【问题描述】:

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

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

【问题讨论】:

    标签: python tensorflow keras tensorflow2.x


    【解决方案1】:

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

    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...
    
    ...
    

    希望对你有帮助!!

    【讨论】:

    • 感谢您的回答,但发布的自定义图层还有其他用途。使用这样的自定义层消除了使用training=True 调用model.predict() 的必要性。当训练期间有其他层依赖于替代行为时,设置training=True 可能是一个问题。但是,使用这一层并不能回答最初的问题:您仍然需要多次调用model.predict()。
    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2021-05-13
    相关资源
    最近更新 更多