¿Cómo mejorar el rendimiento del modelo CNN para un conjunto de datos específico? Obtención de baja precisión tanto en el entrenamiento como en el conjunto de datos de prueba
Nos dieron una tarea en la que se suponía que debíamos implementar nuestra propia red neuronal y otras dos redes neuronales ya desarrolladas. Lo hice y, sin embargo, este no es el requisito de la tarea, pero aún así me gustaría saber cuáles son los pasos/procedimientos que puedo seguir para mejorar la precisión de mis modelos.
Soy bastante nuevo en Deep Learning y Machine Learning en general, así que no tengo mucha idea.
El conjunto de datos proporcionado contiene un total de 15 clases (avión, silla, etc.) y se nos proporcionan alrededor de 15 imágenes de cada clase en el conjunto de datos de entrenamiento. El conjunto de datos de prueba tiene 10 imágenes de cada clase.
El repositorio completo de github de mi código se puede encontrar aquí (archivo de Jupyter Notebook): https:/ /github.com/hassanashas/Deep-Learning-Modelos
Primero lo probé con mi propia CNN (hice uno usando tutoriales de Youtube). El código es el siguiente,
X_train = X_train/255.0
model = Sequential()
model.add(Conv2D(64, (3, 3), input_shape = X_train.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Dense(16)) # added 16 because it model.fit gave error on 15
model.add(Activation('softmax'))
Para la compilación del Modelo,
from tensorflow.keras.optimizers import SGD
model.compile(loss='sparse_categorical_crossentropy',
optimizer=SGD(learning_rate=0.01),
metrics=['accuracy'])
Utilicé una entropía cruzada categórica dispersa porque mi etiqueta "y" tenía valores enteros, que iban del 1 al 15.
Ejecuté este modelo de la siguiente manera,
model_fit = model.fit(X_train, y_train, batch_size=32, epochs=30, validation_split=0.1)
Me dio una precisión de 0.2030 en training dataset
y solo 0.0733 en testing dataset
(ambos conjuntos de datos están presentes en el repositorio de github)
Luego, probé AlexNet CNN (seguí un tutorial de Youtube para su código)
Ejecuté AlexNet en el mismo conjunto de datos durante 15 épocas. Mejoró la precisión en el conjunto de datos de entrenamiento a 0.3317, sin embargo, la precisión en el conjunto de datos de prueba fue incluso peor que la de mi propia CNN, con solo 0.06
Después, probé el VGG16 CNN, nuevamente siguiendo un Tutorial de Youtube.
Ejecuté el código en Google Colab durante 10 Epochs. Se las arregló para mejorar al 100 % de precisión en training dataset
en la octava época. Pero este modelo dio la peor precisión de los tres en el conjunto de datos de prueba con solo 0.0533
No puedo entender este comportamiento contrastante de todos estos modelos. He probado diferentes valores de época, funciones de pérdida, etc. pero los actuales dieron relativamente el mejor resultado. Mi propia CNN pudo obtener una precisión del 100 % cuando la ejecuté en 100 epochs (sin embargo, dio resultados muy deficientes en el conjunto de datos de prueba)
¿Qué puedo hacer para mejorar el rendimiento de estos modelos? Y específicamente, ¿cuáles son las pocas cosas cruciales que uno siempre debe tratar de seguir para mejorar la eficiencia de un modelo de aprendizaje profundo? Busqué varias preguntas similares en Stackoverflow, pero casi todas estaban trabajando en conjuntos de datos proporcionados por tensorflow, como el conjunto de datos mnist, etc., y no encontré mucha ayuda en ellos.
Mostrar la mejor respuesta