Hay 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 c...

Sebastian Sarasti

Sebastian Sarasti

Pregunta
studenthace 3 años

Hay 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!

1 respuestas
para escribir tu comentario
    Adonai Vera

    Adonai Vera

    teacherhace 3 años

    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

Curso Profesional de Redes Neuronales con TensorFlow

Curso Profesional de Redes Neuronales con TensorFlow

Desarrolla modelos de redes neuronales usando TensorFlow. Aprende a cargar y preprocesar datos, entender el ciclo de la IA, aplicar transfer learning y optimizar modelos con técnicas como regularización y callbacks. Ideal para mejorar tus competencias en deep learning.

Curso Profesional de Redes Neuronales con TensorFlow
Curso Profesional de Redes Neuronales con TensorFlow

Curso Profesional de Redes Neuronales con TensorFlow

Desarrolla modelos de redes neuronales usando TensorFlow. Aprende a cargar y preprocesar datos, entender el ciclo de la IA, aplicar transfer learning y optimizar modelos con técnicas como regularización y callbacks. Ideal para mejorar tus competencias en deep learning.