【问题标题】:How is my model working if all the base layer trainables are set to false?如果所有基础层可训练项都设置为 false,我的模型如何工作?
【发布时间】:2020-04-04 00:03:35
【问题描述】:

这是我为我的深度学习项目制作的模型,我从中获得了不错的准确性。我的问题是,如果我冻结了初始模型(这是我的 VGG19 的基础模型)的权重,我是如何训练整个模型的?而且在添加了冻结层的 VGG19 层之后,我得到的结果比我只获得了几层 CNN 更好。可能是因为我的 CNN 层中初始化了 VGG19 的权重?

img_h=224
img_w=224

initial_model = applications.vgg19.VGG19(weights='imagenet', include_top=False,input_shape = (img_h,img_w,3))
last = initial_model.output

for layer in initial_model.layers:
    layer.trainable = False


x = Conv2D(128, kernel_size=3, strides=1, activation='relu')(last)
x = Conv2D(64, kernel_size=3, strides=1, activation='relu')(x)
x = Flatten()(x)
x = Dense(512, activation='relu')(x)
x = Dense(256, activation='relu')(x)
x = Dense(128, activation='relu')(x)
x =  (Dropout(0.1))(x)
preds = Dense(2, activation='sigmoid')(x)

【问题讨论】:

    标签: tensorflow machine-learning keras computer-vision


    【解决方案1】:

    “冻结层”只是意味着当您反向传播错误时不会更新这些层的权重。因此,您只需更新那些未冻结的层的权重,从而使您的神经网络能够学习。

    您在 VGG 之后添加了一些层。我不知道这是否是一种常见的方法,但假设你正确解释了你的指标,它是完全有道理的。

    您的 VGG 已经在 ImageNet 上进行了预训练,因此对于许多用例来说它是一个非常好的基准。您基本上使用 VGG 作为您的 编码器。然后,在这个编码器的输出(我们可以称之为你的输入的潜在表示)上,你训练一个神经网络。

    我也会尝试更多的主流迁移学习技术,从头开始逐渐解冻层,或者学习率逐渐变小。

    【讨论】:

    • 我想我的问题还不够清楚。我只是想知道我在基础模型之后添加的权重自定义层是由 keras 随机初始化的,还是在训练开始后初始化的?
    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2020-11-05
    • 2014-02-06
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多