The name "batch_normalization_1" is used 2 times in the model

Question:

I”m trying to make changes to a model (replace layers), but when I try to compile the model I run into the error:

The name ‘batch_normalization_1″ is used 2 times in the model’

I can’t figure out what I’m doing wrong:

def add_batch_normalization(model_path):
    model = load_model(model_path)
    weights = model.get_weights()
    dense_idx = [index for index,layer in enumerate(model.layers) if type(layer) is Dense][-1] #get indices for dense layers
    x = model.layers[dense_idx -1].output
    new_model = Model(inputs = model.input, outputs = x)
    x= BatchNormalization()(new_model.output)
    x = Dense(2048, activation='relu')(x)
    x =BatchNormalization()(x)
    x = Dropout(.10)(x)
    x=  Dense(512, activation='relu')(x)
    x= BatchNormalization()(x)
    predictions = Dense(num_of_classes, activation='softmax')(x)
    new_model = Model(inputs= new_model.input, outputs=predictions)
    print(new_model.summary())
    model.set_weights(weights)
    return new_model

StackTrace:

Traceback (most recent call last):
  File "E:testAPP test PROJECTtestPYTHON SCRIPTStesting_saved_models.py", line 542, in <module>
    MODEL =  add_batch_normalization(PATH)       #{load_model(PATH), add_conv_layers(PATH, how_many = 1), change_dropout(PATH, .5)   }
  File "E:testAPP test PROJECTtestPYTHON SCRIPTStesting_saved_models.py", line 104, in add_batch_normalization
    new_model = Model(inputs= new_model.input, outputs=predictions)
  File "C:UsersyomogAppDataLocalProgramsPythonPython36libsite-packageskeraslegacyinterfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "C:UsersyomogAppDataLocalProgramsPythonPython36libsite-packageskerasenginenetwork.py", line 93, in __init__
    self._init_graph_network(*args, **kwargs)
  File "C:UsersyomogAppDataLocalProgramsPythonPython36libsite-packageskerasenginenetwork.py", line 231, in _init_graph_network
    self.inputs, self.outputs)
  File "C:UsersyomogAppDataLocalProgramsPythonPython36libsite-packageskerasenginenetwork.py", line 1455, in _map_graph_network
    ' times in the model. '
ValueError: The name "batch_normalization_1" is used 2 times in the model. All layer names should be unique.
Asked By: MasayoMusic

||

Answers:

My guess is that your model already has Batch Normalization layers, and when you add a new one, it has the same name than one of the already existing Batch Normalization layers.

In this case, you should define the name of your new Batch Normalization layers manually, so there is no name clash, for example:

x = BatchNormalization(name='batch_normalization_11')(x)
Answered By: Dr. Snoopy

BatchNormalization have not parameter "name". I tried

Answered By: Stas Rubtsov
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.