【发布时间】:2020-03-02 19:09:15
【问题描述】:
我正在尝试执行一些迁移学习,其中我必须冻结相关模型的前几层,并且只使用不同的数据集微调最后几层。
我知道,如果我们不冻结任何东西,我们只需在训练期间将 is_training 设置为 True,在测试期间将 is_training 设置为 false。但是现在我想知道如果我将冻结层从可训练变量中排除,并且 is_training 为 True,Batch-norm 的行为会是什么样子。
为了冻结层“A”、“B”和“C”,我做了这样的事情:
tvars = tf.contrib.framework.filter_variables(tf.trainable_variables(), exclude_patterns = ['A', 'B', 'C'])
grad = optimizer.comput_gradient(some_loss, tvars)
但我不确定在训练期间应该如何设置“is_training”... 据我了解,BatchNorm 有 2 个可训练变量“gamma”和“beta”。如果我真的希望冻结“A”、“B”、“C”,我需要为它们禁用更新操作。但是,在迁移学习期间仍然需要更新均值和方差,对吗?
我是迁移学习的新手,谁能提供一些关于如何在 Tensorflow 中处理冻结层的 Batch norm 的指导?
【问题讨论】:
标签: tensorflow conv-neural-network transfer-learning batch-normalization pre-trained-model