从预先训练的NASnet网络转移学习。如何知道要冻结的图层数量?

时间:2018-02-01 22:38:52

标签: tensorflow keras layer

为了训练图像分类模型(使用Keras或Tensorflow),我想使用我自己的图像数据集重新训练一定数量的NASNetMobile图层。

在本文中:https://arxiv.org/pdf/1707.07012.pdf(A.7节)我们可以读到:“此外,所有模型都使用位于网络上游2/3处的辅助分类器”。

这里我想做的转移学习的NasNetMobile图层来自:https://gist.github.com/didacroyo/a451c890b1f02822c7dd67c6f270f1d6

然后,基于前一个,我应该冻结底层的1/3层吗? (这是前250层)

1 个答案:

答案 0 :(得分:0)

enter image description here 考虑到Aux分支的开始位置,我会在activation_166之前尝试冻结这些层。像这样:

model = NASNetLarge((img_rows, img_cols, img_channels),dropout=0.5, use_auxiliary_branch=True, include_top=True, weights=None, classes=nb_classes)

model.load_weights('weights/NASNet-large.h5', by_name=True, skip_mismatch=True)

# Freeze original layers
model.trainable = True    
set_trainable = False
for layer in model.layers:
  if layer.name == 'activation_166':
    set_trainable = True
  if set_trainable:
    layer.trainable = True
  else:
    layer.trainable = False
  print("layer {} is {}".format(layer.name, '+++trainable' if layer.trainable else '---frozen'))