繁体   English   中英

training = False 实际上对 TensorFlow 迁移学习有什么作用?

[英]What does training = False actually do for Tensorflow Transfer Learning?

我在这里有这段代码:

base_model = tf.keras.applications.resnet_v2.ResNet50V2(input_shape=input_shape, include_top=False, weights='imagenet')

base_model.trainable = False

inputs = tf.keras.Input(shape=input_shape)

x = data_augmentation(inputs)

x = tf.keras.applications.resnet_v2.preprocess_input(x)

x = base_model(x, training = False)

当我们将它用于 base_model 时,training = False 实际上做了什么? 我知道训练是一个布尔值,用于指定我们要在推理模式训练期间运行,但是按照 Tensorflow 上的迁移学习指南,我无法弄清楚它实际上做了什么。

我们设置 base_model.trainable = False,这意味着层不会学习,我们将使用它们从 imagenet 中学到的东西。 但是 base_model(x, training = False) 做了什么? 我知道这不会在训练期间运行,当我调用 fit() 方法时,由于训练设置为 False,base_model 发生了什么?

我读过它与微调和批处理规范层有关,但我有点迷茫。

我还应该使用微调吗? 如果我打算不使用它,因为模型无论如何都表现良好,我应该设置 training = True 吗? 还是根本不设置该值?

一般来说,这取决于你的层。 例如,dropout 层仅在training=True时将值设置为 0。 另一个例子是 BatchNormalization 层,它在训练和推理过程中的工作方式不同。 对于其他层,例如经典的密集层,它没有任何区别。 如果您真的想了解所有细节,则必须阅读所有使用的图层及其特定行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM