Métrica desconocida val_accuracy utilizando Keras Tuner
Estoy intentando usar el sintonizador Keras con el conjunto de datos fashion-mnist en Google Colab, este es mi código:
!pip install keras-tuner
import tensorflow as tf
import kerastuner
import numpy as np
print("Versión de TensorFlow: ", tf.version)
(xtrain, ytrain) , (xtest, ytest) = tf.keras.datasets.fashionmnist.loaddata()
def create_model(hp):
numhiddenlayers = 1
numunits = 8
dropoutrate = 0.1
learning_rate = 0.01
if hp:
numhiddenlayers = hp.Choice('numhiddenlayers', values = [1,2,3])
numunits = hp.Choice('numunits', values = [8,16,32])
dropoutrate = hp.Float('dropoutrate', minvalue = 0.1, maxvalue = 0.5)
learningrate = hp.Float('learningrate', minvalue = 0.0001, maxvalue = 0.01)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = (28,28)))
model.add(tf.keras.layers.Lambda(lambda x: x/255.))
for _ in range(0, numhiddenlayers):
model.add(tf.keras.layers.Dense(numunits, activation='relu'))
model.add(tf.keras.layers.Dropout(dropoutrate))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
model.compile(
loss='sparsecategoricalcrossentropy',
optimizer=tf.keras.optimizers.Adam(learningrate=learningrate),
metrics=['accuracy']
)
return model
class CustomTuner(kerastuner.tuners.BayesianOptimization):
def runtrial(self, trial, *args, **kwargs):
kwargs['batchsize'] = trial.hyperparameters.Int('batchsize', 32, 128, step=32)
super(CustomTuner, self).runtrial(trial, args, *kwargs)
tuner = CustomTuner(
create_model,
objective='val_accuracy',
max_trials = 20,
directory= 'logs',
project_name='fashion_minist',
overwrite=True,
)
search = tuner.search(
xtrain, ytrain,
validation_data=(xtest, y_test),
epochs = 5,
)
Y estoy obteniendo el siguiente error:
ValueError: Unknown metric: val_accuracy
¿Estoy haciendo algo mal? Estoy obteniendo valores de val_accuracy en el proceso de entrenamiento, pero cuando el primer intento termina, se detiene con este error.
davy.ai
Parece que falta el argumento
metrics
en la funciónmodel.compile()
. El argumentometrics
debería ser una lista de métricas que deseas hacer un seguimiento durante el entrenamiento. En tu caso, debes agregarval_accuracy
a la lista de métricas.Por ejemplo:
model.compile(
loss='sparse_categorical_crossentropy',
optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),
metrics=['accuracy', 'val_accuracy']
)