Last active
May 30, 2024 20:14
-
-
Save Miguel07Alm/5d893a7285c63933692eb4ecf255e72b to your computer and use it in GitHub Desktop.
Tutorial sobre el desarrollo de un modelo con Machine Learning (IA), el cual utiliza un modelo de clasificación de imagenes (convolutional model) para predecir si una imagen es x según los labels del dataset.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Importar bibliotecas necesarias | |
import tensorflow as tf | |
from tensorflow.keras import datasets, layers, models | |
import matplotlib.pyplot as plt | |
import numpy as np | |
# Cargar y preprocesar los datos | |
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data() | |
train_images, test_images = train_images / 255.0, test_images / 255.0 | |
# Definir la arquitectura del modelo | |
model = models.Sequential([ | |
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)), | |
layers.MaxPooling2D((2, 2)), | |
layers.Conv2D(64, (3, 3), activation='relu'), | |
layers.MaxPooling2D((2, 2)), | |
layers.Conv2D(64, (3, 3), activation='relu'), | |
layers.Flatten(), | |
layers.Dense(64, activation='relu'), | |
layers.Dense(10) | |
]) | |
# Compilar el modelo | |
model.compile(optimizer='adam', | |
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), | |
metrics=['accuracy']) | |
# Entrenar el modelo | |
history = model.fit(train_images, train_labels, epochs=10, | |
validation_data=(test_images, test_labels)) | |
# Evaluar el modelo | |
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2) | |
print(f'\nTest accuracy: {test_acc}') | |
# Hacer predicciones | |
probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()]) | |
predictions = probability_model.predict(test_images) | |
# Función para graficar imágenes con predicciones | |
def plot_image(i, predictions_array, true_label, img): | |
predictions_array, true_label, img = predictions_array[i], true_label[i], img[i] | |
plt.grid(False) | |
plt.xticks([]) | |
plt.yticks([]) | |
plt.imshow(img, cmap=plt.cm.binary) | |
predicted_label = np.argmax(predictions_array) | |
if predicted_label == true_label: | |
color = 'blue' | |
else: | |
color = 'red' | |
plt.xlabel(f"{class_names[predicted_label]} {100*np.max(predictions_array):2.0f}% ({class_names[true_label[0]]})", color=color) | |
def plot_value_array(i, predictions_array, true_label): | |
predictions_array, true_label = predictions_array[i], true_label[i] | |
plt.grid(False) | |
plt.xticks(range(10)) | |
plt.yticks([]) | |
thisplot = plt.bar(range(10), predictions_array, color="#777777") | |
plt.ylim([0, 1]) | |
predicted_label = np.argmax(predictions_array) | |
thisplot[predicted_label].set_color('red') | |
thisplot[true_label[0]].set_color('blue') | |
# Nombres de las clases en CIFAR-10 | |
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', | |
'dog', 'frog', 'horse', 'ship', 'truck'] | |
# Mostrar algunas imágenes junto con las predicciones | |
num_rows = 5 | |
num_cols = 3 | |
num_images = num_rows * num_cols | |
plt.figure(figsize=(2*2*num_cols, 2*num_rows)) | |
for i in range(num_images): | |
plt.subplot(num_rows, 2*num_cols, 2*i+1) | |
plot_image(i, predictions, test_labels, test_images) | |
plt.subplot(num_rows, 2*num_cols, 2*i+2) | |
plot_value_array(i, predictions, test_labels) | |
plt.tight_layout() | |
plt.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment