我试图了解转学。
在其中一个教程代码中,正在使用 ImageNet / MobileNetV2 模型。
模型的输出为4,4,1280
,如屏幕截图所示。
它是网络的最终输出层吗?
实际上,我希望模型返回最终层的输出,其尺寸将是模型具有的分类类型的数量。例如,如果接受1000种不同类别的图像训练,则为1000,0,0。
所以这不是输出层吗?是吗?
还有,我指的代码是将GlobalAveragePooling
应用于此(4,4,1280)
层吗?
我们为什么要这样做?
答案 0 :(得分:1)
它是网络的最终输出层吗?
不。加载模型时,使用了include_top=False
。这意味着我们只需要针对转移学习问题的特征提取器(而不是与顶层,分类层一起针对不同的问题进行训练)。我们希望从该问题中提取特征的知识将对我们的问题有用。
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=False,
weights='imagenet')
实际上,我希望模型返回最终层的输出,其尺寸将是模型具有的分类类型的数量。例如,如果接受1000种不同类别的图像训练,则为1000,0,0。
如果我们按以下方式加载模型(include_top=True
,则可以看到输出现在具有1000个尺寸。
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=True,
weights='imagenet')
base_mode.output
<tf.Tensor 'Logits/Identity:0' shape=(None, 1000) dtype=float32>
所以这不是输出层吗?是吗?
您的示例中的一个不是-它被称为瓶颈层。在我的示例中,上面的是。
此外,我要引用的代码是否将GlobalAveragePooling应用于此(4,4,1280)层?我们为什么要做这个?
这是将我们自己的分类器附加到特征提取器的第一步,特征提取器通常将具有较少的层,并以我们遇到的问题的类数结尾。训练时,我们将冻结特征提取器(大多数情况下),并且仅训练新添加的分类器。当进行微调时,瓶颈层的几层将被冻结并重新训练。