{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Aplicando Redes Neuronales Convolucionales sobre MNIST\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"ExecuteTime": {
"end_time": "2021-01-08T09:44:01.224951Z",
"start_time": "2021-01-08T09:44:01.210414Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"UsageError: Line magic function `%tensorflow_version` not found.\n"
]
}
],
"source": [
"%tensorflow_version 2.x\n",
"import tensorflow as tf\n",
"device_name = tf.test.gpu_device_name()\n",
"if device_name != '/device:GPU:0':\n",
" raise SystemError('GPU device not found')\n",
"print('Found GPU at: {}'.format(device_name))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Redes Neuronales Convolucionales (CNN)\n",
"\n",
"Una **imagen** es básicamente una colección de **puntos o píxeles**. Un píxel puede ser identificado con sus componentes RGB. Por lo tanto los datos de entrada de una imagen son un array 2D de píxeles, donde cada posición representa un color. \n",
"\n",
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tipos de Capas\n",
"\n",
"1. Convolutional layers: Aplican filtros a la imagen para identificar características\n",
"2. Pooling layers: Combinan características de la caoa convolucional, reduciendo las mismas.\n",
"3. Flatten layers: Convierte una capa N-dimensional a una capa 1D\n",
"4. Capa Clasificación: La capa final, que predice los resultados"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## MNIST\n",
"\n",
"Dataset con 60000 ejemplos de training y 10000 de test. Cargamos los datos:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2021-01-08T09:44:01.228696Z",
"start_time": "2021-01-08T09:44:01.218Z"
}
},
"outputs": [],
"source": [
"from tensorflow.keras.datasets import mnist\n",
"\n",
"\n",
"\n",
"(x_train, y_train), (x_test, y_test) = mnist.load_data()\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Podemos visualizar alguna de las imágenes"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ExecuteTime": {
"end_time": "2021-01-08T09:44:01.230752Z",
"start_time": "2021-01-08T09:44:01.224Z"
}
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"ExecuteTime": {
"end_time": "2021-01-08T09:44:01.621183Z",
"start_time": "2021-01-08T09:44:01.332679Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6000000\n",
"[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
" [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"