autonomio / talos

Hyperparameter Experiments with TensorFlow and Keras
https://autonom.io
MIT License
1.62k stars 270 forks source link

KeyError: 'metrics' on Kaggle & google colab #532

Closed SpinachXPasta closed 2 years ago

SpinachXPasta commented 3 years ago

I was trying out TALOS in Kaggle, and I encountered this error. I ran the same code locally on my Mac and it worked any clue why this would happen?

# then we load the dataset
x, y = talos.templates.datasets.breast_cancer()

# and normalize every feature to mean 0, std 1
x = talos.utils.rescale_meanzero(x)

def breast_cancer_model(x_train, y_train, x_val, y_val, params):

    model = keras.models.Sequential()
    model.add(keras.layers.Dense(params['first_neuron'], input_dim=x_train.shape[1],
                    activation=params['activation'],
                    kernel_initializer=params['kernel_initializer']))

    model.add(keras.layers.Dropout(params['dropout']))

    model.add(keras.layers.Dense(1, activation=params['last_activation'],
                    kernel_initializer=params['kernel_initializer']))

    model.compile(loss=params['losses'],
                  optimizer=params['optimizer'],
                  metrics=['acc', talos.utils.metrics.f1score])

    history = model.fit(x_train, y_train, 
                        validation_data=[x_val, y_val],
                        batch_size=params['batch_size'],
                        callbacks=[talos.utils.live()],
                        epochs=params['epochs'],
                        verbose=0)

    return history, model

# then we can go ahead and set the parameter space
p = {'first_neuron':[9,10,11],
     'hidden_layers':[0, 1, 2],
     'batch_size': [30],
     'epochs': [20],
     'dropout': [0],
     'kernel_initializer': ['uniform','normal'],
     'optimizer': ['Nadam', 'Adam'],
     'losses': ['binary_crossentropy'],
     'activation':['relu', 'elu'],
     'last_activation': ['sigmoid']}

# and run the experiment
t = talos.Scan(x=x,
               y=y,
               model=breast_cancer_model,
               params=p,
               experiment_name='breast_cancer',
               round_limit=10,
               disable_progress_bar=True)

Log

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-6-195f1febb305> in <module>
      6                experiment_name='breast_cancer',
      7                round_limit=10,
----> 8                disable_progress_bar=True)

/opt/conda/lib/python3.7/site-packages/talos/scan/Scan.py in __init__(self, x, y, params, model, experiment_name, x_val, y_val, val_split, random_method, seed, performance_target, fraction_limit, round_limit, time_limit, boolean_limit, reduction_method, reduction_interval, reduction_window, reduction_threshold, reduction_metric, minimize_loss, disable_progress_bar, print_params, clear_session, save_weights)
    194         # start runtime
    195         from .scan_run import scan_run
--> 196         scan_run(self)

/opt/conda/lib/python3.7/site-packages/talos/scan/scan_run.py in scan_run(self)
     24         # otherwise proceed with next permutation
     25         from .scan_round import scan_round
---> 26         self = scan_round(self)
     27         self.pbar.update(1)
     28 

/opt/conda/lib/python3.7/site-packages/talos/scan/scan_round.py in scan_round(self)
     17     # fit the model
     18     from ..model.ingest_model import ingest_model
---> 19     self.model_history, self.round_model = ingest_model(self)
     20     self.round_history.append(self.model_history.history)
     21 

/opt/conda/lib/python3.7/site-packages/talos/model/ingest_model.py in ingest_model(self)
      8                       self.x_val,
      9                       self.y_val,
---> 10                       self.round_params)

<ipython-input-4-54fcf7fc51e8> in breast_cancer_model(x_train, y_train, x_val, y_val, params)
     20                         callbacks=[talos.utils.live()],
     21                         epochs=params['epochs'],
---> 22                         verbose=0)
     23 
     24     return history, model

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
    106   def _method_wrapper(self, *args, **kwargs):
    107     if not self._in_multi_worker_mode():  # pylint: disable=protected-access
--> 108       return method(self, *args, **kwargs)
    109 
    110     # Running inside `run_distribute_coordinator` already.

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
   1077       train_function = self.make_train_function()
   1078       self._train_counter.assign(0)
-> 1079       callbacks.on_train_begin()
   1080       training_logs = None
   1081       # Handle fault-tolerance for multi-worker.

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/callbacks.py in on_train_begin(self, logs)
    499         if numpy_logs is None:  # Only convert once.
    500           numpy_logs = tf_utils.to_numpy_or_python_type(logs)
--> 501         callback.on_train_begin(numpy_logs)
    502 
    503   def on_train_end(self, logs=None):

/opt/conda/lib/python3.7/site-packages/kerasplotlib/traininglog.py in on_train_begin(self, logs)
     31 
     32     def on_train_begin(self, logs={}):
---> 33         self.base_metrics = [metric for metric in self.params['metrics'] if not metric.startswith('val_')]
     34         if self.figsize is None:
     35             self.figsize = (

KeyError: 'metrics'
mikkokotila commented 2 years ago

Can you share the link to the Colab notebook?