如何在Keras中重新初始化图层而不是权重

时间:2020-03-30 17:02:29

标签: keras

我想在另一个新模型中复制给定模型的某些层(及其所有属性,如跨度,填充等)。我想保留权重和属性,但不保留链接到旧模型的inbound_node / outbound_node属性。

1 个答案:

答案 0 :(得分:0)

我认为Keras中没有任何函数可以执行此操作,但是使用Keras Layers的get_configget_weights()set_weights()方法非常简单。

    new_fresh_layer = layer.__class__(**layer.get_config())
    old_layer_weights = layer.get_weights()
    x = new_fresh_layer(layer_inputs)
    new_fresh_layer.set_weights(old_layer_weights)

if在向模型中顺序添加图层时也可以使用:

    model1 = Sequential()
    old_layer =  Dense(10, input_shape=(10,))
    model1.add(old_layer)

    model2 = Sequential()
    new_layer = old_layer.__class__(**old_layer.get_config())
    model2.add(new_layer)
    new_layer.set_weights(old_layer.get_weights())

    assert (new_layer.get_weights()[0] == old_layer.get_weights()[0]).all()
    assert (new_layer.get_weights()[1] == old_layer.get_weights()[1]).all()