【问题标题】:How to add noise to activations at in Keras at inference time?如何在推理时向 Keras 中的激活添加噪声?
【发布时间】:2019-07-31 01:08:58
【问题描述】:

Keras 中的 GaussianNoise 似乎只是在训练期间添加噪声。我需要在测试时为激活添加噪音。我的架构是在 imagenet 上预训练 resnet50,所有层都冻结,除了需要将高斯噪声添加到 FC 层之前的最后一个激活层。

这怎么可能!?我在最后添加的高斯噪声层没有产生任何效果,因为文档说它仅用于训练期间。在测试期间该层的替代方案是什么?

__________________________________________________________________________________________________
bn5c_branch2c (BatchNormalizati (None, 7, 7, 2048)   8192        res5c_branch2c[0][0]             
__________________________________________________________________________________________________
add_80 (Add)                    (None, 7, 7, 2048)   0           bn5c_branch2c[0][0]              
                                                                 activation_242[0][0]             
__________________________________________________________________________________________________
activation_245 (Activation)     (None, 7, 7, 2048)   0           add_80[0][0]                     
__________________________________________________________________________________________________
gaussian_noise_1519 (GaussianNo (None, 7, 7, 2048)   0           activation_245[0][0]             
__________________________________________________________________________________________________
avg_pool (GlobalAveragePooling2 (None, 2048)         0           gaussian_noise_1519[0][0]        
__________________________________________________________________________________________________
fc1000 (Dense)                  (None, 1000)         2049000     avg_pool[19][0]                  
==================================================================================================
Total params: 25,636,712
Trainable params: 0
Non-trainable params: 25,636,712

【问题讨论】:

  • 不知道你这样做的目的是什么?
  • 正在运行一些特定的稳健性测试并实施一些研究思路
  • 你不能用做以下吗? 1. 为训练定义一个模型(有/无噪声) 2. 定义一个使用Lambda 层添加噪声的推理模型 3. 将训练后的权重从训练模型复制到推理模型
  • 我是 keras 的新手。您能否在答案中提供详细的代码?
  • 我正在寻找类似的代码。有什么解决方案吗?

标签: machine-learning keras deep-learning noise activation-function


【解决方案1】:

您可以通过在张量上调用它们时传递training=True 参数来保持在测试阶段具有不同行为的那些层(例如Dropout):

out = SomeLayer(**configs)(inp, training=True)

这样,SomeLayer 将在训练和测试阶段都处于活跃状态。

【讨论】:

  • 不,因为keras.io/layers/noise 说它只在训练时有效,并且在测试时不起作用!!
  • @hearse 这是正常情况(即不传递training 参数)。请仔细阅读答案。还有文档:文档中没有任何地方说使用training=True,高斯噪声层将处于非活动状态。
  • @hearse 具有讽刺意味的是,你说“我是 Keras 的新手”,然后表达了如此自信的声明。
  • 我可以不用训练整个 imagenet 吗?只需要在 1 个特定层之后的推理时间添加简单的加性高斯噪声。重新训练所有 imagenet 似乎是一条漫长的路
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 2014-09-05
  • 2018-03-05
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多