freeze_weights.Rd
Freeze weights in a model or layer so that they are no longer trainable.
freeze_weights(object, from = NULL, to = NULL) unfreeze_weights(object, from = NULL, to = NULL)
object | Keras model or layer object |
---|---|
from | Layer instance, layer name, or layer index within model |
to | Layer instance, layer name, or layer index within model |
The from
and to
layer arguments are both inclusive.
When applied to a model, the freeze or unfreeze is a global operation over all layers in the model (i.e. layers not within the specified range will be set to the opposite value, e.g. unfrozen for a call to freeze).
Models must be compiled again after weights are frozen or unfrozen.
# NOT RUN { # instantiate a VGG16 model conv_base <- application_vgg16( weights = "imagenet", include_top = FALSE, input_shape = c(150, 150, 3) ) # freeze it's weights freeze_weights(conv_base) # create a composite model that includes the base + more layers model <- keras_model_sequential() %>% conv_base %>% layer_flatten() %>% layer_dense(units = 256, activation = "relu") %>% layer_dense(units = 1, activation = "sigmoid") # compile model %>% compile( loss = "binary_crossentropy", optimizer = optimizer_rmsprop(lr = 2e-5), metrics = c("accuracy") ) # unfreeze weights from "block5_conv1" on unfreeze_weights(conv_base, from = "block5_conv1") # compile again since we froze or unfroze weights model %>% compile( loss = "binary_crossentropy", optimizer = optimizer_rmsprop(lr = 2e-5), metrics = c("accuracy") ) # }