【问题标题】:Fine-tune a model with larger input size微调具有更大输入大小的模型
【发布时间】:2019-05-31 13:13:58
【问题描述】:

我想知道微调具有更大输入大小的模型是否有意义?理想情况下,我希望拥有的属性:

  1. 微调:意味着通过预训练重用权重
  2. 更大的输入大小:在输入模型之前不进行下采样。也许有更大的步幅?

具体来说,我正在尝试使用我的特定标签集微调 Keras 中的 InceptionV3。我想要更大的数据量,因为我希望模型可以隐式地学习一些重要的字符。使用 InceptionV3 默认大小 (299x299) 这对我来说听起来不太可能。

但这听起来我必须更改我正在重复使用的特定模型(例如通过修改 model architecure 中的特定层),然后重新使用预训练的权重没有意义?

【问题讨论】:

    标签: machine-learning keras neural-network deep-learning computer-vision


    【解决方案1】:

    如果您想对分类模型进行微调,通常您会删除一些充当分类器的顶层,并添加您自己的层。这与微调 Inception_V3 模型相同:您可以移除顶层并添加您自己的具有所需单元数(即数据集中的类数)的分类器。例如:

    from keras.applications.inception_v3 import InceptionV3
    
    # let's say our images are of size (1000, 1000, 3)
    inc_v3 = InceptionV3(include_top=False, input_shape=(1000, 1000, 3), pooling)
    
    # add your desired layers to the top
    # we only add one layer just for illustration
    # but you can add as many layers as you want
    out = Dense(num_classes, activation='softmax')(inc_v3.output)
    
    # construct the new model
    model = Model(inc_v3.input, out)
    

    但是,请注意,您需要先冻结所有基础层(即 Inception_V3 模型的层)以进行微调。此外,除了在顶部添加池化层(即pooling='avg'),您还可以使用其他替代方案,例如使用Flatten 层。

    另外,我建议你阅读相关的官方Keras教程:Building powerful image classification models using very little data(第二和第三部分主要与此相关)。

    【讨论】:

    • 感谢您的替换。我理解用我自己的分类头替换顶层的需要。但是,似乎为了处理更大的输入大小,您只需指定更大的 input_shape?不需要修改,比如说,InceptionV3 中的前几层(接近输入)?这是我不确定的部分。
    • @clwen 不,不需要,因为 Inception 的基础由卷积、池化和 batchnorm 层组成,不依赖于输入图像的宽度和高度。
    猜你喜欢
    • 2018-12-18
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多