How to replace (or insert) intermediate layer in Keras model?

后端 未结 4 457
温柔的废话
温柔的废话 2021-01-30 14:12

I have a trained Keras model and I would like:

1) to replace Con2D layer with the same but without bias.

2) to add BatchNormalization layer before first Activati

4条回答
  •  心在旅途
    2021-01-30 14:42

    You can use the following functions:

    def replace_intermediate_layer_in_keras(model, layer_id, new_layer):
        from keras.models import Model
    
        layers = [l for l in model.layers]
    
        x = layers[0].output
        for i in range(1, len(layers)):
            if i == layer_id:
                x = new_layer(x)
            else:
                x = layers[i](x)
    
        new_model = Model(input=layers[0].input, output=x)
        return new_model
    
    def insert_intermediate_layer_in_keras(model, layer_id, new_layer):
        from keras.models import Model
    
        layers = [l for l in model.layers]
    
        x = layers[0].output
        for i in range(1, len(layers)):
            if i == layer_id:
                x = new_layer(x)
            x = layers[i](x)
    
        new_model = Model(input=layers[0].input, output=x)
        return new_model
    

    Example:

    if __name__ == '__main__':
        from keras.layers import Conv2D, BatchNormalization
        model = keras_simple_model()
        print(model.summary())
        model = replace_intermediate_layer_in_keras(model, 3, Conv2D(4, (3, 3), activation=None, padding='same', name='conv2_repl', use_bias=False))
        print(model.summary())
        model = insert_intermediate_layer_in_keras(model, 4, BatchNormalization())
        print(model.summary())
    

    There are some limitation on replacements due to layer shapes etc.

提交回复
热议问题