首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在推断时启用dropout和禁用BatchNormalization

在推断时启用dropout和禁用BatchNormalization
EN

Stack Overflow用户
提问于 2021-08-24 20:54:59
回答 1查看 128关注 0票数 0

我想使用Tensorflow 2.5在训练和推理时启用dropout。为此,我在模型中设置了dropout层,参数training = True。

代码语言:javascript
复制
layer = tf.keras.layers.Dropout(0.2, training = True)

然后我训练了我的模型,并使用以下代码进行了预测:

代码语言:javascript
复制
prediction = model(X_test, training = False)

我故意将BatchNormalization = False放在模型预测函数(模型调用函数)中,因为我也在使用training层,并且我不希望在推理过程中启用它们(与dropout层不同)。但是,我不知道在模型预测函数中放入training = False是否会将dropout层另外设置为training = False (覆盖它)。当我使用模型(X_test,training = False)时,您能告诉我dropout在推理时是否仍然启用吗?如果没有,有没有办法在推理过程中(同时)启用dropout和禁用BatchNormalization?

EN

回答 1

Stack Overflow用户

发布于 2021-09-06 15:49:34

在预测期间,Tensorflow中禁用了dropout,只能在训练期间通过设置参数training=True来启用。要在推理过程中启用dropout,目前还没有直接的方法。但是,按照下面的链接所述做一些变通方法就可以实现。1 & 2.

批量归一化在训练期间和训练后不执行相同的计算,它在训练期间使用批量统计,并在训练后使用最终统计数据(即移动平均值的最终值)。但是,如果您想要更改此行为,则需要具有自定义层,并根据需要设置训练标志。下面是示例代码片段。

代码语言:javascript
复制
class BatchNormalization(tf.keras.layers.Layer):
   [...]
   def call(self, inputs, training=None):
       [...]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68913978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档