0

I created a function build_model to tune hyperparameters. However, the function fails to create objects within it, the rlr object (ReduceLROnPlateau). I know the function has run because I tested it by inserting some print statements. Why are the objects in the function not being created?

NameError: name 'rlr' is not defined

#error: 
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-34-00e7981884ae> in <module>()
     56                            validation_freq=1,
     57                            epochs=1, #run 1 EPOCH TRIAL FIRST! originally 50
---> 58                            callbacks=[rlr,ckpt,es])    
     59 
     60 # save weights

NameError: name 'rlr' is not defined

#My Code: 

from tensorflow.keras.callbacks import ReduceLROnPlateau,ModelCheckpoint,EarlyStopping
from keras.models import Sequential
from tensorflow import keras
from tensorflow.keras.applications import EfficientNetB0
import tensorflow as tf
from tensorflow.keras.optimizers import Adam
from kerastuner.tuners import RandomSearch
from tensorflow.keras.applications.resnet50 import ResNet50

model_fn = EfficientNetB0(include_top=False, input_shape= (224,224,3), pooling='avg') # , we
def build_model(hp):
    model = keras.Sequential()
    model.add(model_fn)
    #for i in range(hp.Int('num_layers', 2, 20)):   
    model.add(layers.Dense(units=hp.Int('units_' + str(i),
                                            min_value=32,
                                            max_value=512,
                                            step=32),
                               activation='relu'))
    model.add(keras.layers.Dropout(0.4))
    model.add(layers.Dense(2, activation='linear'))
    model.summary()

    patience = hp.Int('patience', 1, 3, default=1)
    callbacks = tf.keras.callbacks.ReduceLROnPlateau(patience=patience)
    rlr=ReduceLROnPlateau(monitor='val_loss', factor=0.1,
                              patience=5, min_lr=0.00001, min_delta=0.001)
    ckpt=ModelCheckpoint('models/checkpoint_female', monitor='val_loss', verbose=1, save_best_only=True, mode='min')  
    es=EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=20, min_delta=0.0001)
    model.compile(
        optimizer=keras.optimizers.Adam(
            hp.Choice('learning_rate', [1e-2, 1e-3, 1e-4])),
        loss='mean_squared_error',
        metrics=['mean_absolute_error'])

    return model

tuner = RandomSearch(
    build_model,
    objective='val_mean_absolute_error',
    max_trials=2,#5
    executions_per_trial=2,#3
    directory='tuner',
    project_name='Tuner Output')

tuner.search_space_summary()
tuner.search(train_generator_F, steps_per_epoch=200, epochs=2, validation_data=valid_generator_F)
TModel=tuner.get_best_models(num_models=1)[0]
#summary of best model
TModel.summary()

history=TModel.fit_generator(generator= train_generator_F,
                           steps_per_epoch=STEP_SIZE_TRAIN_F,
                           validation_data=valid_generator_F,
                           validation_steps=STEP_SIZE_VALID_F,
                           validation_freq=1,
                           epochs=1, 
                           callbacks=[rlr,ckpt,es])    

TModel.save_weights('models/TunedEnet100v1.h5')

0 Answers0