Aplicando Redes Neuronales Convolucionales en la Educación Superior.ipynb
Aplicando Redes Neuronales Convolucionales en la Educación
Superior
Introducción:
En este artículo,
exploraremos cómo las Redes Neuronales Convolucionales (CNN, por sus siglas en
inglés), una de las tecnologías más avanzadas en el campo de la Inteligencia
Artificial, pueden ser aplicadas en la educación superior para mejorar los
procesos de enseñanza y aprendizaje. Adoptaremos un enfoque basado en
competencias, analizando cómo este tipo de IA puede contribuir al desarrollo de
conocimientos conceptuales, habilidades procedimentales, y actitudes y
valoraciones positivas hacia el aprendizaje autónomo y la innovación
tecnológica.
Contenido (Conocimientos Conceptuales – Marco
Teórico):
1. Redes Neuronales Convolucionales: Una
Breve Introducción
Las Redes
Neuronales Convolucionales (CNN) son un tipo de red neuronal
artificial inspiradas en el proceso biológico de la visión animal que se
utilizan principalmente para procesar datos estructurados en forma de
cuadrículas, como imágenes.
Estructura de una CNN:
Capas de Convolución: Utilizan filtros
o kernels para extraer características de bajo nivel (como bordes) a
características de alto nivel (como formas o identificación de objetos) de la
entrada.
Capas de Pooling (Submuestreo): Reducen la
dimensión de los datos de entrada manteniendo las características más
importantes, ayudando a disminuir el cálculo y los riesgos de sobreajuste.
Capas Fully Connected (Densas): Después de
varias capas de convolución y pooling, la información se aplanan y se alimenta
a través de capas densas para la clasificación o regresión.
Principios de Funcionamiento:
Localidad y Invariancia a la Traducción: Las CNN
aprovechan la localidad espacial de los datos (cercanía de los píxeles en
imágenes) y son capaces de detectar patrones independientemente de su posición
en la imagen.
Aprendizaje de Características: A través del
entrenamiento, las CNN aprenden automáticamente las características importantes
para realizar tareas de clasificación o regresión, sin necesidad de extracción
manual de características.
Imagen de Estructura de una CNN: Imaginemos un
diagrama que muestre una capa de entrada (la imagen), seguida de varias capas
de convolución y pooling alternadas, terminando en capas densas que conducen a
la capa de salida (la clasificación).
Aplicaciones de
las CNN
Las CNN han revolucionado el campo de la
visión por computadora y han encontrado aplicaciones en una amplia gama de
dominios.
Visión por Computadora:
Reconocimiento de Imágenes: Identificación
de objetos, personas, escenas, etc., en imágenes.
Detección de Objetos: Localización de
objetos dentro de una imagen y clasificación de ellos.
Segmentación de Imágenes: División de una
imagen en segmentos o regiones para identificar y localizar diferentes objetos
o áreas de interés.
Procesamiento del Lenguaje Natural (PLN): Aunque
tradicionalmente se asocian más con el procesamiento de imágenes, las CNN
también se aplican en PLN para tareas como la clasificación de texto y el
análisis de sentimientos, aprovechando la estructura secuencial de los datos
textuales.
Otros Campos:
Medicina: Para análisis y diagnóstico médico a
partir de imágenes clínicas.
Seguridad: En sistemas de vigilancia para
reconocimiento facial o detección de actividades sospechosas.
Automoción: Vehículos autónomos utilizan CNN para
interpretar el entorno visual.
Gráficos de Aplicaciones: Podemos visualizar gráficos que representan cómo una CNN procesa una imagen para reconocer un objeto, un diagrama que muestra la detección de objetos en una imagen de vigilancia, y ejemplos de segmentación de imágenes médicas.
Generemos una imagen conceptual que ilustre la estructura básica de una CNN y su aplicación en reconocimiento de imágenes:
La imagen generada
ilustra la estructura de una Red Neuronal Convolucional (CNN) y cómo se aplica
en el reconocimiento de imágenes. Se muestra desde la capa de entrada, que
representa una imagen, pasando por las capas alternas de convolución y pooling,
hasta llegar a las capas completamente conectadas que culminan en la capa de
salida para la clasificación. Además, se visualiza cómo la red identifica y
clasifica objetos dentro de la imagen, demostrando una aplicación práctica en
el reconocimiento de imágenes.
Este gráfico sirve
como un recurso educativo para comprender cómo las CNN procesan y analizan
visualmente los datos para realizar tareas como la clasificación de imágenes,
destacando su importancia y versatilidad en diversos campos de aplicación.
2. La Importancia
de la IA en la Educación Superior
Cómo la IA está
transformando la educación superior: personalización del aprendizaje,
automatización de tareas, análisis de datos para mejorar la toma de decisiones.
3. El Enfoque de
Competencias en la Educación Superior
Qué son las
competencias y cómo se estructuran (conocimientos, habilidades, actitudes y
valoraciones).
La relevancia de
las competencias en el siglo XXI y su alineación con las necesidades del
mercado laboral.
Script Python (Habilidades – Procedimientos):
Implementación
Básica de una CNN con TensorFlow y Keras
Este ejemplo se
enfocará en el reconocimiento de dígitos utilizando el conjunto de datos MNIST,
que es un conjunto de datos estándar usado en el aprendizaje profundo para el
reconocimiento de dígitos escritos a mano.
Paso 1: Preparar
el Entorno
Primero, asegúrate
de tener TensorFlow instalado en tu entorno. Puedes instalar TensorFlow
mediante pip:
pip install tensorflow
RESULTADO:
Requirement already satisfied: tensorflow in
/usr/local/lib/python3.10/dist-packages (2.15.0)
Requirement already satisfied: absl-py>=1.0.0 in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (1.4.0)
Requirement already satisfied: astunparse>=1.6.0
in /usr/local/lib/python3.10/dist-packages (from tensorflow) (1.6.3)
Requirement already satisfied:
flatbuffers>=23.5.26 in /usr/local/lib/python3.10/dist-packages (from
tensorflow) (23.5.26)
Requirement already satisfied:
gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (0.5.4)
Requirement already satisfied:
google-pasta>=0.1.1 in /usr/local/lib/python3.10/dist-packages (from
tensorflow) (0.2.0)
Requirement already satisfied: h5py>=2.9.0 in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (3.9.0)
Requirement already satisfied: libclang>=13.0.0
in /usr/local/lib/python3.10/dist-packages (from tensorflow) (16.0.6)
Requirement already satisfied: ml-dtypes~=0.2.0 in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (0.2.0)
Requirement already satisfied:
numpy<2.0.0,>=1.23.5 in /usr/local/lib/python3.10/dist-packages (from
tensorflow) (1.23.5)
Requirement already satisfied: opt-einsum>=2.3.2
in /usr/local/lib/python3.10/dist-packages (from tensorflow) (3.3.0)
Requirement already satisfied: packaging in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (23.2)
Requirement already satisfied:
protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3
in /usr/local/lib/python3.10/dist-packages (from tensorflow) (3.20.3)
Requirement already satisfied: setuptools in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (67.7.2)
Requirement already satisfied: six>=1.12.0 in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (1.16.0)
Requirement already satisfied: termcolor>=1.1.0
in /usr/local/lib/python3.10/dist-packages (from tensorflow) (2.4.0)
Requirement already satisfied:
typing-extensions>=3.6.6 in /usr/local/lib/python3.10/dist-packages (from
tensorflow) (4.9.0)
Requirement already satisfied: wrapt<1.15,>=1.11.0
in /usr/local/lib/python3.10/dist-packages (from tensorflow) (1.14.1)
Requirement already satisfied:
tensorflow-io-gcs-filesystem>=0.23.1 in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (0.35.0)
Requirement already satisfied:
grpcio<2.0,>=1.24.3 in /usr/local/lib/python3.10/dist-packages (from
tensorflow) (1.60.1)
Requirement already satisfied:
tensorboard<2.16,>=2.15 in /usr/local/lib/python3.10/dist-packages (from
tensorflow) (2.15.1)
Requirement already satisfied:
tensorflow-estimator<2.16,>=2.15.0 in
/usr/local/lib/python3.10/dist-packages (from tensorflow) (2.15.0)
Requirement already satisfied:
keras<2.16,>=2.15.0 in /usr/local/lib/python3.10/dist-packages (from
tensorflow) (2.15.0)
Requirement already satisfied:
wheel<1.0,>=0.23.0 in /usr/local/lib/python3.10/dist-packages (from
astunparse>=1.6.0->tensorflow) (0.42.0)
Requirement already satisfied:
google-auth<3,>=1.6.3 in /usr/local/lib/python3.10/dist-packages (from
tensorboard<2.16,>=2.15->tensorflow) (2.17.3)
Requirement already satisfied:
google-auth-oauthlib<2,>=0.5 in /usr/local/lib/python3.10/dist-packages
(from tensorboard<2.16,>=2.15->tensorflow) (1.2.0)
Requirement already satisfied: markdown>=2.6.8
in /usr/local/lib/python3.10/dist-packages (from
tensorboard<2.16,>=2.15->tensorflow) (3.5.2)
Requirement already satisfied:
requests<3,>=2.21.0 in /usr/local/lib/python3.10/dist-packages (from
tensorboard<2.16,>=2.15->tensorflow) (2.31.0)
Requirement already satisfied:
tensorboard-data-server<0.8.0,>=0.7.0 in
/usr/local/lib/python3.10/dist-packages (from
tensorboard<2.16,>=2.15->tensorflow) (0.7.2)
Requirement already satisfied: werkzeug>=1.0.1
in /usr/local/lib/python3.10/dist-packages (from
tensorboard<2.16,>=2.15->tensorflow) (3.0.1)
Requirement already satisfied:
cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from
google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow)
(5.3.2)
Requirement already satisfied:
pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from
google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow)
(0.3.0)
Requirement already satisfied: rsa<5,>=3.1.4
in /usr/local/lib/python3.10/dist-packages (from
google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow)
(4.9)
Requirement already satisfied:
requests-oauthlib>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from
google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow)
(1.3.1)
Requirement already satisfied:
charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from
requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow)
(3.3.2)
Requirement already satisfied: idna<4,>=2.5
in /usr/local/lib/python3.10/dist-packages (from
requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow)
(3.6)
Requirement already satisfied:
urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from
requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow)
(2.0.7)
Requirement already satisfied:
certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from
requests<3,>=2.21.0->tensorboard<2.16,>=2.15->tensorflow)
(2024.2.2)
Requirement already satisfied: MarkupSafe>=2.1.1
in /usr/local/lib/python3.10/dist-packages (from
werkzeug>=1.0.1->tensorboard<2.16,>=2.15->tensorflow) (2.1.5)
Requirement already satisfied:
pyasn1<0.6.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from
pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.16,>=2.15->tensorflow)
(0.5.1)
Requirement already satisfied: oauthlib>=3.0.0
in /usr/local/lib/python3.10/dist-packages (from
requests-oauthlib>=0.7.0->google-auth-oauthlib<2,>=0.5->tensorboard<2.16,>=2.15->tensorflow)
(3.2.2)
Paso 2: Importar
las Bibliotecas Necesarias
import tensorflow
as tf
from
tensorflow.keras import
datasets, layers, models
import
matplotlib.pyplot as
plt
Paso 3: Cargar el
Conjunto de Datos MNIST
El conjunto de
datos MNIST está disponible directamente en Keras, así que podemos cargarlo
fácilmente:
(train_images, train_labels), (test_images,
test_labels) = datasets.mnist.load_data()
# Normalizar los datos de imágenes para que sus
valores estén entre 0 y 1
train_images, test_images = train_images / 255.0, test_images / 255.0
# Asegurarnos de que las imágenes tienen la forma
correcta para la CNN
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))
RESULTADOS:
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11490434/11490434 [==============================]
- 0s 0us/step
Paso 4: Construir el Modelo de
CNN
Vamos a construir un modelo
simple de CNN:
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
# Añadir las capas densas en la parte superior
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))
Paso 5: Compilar
el Modelo
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
Paso 6: Entrenar
el Modelo
history = model.fit(train_images, train_labels,
epochs=10,
validation_data=(test_images, test_labels))
RESULTADO:
Epoch 1/10
1875/1875 [==============================] - 56s
29ms/step - loss: 0.1449 - accuracy: 0.9550 - val_loss: 0.0398 - val_accuracy:
0.9879
Epoch 2/10
1875/1875 [==============================] - 54s
29ms/step - loss: 0.0457 - accuracy: 0.9858 - val_loss: 0.0373 - val_accuracy:
0.9885
Epoch 3/10
1875/1875 [==============================] - 54s
29ms/step - loss: 0.0313 - accuracy: 0.9902 - val_loss: 0.0323 - val_accuracy:
0.9898
Epoch 4/10
1875/1875 [==============================] - 53s
28ms/step - loss: 0.0254 - accuracy: 0.9922 - val_loss: 0.0281 - val_accuracy:
0.9920
Epoch 5/10
1875/1875 [==============================] - 53s
28ms/step - loss: 0.0201 - accuracy: 0.9937 - val_loss: 0.0327 - val_accuracy:
0.9902
Epoch 6/10
1875/1875 [==============================] - 53s
28ms/step - loss: 0.0166 - accuracy: 0.9947 - val_loss: 0.0378 - val_accuracy:
0.9894
Epoch 7/10
1875/1875 [==============================] - 52s
28ms/step - loss: 0.0132 - accuracy: 0.9955 - val_loss: 0.0351 - val_accuracy:
0.9918
Epoch 8/10
1875/1875 [==============================] - 55s
29ms/step - loss: 0.0110 - accuracy: 0.9965 - val_loss: 0.0394 - val_accuracy:
0.9894
Paso 7: Evaluar el
Modelo
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)
RESULTADOS:
output
313/313 - 2s - loss: 0.0343 - accuracy: 0.9912 - 2s/epoch - 8ms/step
Test accuracy: 0.9911999702453613
Paso 8: Hacer
Predicciones
Para hacer
predicciones, primero debemos aplicar la función softmax para convertir los
logits en probabilidades, que son más fáciles de interpretar.
probability_model = tf.keras.Sequential([model,
tf.keras.layers.Softmax()])
predictions =
probability_model.predict(test_images)
# Predicciones para el primer elemento en el
conjunto de prueba
print(predictions[0])
RESULTADOS
313/313 [==============================] - 3s
8ms/step
[3.1240199e-10 5.4562883e-09 4.4068371e-09
5.0739338e-08 1.5214380e-07
3.1304498e-10 1.2828880e-13 9.9999982e-01
1.3720267e-09 3.9389043e-08]
Este es un ejemplo
básico de cómo construir y entrenar una CNN con TensorFlow y Keras. Puedes
experimentar con el modelo cambiando la arquitectura, el número de capas, los
hiperparámetros como la tasa de aprendizaje, o el número de épocas, para
mejorar el rendimiento del modelo en tareas de clasificación.
Conclusiones (Actitudes y Valoraciones):
1. Impacto de las
CNN en la Educación Superior:
Reflexión sobre
cómo la integración de tecnologías avanzadas como las CNN puede mejorar la
calidad y accesibilidad de la educación superior.
La importancia de
desarrollar una actitud abierta y proactiva hacia el aprendizaje de nuevas
tecnologías entre estudiantes y docentes.
2. Desafíos y
Oportunidades:
Discusión sobre
los desafíos técnicos y éticos de implementar IA en la educación.
Las oportunidades
que la IA ofrece para innovar en métodos pedagógicos y en el diseño curricular.
3. Llamado a la
Acción:
Alentar a los educadores y las instituciones educativas a adoptar tecnologías de IA, fomentando un entorno donde la competencia tecnológica y la innovación estén a la vanguardia del desarrollo educativo.
