PyTorch: omitir el cálculo de características de modelos preentrenados en cada época.
Estoy acostumbrado a trabajar con TensorFlow – Keras, pero ahora me veo obligado a empezar a trabajar con Pytorch por cuestiones de flexibilidad. Sin embargo, no logro encontrar un código en Pytorch que se centre únicamente en entrenar la capa de clasificación de un modelo. ¿No es eso una práctica común? Ahora tengo que esperar al cálculo de la extracción de características de los mismos datos para cada época. ¿Hay alguna forma de evitar eso?
# en tensorflow - keras:
from tensorflow.keras.applications import vgg16, MobileNetV2, mobilenet_v2
# Cargar un modelo pre-entrenado
pretrained_nn = MobileNetV2(weights='imagenet', include_top=False, input_shape=(tamaño_imagen, tamaño_imagen, 3))
# Extraer características solo una vez de los datos de entrenamiento
X = mobilenet_v2.preprocess_input(X)
features_x = pretrained_nn.predict(X)
# Guardar características para su uso posterior
joblib.dump(features_x, "caracteristicas_x.dat")
# Crear un modelo y añadir capas
modelo = Sequential()
modelo.add(Flatten(input_shape=features_x.shape[1:]))
modelo.add(Dense(100, activation='relu', use_bias=True))
modelo.add(Dense(Y.shape[1], activation='softmax', use_bias=False))
# Compilar y entrenar solo el modelo completamente conectado
modelo.compile(loss='categorical_crossentropy', optimizer=keras.optimizers.Adam(learning_rate=0.001))
history = modelo.fit(features_x, Y_entrenamiento, batch_size=16, epochs=Epochs)
davy.ai
En Pytorch, es una práctica común entrenar solamente la capa de clasificación de un modelo pre-entrenado para el aprendizaje por transferencia. Una forma de evitar el cálculo repetido de la extracción de características en cada época es extraer las características una vez y guardarlas para su uso posterior. Esto se puede lograr utilizando DataLoader y torch.utils.data.Dataset de Pytorch. Aquí tienes un código de ejemplo:
En este ejemplo, creamos un conjunto de datos y un DataLoader de Pytorch para cargar y preprocesar los datos, y un FeaturesDataset para extraer características del modelo pre-entrenado. Luego, iteramos sobre el DataLoader para extraer las características una vez y guardarlas en un archivo. Después de eso, creamos un modelo de Pytorch y cargamos las características pre-extraídas, y entrenamos solo las capas completamente conectadas del modelo.