keras 如何从预训练模型中删除正则化?

lvmkulzt  于 2023-06-06  发布在  其他
关注(0)|答案(3)|浏览(176)

我在Keras中有一个部分训练的模型,在进一步训练之前,我想改变dropout,l2正则化器,高斯噪声等的参数。我将模型保存为.h5文件,但当我加载它时,我不知道如何删除这些正则化层或更改它们的参数。有什么线索告诉我怎么做吗?

g6ll5ycj

g6ll5ycj1#

使用所需的超参数创建模型,并使用load_weight()将参数加载到模型中。

62o28rlo

62o28rlo2#

而不是将整个模型保存到.h5文件中,您可以以自己的格式单独保存每个层的权重。例如

import pickle

# Create model and train ...

#save the weights for each layer in your model
network_config = {
    'layer1': layer1.get_weights(),
    'layer2': layer2.get_weights(),
    'layer3': layer3.get_weights()
}

with open('network_config.pickle', 'wb') as file:
    pickle.dump(network_config, file)

然后,您可以仅加载仍在使用的层的权重。

with open('network_config.pickle', 'rb') as file:
    network_config = pickle.load(file)

#build new model that may be missing some layers

layer1.set_weights(network_config['layer1'])
layer3.set_weights(network_config['layer3'])
jm2pwxwz

jm2pwxwz3#

你可以迭代你预先训练好的keras模型,并尽可能地从每一层中删除kernel_regularizer,就像这样

def apply_regularization(
    model: tf.keras.Model,
    l
) -> tf.keras.Model:
    for layer in model.layers:
        if hasattr(layer, "kernel_regularizer"):
            if l1_regularization:
                ## set to 0.0 to remove regularization
                layer.kernel_regularizer = tf.keras.regularizers.l1(0.0)
            if l2_regularization:
                layer.kernel_regularizer = tf.keras.regularizers.l2(0.0)
    return model

相关问题