我想使用Tensorflow 2.5在训练和推理时启用dropout。为此,我在模型中设置了dropout层,参数training = True。
layer = tf.keras.layers.Dropout(0.2, training = True)然后我训练了我的模型,并使用以下代码进行了预测:
prediction = model(X_test, training = False)我故意将BatchNormalization = False放在模型预测函数(模型调用函数)中,因为我也在使用training层,并且我不希望在推理过程中启用它们(与dropout层不同)。但是,我不知道在模型预测函数中放入training = False是否会将dropout层另外设置为training = False (覆盖它)。当我使用模型(X_test,training = False)时,您能告诉我dropout在推理时是否仍然启用吗?如果没有,有没有办法在推理过程中(同时)启用dropout和禁用BatchNormalization?
发布于 2021-09-06 15:49:34
在预测期间,Tensorflow中禁用了dropout,只能在训练期间通过设置参数training=True来启用。要在推理过程中启用dropout,目前还没有直接的方法。但是,按照下面的链接所述做一些变通方法就可以实现。1 & 2.
批量归一化在训练期间和训练后不执行相同的计算,它在训练期间使用批量统计,并在训练后使用最终统计数据(即移动平均值的最终值)。但是,如果您想要更改此行为,则需要具有自定义层,并根据需要设置训练标志。下面是示例代码片段。
class BatchNormalization(tf.keras.layers.Layer):
[...]
def call(self, inputs, training=None):
[...]https://stackoverflow.com/questions/68913978
复制相似问题