Skip to content

Instantly share code, notes, and snippets.

@RodolfoFerro
Last active January 14, 2022 18:11
Show Gist options
  • Select an option

  • Save RodolfoFerro/a4ba7dfd40e0fe7aec89e2c8f9ab234f to your computer and use it in GitHub Desktop.

Select an option

Save RodolfoFerro/a4ba7dfd40e0fe7aec89e2c8f9ab234f to your computer and use it in GitHub Desktop.
Introducción a las redes neuronales convolucionales con TensorFlow y Keras
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Introducción a las redes neuronales convolucionales con TensorFlow y Keras",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/RodolfoFerro/a4ba7dfd40e0fe7aec89e2c8f9ab234f/redes-neuronales-profundas.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "R6jO_1gISKxk"
},
"source": [
"# Introducción a las redes neuronales convolucionales con TensorFlow y Keras\n",
"\n",
"> **Rodolfo Ferro** <br>\n",
"> Google Dev Expert en ML, 2022.\n",
"\n",
"## Contenidos\n",
"\n",
"#### **Sección III**\n",
"\n",
"1. **Bases:** Aprendizaje de neuronas\n",
"2. **Código:** Entrenamiento de una neurona\n",
"3. **Bases:** Conceptos importantes\n",
"4. **Bases:** Imágenes\n",
"\n",
"#### **Sección IV**\n",
"\n",
"4. **Bases:** El dataset de modas\n",
"5. **Código:** Preparación de datos\n",
"6. **Código:** Creación del modelo multicapa (MLP)\n",
"7. **Código:** Entrenamiento del modelo\n",
"8. **Código:** Evaluación y predicción\n",
"\n",
"#### **Sección V**\n",
"\n",
"9. **Bases:** Convoluciones\n",
"10. **Código:** Creación del modelo convolucional (CNN)\n",
"11. **Código:** Entrenamiento del modelo\n",
"12. **Código:** Evaluación y predicción\n",
"\n",
"\n",
"9. **Cierre:** Sesión de preguntas y respuestas"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xNVG2PnSEtQN"
},
"source": [
"## **Sección III**"
]
},
{
"cell_type": "markdown",
"source": [
"### Aprendizaje de neuronas\n",
"\n",
"Veamos cómo se puede entrenar una sola neurona para hacer una predicción.\n",
"\n",
"Para este problema construiremos un perceptrón simple, como el propuesto por McCulloch & Pitts, usando la función sigmoide.\n",
"\n",
"#### **Planteamiento del problema:**\n",
"\n",
"Queremos mostrarle a una neurona simple un conjunto de ejemplos para que pueda aprender cómo se comporta una función. El conjunto de ejemplos es el siguiente:\n",
"\n",
"- `(1, 0)` debería devolver `1`.\n",
"- `(0, 1)` debe devolver `1`.\n",
"- `(0, 0)` debería devolver `0`.\n",
"\n",
"Entonces, si ingresamos a la neurona el valor de `(1, 1)`, debería poder predecir el número `1`.\n",
"\n",
"> ¿Puedes adivinar la función?\n",
"\n",
"#### ¿Que necesitamos hacer?\n",
"\n",
"Programar y entrenar una neurona para hacer predicciones.\n",
"\n",
"En concreto, vamos a hacer lo siguiente:\n",
"\n",
"- Construir la clase y su constructor.\n",
"- Definir la función sigmoidea y su derivada\n",
"- Definir el número de épocas para el entrenamiento.\n",
"- Resolver el problema y predecir el valor de la entrada deseada"
],
"metadata": {
"id": "2k4ZBY7drHpQ"
}
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"\n",
"\n",
"class sigmoid_neuron():\n",
" def __init__(self, n):\n",
" \"\"\"Constructor of the class.\"\"\"\n",
" np.random.seed(123)\n",
" self.synaptic_weights = 2 * np.random.random((n, 1)) - 1\n",
"\n",
" def __sigmoid(self, x):\n",
" \"\"\"Sigmoid function.\"\"\"\n",
" # TODO.\n",
" pass\n",
"\n",
" def __sigmoid_derivative(self, x):\n",
" \"\"\"Derivative of the Sigmoid function.\"\"\"\n",
" # TODO.\n",
" pass\n",
"\n",
" def train(self, training_inputs, training_output, iterations):\n",
" \"\"\"Training function.\"\"\"\n",
" for iteration in range(iterations):\n",
" output = self.predict(training_inputs)\n",
" error = training_output.reshape((len(training_inputs), 1)) - output\n",
" adjustment = np.dot(training_inputs.T, error *\n",
" self.__sigmoid_derivative(output))\n",
" self.synaptic_weights += adjustment\n",
"\n",
" def predict(self, inputs):\n",
" \"\"\"Prediction function.\"\"\"\n",
" return self.__sigmoid(np.dot(inputs, self.synaptic_weights))"
],
"metadata": {
"id": "2NKx40hxqmo4"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"### Generando las muestras\n",
"\n",
"Ahora podemos generar una lista de ejemplos basados en la descripción del problema."
],
"metadata": {
"id": "Ym_oEzbhxYKT"
}
},
{
"cell_type": "code",
"source": [
"# Training samples:\n",
"input_values = [] # TODO. Define the input values as a list of tuples.\n",
"output_values = [] # TODO. Define the desired outputs.\n",
"\n",
"training_inputs = np.array(input_values)\n",
"training_output = np.array(output_values).T.reshape((3, 1))"
],
"metadata": {
"id": "BYW9aYSCxc1q"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"### Entrenando la neurona\n",
"\n",
"Para hacer el entrenamiento, primero definiremos una neurona. De forma predeterminada, contendrá pesos aleatorios (ya que aún no se ha entrenado):"
],
"metadata": {
"id": "DJUYV8H-xf7Y"
}
},
{
"cell_type": "code",
"source": [
"# Initialize Sigmoid Neuron:\n",
"neuron = sigmoid_neuron(2)\n",
"print(\"Initial random weights:\")\n",
"neuron.synaptic_weights"
],
"metadata": {
"id": "cThkcQGMxrX8"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# TODO.\n",
"# We can modify the number of epochs to see how it performs.\n",
"epochs = 0\n",
"\n",
"# We train the neuron a number of epochs:\n",
"neuron.train(training_inputs, training_output, epochs)\n",
"print(\"New synaptic weights after training: \")\n",
"neuron.synaptic_weights"
],
"metadata": {
"id": "WnuCP6eHxtQk"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"### Haciendo predicciones"
],
"metadata": {
"id": "7vPb5a65x0bA"
}
},
{
"cell_type": "code",
"source": [
"# We predict to verify the performance:\n",
"one_one = np.array((1, 1))\n",
"print(\"Prediction for (1, 1): \")\n",
"neuron.predict(one_one)"
],
"metadata": {
"id": "SrYM3ODKxwvD"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Rtpuj0PBqWYc"
},
"source": [
"## **Sección IV**"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1Z7JrTygMDSx"
},
"source": [
"### El dataset de modas\n",
"\n",
"Comencemos importando TensorFlow."
]
},
{
"cell_type": "code",
"metadata": {
"id": "LPB4nBh8MFDm",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "5fa8ceab-355d-4046-cd21-0c25db37bb96"
},
"source": [
"import tensorflow as tf\n",
"print(tf.__version__)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"2.5.0\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "p65n1ePSMYm8"
},
"source": [
"Los datos de Fashion MNIST están disponibles directamente en la API de conjuntos de datos de `tf.keras`. Los cargas así:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Wgked3UaMJW4"
},
"source": [
"fashion_mnist = tf.keras.datasets.fashion_mnist"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "UsEGBNwrMSac"
},
"source": [
"Llamar a `load_data` en este objeto nos dará dos conjuntos con los valores de entrenamiento y prueba para los gráficos que contienen las prendas y sus etiquetas."
]
},
{
"cell_type": "code",
"metadata": {
"id": "1XdP6qF1MLR6",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "b80eed3d-826b-4b5d-82cb-27a859dc0d9f"
},
"source": [
"(training_images, training_labels), (test_images, test_labels) = fashion_mnist.load_data()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz\n",
"32768/29515 [=================================] - 0s 0us/step\n",
"Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz\n",
"26427392/26421880 [==============================] - 1s 0us/step\n",
"Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz\n",
"8192/5148 [===============================================] - 0s 0us/step\n",
"Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz\n",
"4423680/4422102 [==============================] - 0s 0us/step\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6c0eSrlvMs6H"
},
"source": [
"¿Cómo se ven estos valores?\n",
"\n",
"Imprimamos una imagen de entrenamiento y una etiqueta de entrenamiento para ver."
]
},
{
"cell_type": "code",
"metadata": {
"id": "3CdTltfNM0qF",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 771
},
"outputId": "de9afc15-a8e0-4477-b382-b45c6b1f8a01"
},
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"np.set_printoptions(linewidth=200)\n",
"\n",
"\n",
"# Set index of image to be seen\n",
"img_index = 5999 # 6000 -1\n",
"\n",
"# Plot image\n",
"plt.imshow(training_images[img_index], cmap='gray')\n",
"plt.axis(False)\n",
"\n",
"print(\"Label:\", training_labels[img_index])\n",
"print(\"Matrix:\", training_images[img_index])"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Label: 0\n",
"Matrix: [[ 0 0 0 0 0 0 0 0 0 0 120 54 0 0 0 0 13 124 0 0 0 0 2 0 0 0 0 0]\n",
" [ 0 0 0 0 0 0 0 64 173 207 218 206 232 184 168 202 205 218 202 126 12 0 0 1 0 0 0 0]\n",
" [ 0 0 0 0 0 56 199 223 222 207 205 211 223 227 231 230 214 203 209 220 213 164 0 0 2 0 0 0]\n",
" [ 0 0 0 0 0 191 219 200 200 206 206 205 206 206 203 202 201 202 201 195 198 222 149 0 0 0 0 0]\n",
" [ 0 0 0 0 72 224 201 205 208 202 204 204 205 205 208 205 192 188 203 202 200 189 198 23 0 0 0 0]\n",
" [ 0 0 0 0 160 221 211 200 204 203 204 203 201 202 201 203 201 185 203 203 188 194 207 126 0 0 0 0]\n",
" [ 0 0 0 0 227 212 224 205 201 204 203 202 202 201 201 200 201 195 198 191 182 199 202 202 0 0 0 0]\n",
" [ 0 0 0 20 208 205 224 219 201 200 202 202 201 201 199 198 199 199 197 183 195 210 191 189 11 0 0 0]\n",
" [ 0 0 0 138 223 201 218 229 216 202 202 200 200 197 197 199 197 194 186 178 214 205 180 193 84 0 0 0]\n",
" [ 0 0 0 104 181 212 234 254 219 208 204 201 201 199 199 199 197 197 192 191 250 220 199 197 141 0 0 0]\n",
" [ 0 0 0 0 0 40 131 193 219 207 205 202 202 199 199 199 193 197 188 200 174 111 56 15 0 0 0 0]\n",
" [ 0 0 0 0 0 0 0 2 248 208 202 199 200 197 197 200 194 187 192 186 0 0 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 2 0 0 228 217 199 200 201 202 198 198 203 188 200 162 0 0 2 3 1 0 0 0]\n",
" [ 0 0 0 0 0 0 0 0 200 218 203 200 198 201 199 197 203 188 203 136 0 0 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 0 0 0 181 220 202 200 200 201 200 195 200 191 202 85 0 1 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 0 0 0 168 220 200 200 201 201 199 198 195 193 198 82 0 1 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 0 0 0 157 220 199 200 199 199 195 200 191 194 199 106 0 7 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 0 0 0 165 217 199 200 200 199 194 199 192 193 203 109 0 1 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 1 0 0 175 210 200 200 200 200 192 198 195 188 208 125 0 0 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 2 0 0 197 205 201 199 197 194 192 198 195 186 205 134 0 0 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 4 0 16 206 201 201 199 197 194 191 199 197 191 199 160 0 0 0 0 0 0 0 0]\n",
" [ 0 0 0 0 0 5 0 31 209 195 200 198 197 194 184 194 193 195 192 167 0 0 2 0 0 0 0 0]\n",
" [ 0 0 0 0 0 5 0 32 207 200 197 197 197 197 183 197 195 195 190 184 5 0 3 0 0 0 0 0]\n",
" [ 0 0 0 0 0 7 0 68 210 197 197 194 198 199 187 199 199 195 190 190 20 0 4 0 0 0 0 0]\n",
" [ 0 0 0 0 0 7 0 89 210 194 199 195 199 203 195 200 200 197 192 190 22 0 4 0 0 0 0 0]\n",
" [ 0 0 0 0 0 7 0 116 207 193 195 191 195 194 188 190 197 197 190 192 47 0 5 0 0 0 0 0]\n",
" [ 0 0 0 0 0 5 0 172 225 207 207 225 225 225 224 225 229 211 206 210 88 0 6 0 0 0 0 0]\n",
" [ 0 0 0 0 0 2 0 48 94 103 119 123 132 128 122 119 114 97 88 102 27 0 4 0 0 0 0 0]]\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CxfNdPU3NQge"
},
"source": [
"### Preparación de los datos\n",
"\n",
"Notarás que todos los valores están entre 0 y 255. Si estamos entrenando una red neuronal, por varias razones es más fácil si transformamos los valores para tratar todos con valores entre 0 y 1. Este proceso se llama **normalización**."
]
},
{
"cell_type": "code",
"metadata": {
"id": "vWoPQWCGNdnB"
},
"source": [
"training_images = training_images / 255.0\n",
"test_images = test_images / 255.0"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "32Dx5PzgJ3gK",
"outputId": "6ee1bf82-4e8a-4b19-f7f5-78afffb52346"
},
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"np.set_printoptions(linewidth=200)\n",
"\n",
"\n",
"# Set index of image to be seen\n",
"img_index = 3000 # 6000 -1\n",
"\n",
"# Plot image\n",
"plt.imshow(training_images[img_index], cmap='gray')\n",
"plt.axis(False)\n",
"\n",
"print(\"Label:\", training_labels[img_index])\n",
"print(\"Matrix:\", training_images[img_index])"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Label: 6\n",
"Matrix: [[0. 0. 0. 0. 0. 0. 0. 0. 0.00392157 0.00392157 0. 0. 0.47058824 0.51372549 0.35686275 0.57647059 0.11764706\n",
" 0. 0. 0.00392157 0.00392157 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0.00392157 0.01176471 0. 0. 0. 0. 0.98431373 0.78039216 0.6745098 0.76470588 0.59607843\n",
" 0. 0. 0. 0. 0.01176471 0.00392157 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.16862745 0.48627451 0.75686275 0.65098039 0.9372549 1. 0.84705882 0.6745098\n",
" 0.89411765 0.49411765 0.23921569 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0.37647059 0.65490196 0.60784314 0.62352941 0.67058824 0.69803922 0.82745098 0.84313725 0.82352941 0.76862745\n",
" 0.74117647 0.61960784 0.64313725 0.62352941 0.42352941 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0.3254902 0.61568627 0.51372549 0.45882353 0.47058824 0.58039216 0.58039216 0.56862745 0.69803922 0.62352941 0.68235294\n",
" 0.62745098 0.48235294 0.51764706 0.55686275 0.6745098 0.14901961 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0.62352941 0.50196078 0.4627451 0.47058824 0.47843137 0.43921569 0.36470588 0.48627451 0.63137255 0.42745098 0.50196078\n",
" 0.50196078 0.50588235 0.57254902 0.54117647 0.65490196 0.47843137 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0.67058824 0.52941176 0.47058824 0.44705882 0.4627451 0.46666667 0.41960784 0.49019608 0.48235294 0.45882353 0.48627451\n",
" 0.48627451 0.46666667 0.56862745 0.57647059 0.65098039 0.58039216 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.01568627 0.67058824 0.54117647 0.49411765 0.47058824 0.45882353 0.4627451 0.4 0.47843137 0.56862745 0.43529412 0.47058824\n",
" 0.47843137 0.47058824 0.59607843 0.60392157 0.60784314 0.66666667 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.12156863 0.66666667 0.50588235 0.54117647 0.49019608 0.44313725 0.41568627 0.40392157 0.4627451 0.5372549 0.42352941 0.52941176\n",
" 0.50980392 0.61960784 0.71372549 0.54117647 0.56078431 0.72941176 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.22745098 0.63921569 0.44705882 0.5372549 0.56078431 0.46666667 0.40392157 0.39215686 0.42745098 0.4627451 0.42745098 0.50588235\n",
" 0.5254902 0.6745098 0.70980392 0.51372549 0.53333333 0.74509804 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.29803922 0.62745098 0.44313725 0.55294118 0.58039216 0.50196078 0.43529412 0.39607843 0.45490196 0.5372549 0.43529412 0.51372549\n",
" 0.55686275 0.65490196 0.71764706 0.53333333 0.47058824 0.72941176 0.04705882 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.39215686 0.58039216 0.42352941 0.57647059 0.57647059 0.5254902 0.47058824 0.41176471 0.45490196 0.51372549 0.45490196 0.53333333\n",
" 0.5372549 0.64705882 0.75294118 0.5372549 0.44313725 0.73333333 0.11764706 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.44705882 0.56078431 0.42352941 0.61960784 0.57647059 0.50980392 0.49019608 0.41568627 0.44705882 0.47843137 0.46666667 0.50588235\n",
" 0.5254902 0.62745098 0.76862745 0.53333333 0.42745098 0.71372549 0.2 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.47058824 0.54901961 0.45882353 0.59215686 0.58039216 0.51372549 0.48627451 0.42745098 0.47058824 0.56078431 0.47058824 0.50980392\n",
" 0.50196078 0.62352941 0.7372549 0.43529412 0.42352941 0.69803922 0.25882353 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.49019608 0.50588235 0.50196078 0.43921569 0.56862745 0.54901961 0.47843137 0.44313725 0.4627451 0.5254902 0.45882353 0.51764706\n",
" 0.50196078 0.65098039 0.61568627 0.35686275 0.47058824 0.66666667 0.29019608 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.49411765 0.48235294 0.54117647 0.29019608 0.54901961 0.56078431 0.48627451 0.43529412 0.43921569 0.49411765 0.47058824 0.50980392\n",
" 0.50588235 0.68627451 0.47058824 0.34509804 0.50196078 0.64313725 0.35686275 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.48627451 0.48235294 0.61568627 0.17647059 0.56862745 0.56078431 0.48627451 0.44313725 0.46666667 0.58039216 0.47843137 0.51372549\n",
" 0.50588235 0.71764706 0.35294118 0.28627451 0.5372549 0.60784314 0.38823529 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.4627451 0.47843137 0.65490196 0. 0.56078431 0.58431373 0.47843137 0.43921569 0.4627451 0.5372549 0.45490196 0.51764706\n",
" 0.49411765 0.71764706 0.28627451 0.19607843 0.59607843 0.57647059 0.39607843 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.43529412 0.50196078 0.64313725 0. 0.55686275 0.59215686 0.47843137 0.43529412 0.45882353 0.51764706 0.47058824 0.53333333\n",
" 0.49019608 0.71372549 0.35294118 0.07058824 0.64313725 0.56862745 0.41960784 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.42745098 0.51764706 0.61960784 0. 0.57254902 0.58039216 0.47058824 0.42352941 0.49019608 0.61568627 0.47058824 0.53333333\n",
" 0.51372549 0.69019608 0.43529412 0. 0.64313725 0.56078431 0.4627451 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.43529412 0.55294118 0.54901961 0. 0.58039216 0.58431373 0.47058824 0.44705882 0.48235294 0.5372549 0.48627451 0.5372549\n",
" 0.51372549 0.67058824 0.52941176 0. 0.61568627 0.57647059 0.49019608 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.43529412 0.60392157 0.43529412 0. 0.60784314 0.58039216 0.4627451 0.45490196 0.48627451 0.56078431 0.48235294 0.51372549\n",
" 0.50588235 0.65490196 0.60784314 0. 0.50588235 0.61568627 0.50588235 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.42745098 0.60784314 0.34117647 0. 0.61568627 0.56862745 0.46666667 0.45882353 0.49411765 0.60392157 0.49411765 0.50980392\n",
" 0.48235294 0.63137255 0.62745098 0. 0.38039216 0.63921569 0.50980392 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.48627451 0.55686275 0.21176471 0. 0.58431373 0.55294118 0.46666667 0.46666667 0.48627451 0.53333333 0.50588235 0.49411765\n",
" 0.47058824 0.6 0.68627451 0. 0.29803922 0.56862745 0.5372549 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.53333333 0.59215686 0.18431373 0. 0.58431373 0.5372549 0.46666667 0.4627451 0.49411765 0.56078431 0.51764706 0.50980392\n",
" 0.48235294 0.6 0.6745098 0. 0.25882353 0.58039216 0.60392157 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0.42745098 0.68235294 0.18823529 0. 0.60392157 0.54117647 0.46666667 0.45882353 0.48627451 0.54117647 0.50980392 0.50588235\n",
" 0.49019608 0.62352941 0.65490196 0. 0.22745098 0.68235294 0.50196078 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.33333333 0.71372549 0.57647059 0.53333333 0.56078431 0.61960784 0.57254902 0.58039216\n",
" 0.6 0.78039216 0.2745098 0. 0. 0. 0. 0. 0. 0. 0. ]\n",
" [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.10196078 0.21176471 0.28235294 0.3254902 0.37647059 0.33333333 0.31372549\n",
" 0.23921569 0.05490196 0. 0. 0. 0. 0. 0. 0. 0. 0. ]]\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6QLVhw7SOCd8",
"outputId": "93e51a9a-40e0-4db1-abbb-4e0ec914436e"
},
"source": [
"training_images[0].shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(28, 28)"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bTaT1RjyNjqV"
},
"source": [
"### Creación del modelo\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "g-myY9JWNvtY"
},
"source": [
"model = tf.keras.models.Sequential([\n",
" tf.keras.layers.Flatten(), \n",
" tf.keras.layers.Dense(256, activation=tf.nn.relu), \n",
" tf.keras.layers.Dense(128, activation=tf.nn.relu), \n",
" tf.keras.layers.Dense(64, activation=tf.nn.relu), \n",
" tf.keras.layers.Dense(10, activation=tf.nn.softmax)\n",
"])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "dwkxtrHdNvHg"
},
"source": [
"### Entrenamiento del modelo"
]
},
{
"cell_type": "code",
"metadata": {
"id": "F9LHH0f6N5Hi"
},
"source": [
"model.compile(\n",
" optimizer=tf.optimizers.Adam(),\n",
" loss='sparse_categorical_crossentropy',\n",
" metrics=['accuracy']\n",
")"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ybq9AzJiN8ZV",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e80f2b1b-c31b-41e8-9260-a609571af555"
},
"source": [
"model.fit(training_images, training_labels, epochs=15)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.4841 - accuracy: 0.8261\n",
"Epoch 2/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.3620 - accuracy: 0.8674\n",
"Epoch 3/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.3276 - accuracy: 0.8789\n",
"Epoch 4/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.3031 - accuracy: 0.8876\n",
"Epoch 5/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2869 - accuracy: 0.8932\n",
"Epoch 6/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2718 - accuracy: 0.8989\n",
"Epoch 7/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2604 - accuracy: 0.9025\n",
"Epoch 8/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2474 - accuracy: 0.9076\n",
"Epoch 9/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2387 - accuracy: 0.9092\n",
"Epoch 10/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2292 - accuracy: 0.9131\n",
"Epoch 11/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2219 - accuracy: 0.9151\n",
"Epoch 12/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2126 - accuracy: 0.9193\n",
"Epoch 13/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2056 - accuracy: 0.9211\n",
"Epoch 14/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.2023 - accuracy: 0.9233\n",
"Epoch 15/15\n",
"1875/1875 [==============================] - 3s 2ms/step - loss: 0.1940 - accuracy: 0.9257\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<tensorflow.python.keras.callbacks.History at 0x7f81beae5bd0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 33
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cH9mfZMTN8_H"
},
"source": [
"### Evaluación del modelo"
]
},
{
"cell_type": "code",
"metadata": {
"id": "rHCV5BrAN-pq",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "c7e47232-b522-4ef3-fc32-d1954d7d76cc"
},
"source": [
"model.evaluate(test_images, test_labels)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"313/313 [==============================] - 1s 2ms/step - loss: 0.3884 - accuracy: 0.8792\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[0.3883811831474304, 0.8791999816894531]"
]
},
"metadata": {
"tags": []
},
"execution_count": 34
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "w-hQX4NNOd_D"
},
"source": [
"### Predicción\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "GaDFuXyROfZY",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
},
"outputId": "9ee55f05-1703-413f-e1f7-22ed939b3b89"
},
"source": [
"import random\n",
"\n",
"test_index = random.randint(0, 10000 - 1)\n",
"\n",
"plt.imshow(test_images[test_index], cmap='viridis')\n",
"plt.axis(False)\n",
"\n",
"print(\"Label:\", test_labels[test_index])\n",
"input_image = np.reshape(test_images[test_index], (1, 784))\n",
"prediction = model.predict(np.expand_dims(input_image, axis=-1))\n",
"print(\"Prediction:\", np.argmax(prediction))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"Label: 7\n",
"Prediction: 7\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "RHA0nk24QEVz",
"outputId": "9d8d9eba-9277-4f90-9892-a2b6da5eaf79"
},
"source": [
"prediction"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[3.2021964e-01, 5.1770403e-06, 6.2667266e-03, 4.3357564e-03, 7.5934454e-06, 1.5508351e-05, 6.6891927e-01, 7.4771127e-11, 2.3000537e-04, 2.8293229e-07]], dtype=float32)"
]
},
"metadata": {
"tags": []
},
"execution_count": 27
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment