
Sebastian Sarasti
PreguntaHay alguna forma de hacerle el tunning pero con el tamaño del batch_size. Tengo un data_set de 40k archivos, es evidente que si entreno con todo el data set va a colapsar la PC. Por lo que he estado probando tamaños de 100, hasta 2000 archivos, pero me gustaría que se optimice por si solo el batch_size. Con el código actual exite alguna forma de hacerlo?
Vi que dentro de la función unicamente se llega hasta el compile, pero no se incluye el fit donde se pone el batch_size.
Agradecería mucho la respuesta!

Adonai Vera
Hola Sebastián Alejandro, Excelente pregunta, si se podría realizar. Con Keras Tunner podrías realizar tunning a cualquier variable del modelo, el código quedaría de la siguiente manera:
class MyHyperModel(kt.HyperModel): def build(self, hp): model = tf.keras.models.Sequential() model.add(tf.keras.layers.Conv2D(75, (3,3), activation= "relu", input_shape = (28, 28, 1))) model.add(tf.keras.layers.MaxPool2D((2,2))) model.add(tf.keras.layers.Flatten()) hp_units = hp.Int("units", min_value = 32, max_value = 512, step = 32) model.add(tf.keras.layers.Dense(units=hp_units,activation = "relu", kernel_regularizer= regularizers.l2(1e-5))) model.add(tf.keras.layers.Dropout(0.2)) model.add(tf.keras.layers.Dense(128,activation = "relu", kernel_regularizer= regularizers.l2(1e-5))) model.add(tf.keras.layers.Dropout(0.2)) model.add(tf.keras.layers.Dense(len(classes), activation = "softmax")) 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 = "categorical_crossentropy", metrics = ["accuracy"]) return model def fit(self, hp, model, *args, **kwargs): return model.fit( *args, batch_size=hp.Choice("batch_size", [16, 32]), **kwargs, )
tuner = kt.RandomSearch( MyHyperModel(), objective="val_accuracy", max_trials=3, overwrite=True, directory="models/", project_name="platzi-tunner", )
tuner.search(train_generator, epochs =20, validation_data = validation_generator) best_hps = tuner.get_best_hyperparameters(num_trials =1)[0] print(best_hps.get("batch_size"))
Modifique un poco la función constructor_modelos y cree una clase para construir el modelo y para entrenarlo, en la clase entrenamiento es donde agrego el batch size.
Ten presente que el sistema va a encontrar el batch size que genere el val_accuracy más alto (No se está teniendo en cuenta capacidad de cómputo).
Me cuentas que tal, saludos