【问题标题】:Question about adding a layer after loading pre-trained weights关于加载预训练权重后添加层的问题
【发布时间】:2020-10-05 05:28:07
【问题描述】:

我有一个关于创建具有部分加载权重的深度神经网络的问题。

假设我按如下方式构建模型(假设为模型指定了一系列层):

model = models.Model(inputs, x, name=model_name)

然后,我为模型加载权重。

model.load_weights(weights)

接下来我要做的是在我刚刚创建的深度网络模型中添加额外的层,将相应的权重初始化为随机值。

我不确定这样做的正确方法是什么,你能帮我解决这个问题吗?

【问题讨论】:

    标签: tensorflow keras deep-learning tensorflow2.0


    【解决方案1】:

    假设您有一个加载了预训练权重的模型

    model.load_weights(weights)
    #Set trainable to false to maintain the previous weights
    for layer in model.layers:
        layer.trainable = False
    

    您将在下面看到一些示例,但请务必咨询 https://www.tensorflow.org/api_docs/python/tf/keras/initializers 了解所有类型的初始化程序。

    顺序模型方式

    initializer_1 = tf.keras.initializers.HeNormal()
    dense_1 = model.add(Dense(512,activation='relu',kernel_initializer = initializer_1))
    initializer_2 = tf.keras.initializers.GlorotUniform()
    model.add(Dense(256,activation = 'relu',kernel_initializer = initializer_2))
    

    功能模型方式

    initializer_1 = tf.keras.initializers.HeNormal()
    dense_1 = Dense(512,activation='relu',kernel_initializer = initializer_1)(model.output)
    initializer_2 = tf.keras.initializers.GlorotUniform()
    dense_2 = Dense(256,activation = 'relu',kernel_initializer = initializer_2)(dense_1)
    

    默认情况下,新添加的都是可训练的,因此您无需担心设置trainable属性。

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 2018-03-26
      • 2021-06-01
      • 1970-01-01
      • 2021-10-07
      • 2021-03-12
      相关资源
      最近更新 更多