Make a deep copy of a keras model in python

The issue is that model_copy is probably not compiled after cloning. There are in fact a few issues:

  1. Apparently cloning doesn’t copy over the loss function, optimizer info, etc.

  2. Before compiling you need to also build the model.

  3. Moreover, cloning doesn’t copy weight over

So you need a couple extra lines after cloning. For example, for 10 input variables:

model_copy= keras.models.clone_model(model1)
model_copy.build((None, 10)) # replace 10 with number of variables in input layer
model_copy.compile(optimizer="rmsprop", loss="categorical_crossentropy")
model_copy.set_weights(model.get_weights())


Easier Method 1: Loading weights from file

If I understand your question correctly, there is an easier way to do this. You don’t need to clone the model, just need to save the old_weights and set the weights at beginning of the loop. You can simply load weights from file as you are doing.

for _ in range(10):
    model1= create_Model()
    model1.compile(optimizer="rmsprop", loss="categorical_crossentropy")
    model1.load_weights('my_weights')

    for j in range(0, image_size):
          model1.fit(sample[j], sample_lbl[j])
          prediction= model1.predict(sample[j])

Easier Method 2: Loading weights from previous get_weights()

Or if you prefer not to load from file:

model1= create_Model()
model1.compile(optimizer="rmsprop", loss="categorical_crossentropy")
model1.load_weights('my_weights')
old_weights = model1.get_weights()

for _ in range(10):
    model1.set_weights(old_weights)
    for j in range(0, image_size):
          model1.fit(sample[j], sample_lbl[j])
          prediction= model1.predict(sample[j])

Leave a Comment