如何在tf.keras.Model中禁用例如Dropout,以使用迁移学习生成激活最大化图像



我正在使用迁移学习和keras.applications.InceptionV3。我设法成功地训练了模型。

但是,当我想生成"激活最大化"图像(例如,最大化激活其中一个自定义类的输入图像,例如 https://arxiv.org/pdf/1512.02017v3.pdf (时,我很难使用预先训练的模型,因为我确实设法在"适合"模式下使用它并禁用所有 dropout 等。

我所做的是将预先训练的模型组合在tf.keras.Sequential中,对第一层(输入图像(的权重进行梯度下降。

尽管设置了 base_model.trainable = False,但是当在外部顺序模型上使用 model.fit(data( 时,预训练模型似乎被置于训练模式(尽管权重未更新(。

在外部调用 fit 时,有没有办法强制base_model(顺序的子项(处于"预测"模式?

我刚刚遇到了同样的问题。在阅读了一些文档并查看了 tf.keras.layers.Layertf.keras.layers.Densetf.keras.layers.BatchNormalization 的 TensorFlows 实现的源代码后,我得到了以下理解。

如果在调用层时传递training = False,它将在推理模式下运行。这与属性无关 trainable ,这意味着不同的东西。如果他们把它称为training_mode,这可能会减少误解。

在进行迁移学习或微调时,training = False应该传递调用基本模型本身。到目前为止,我所看到的,这只会影响tf.keras.layers.Dropouttf.keras.layers.BatchNormalization等层,而不会影响其他层。

通过 training = False 在推理模式下运行将导致tf.layers.Dropout根本不应用辍学率。

由于tf.layers.Dropout没有可训练的权重,因此将属性设置为trainable = False将完全不起作用,

最新更新