Hello Learners,

While running the lab I see the model_builder function is defined in both the _tuner_model_file and _trainer_module_file. Can anyone explain why it has to be defined twice? This seems redundant and I would expect the trainer to pick-up on the model defined in the tuner.

Any info regarding the topic is much appreciated

Happy learning!

In the latest version of keras_tuner, you can use `best_model = tuner.get_best_models()[0]`

.

Hi Balaji,

Thanks for your answer, that wasn’t quite what I meant.

The lab defines below function twice, in seperate files and passes it to the Tuner and Trainer. I was wondering why the Trainer isn’t ‘aware’ of the model past to the Tuner

```
def model_builder(hp):
'''
Builds the model and sets up the hyperparameters to tune.
Args:
hp - Keras tuner object
Returns:
model with hyperparameters to tune
'''
# Initialize the Sequential API and start stacking the layers
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28, 28, 1)))
# Tune the number of units in the first Dense layer
# Choose an optimal value between 32-512
hp_units = hp.Int('units', min_value=32, max_value=512, step=32)
model.add(keras.layers.Dense(units=hp_units, activation='relu', name='dense_1'))
# Add next layers
model.add(keras.layers.Dropout(0.2))
model.add(keras.layers.Dense(10, activation='softmax'))
# Tune the learning rate for the optimizer
# Choose an optimal value from 0.01, 0.001, or 0.0001
hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
model.compile(optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),
loss=keras.losses.SparseCategoricalCrossentropy(),
metrics=['accuracy'])
return model
```

Look at the `hyperparameters`

parameter of the `Trainer`

constructor and notice how the tuner output is used for this.