Reset weights in Keras layer Reset weights in Keras layer python python

Reset weights in Keras layer


Save the initial weights right after compiling the model but before training it:

model.save_weights('model.h5')

and then after training, "reset" the model by reloading the initial weights:

model.load_weights('model.h5')

This gives you an apples to apples model to compare different data sets and should be quicker than recompiling the entire model.


Reset all layers by checking for initializers:

def reset_weights(model):    import keras.backend as K    session = K.get_session()    for layer in model.layers:         if hasattr(layer, 'kernel_initializer'):             layer.kernel.initializer.run(session=session)        if hasattr(layer, 'bias_initializer'):            layer.bias.initializer.run(session=session)     

Update: kernel_initializer is kernel.initializer now.


If you want to truly re-randomize the weights, and not merely restore the initial weights, you can do the following. The code is slightly different depending on whether you're using TensorFlow or Theano.

from keras.initializers import glorot_uniform  # Or your initializer of choiceimport keras.backend as Kinitial_weights = model.get_weights()backend_name = K.backend()if backend_name == 'tensorflow':     k_eval = lambda placeholder: placeholder.eval(session=K.get_session())elif backend_name == 'theano':     k_eval = lambda placeholder: placeholder.eval()else:     raise ValueError("Unsupported backend")new_weights = [k_eval(glorot_uniform()(w.shape)) for w in initial_weights]model.set_weights(new_weights)