Interesante el formato Base64, información que me sirvió en el siguiente enlace:
https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-base64-encode-and-decode-from-command-line/
Cómo utilizar TensorFlow 2.0 con Python
Redes neuronales con TensorFlow
Introducción a TensorFlow 2.0
Manejo y preprocesamiento de datos para redes neuronales
Uso de data pipelines
Cómo cargar bases de datos JSON
Cargar bases de datos CSV y BASE 64
Preprocesamiento y limpieza de datos
Keras datasets
Datasets generators
Aprende a buscar bases de datos para deep learning
Cómo distribuir los datos
Crear la red neural, definir capas, compilar, entrenar, evaluar y predicciones
Optimización de precisión de modelos
Métodos de regularización: overfitting y underfitting
Recomendaciones prácticas para ajustar un modelo
Métricas para medir la eficiencia de un modelo: callback
Monitoreo del entrenamiento en tiempo real: early stopping y patience
KerasTuner: construyendo el modelo
KerasTuner: buscando la mejor configuración para tu modelo
Almacenamiento y carga de modelos
Almacenamiento y carga de modelos: pesos y arquitectura
Criterios para almacenar los modelos
Fundamentos de aprendizaje por transferencia
Introducción al aprendizaje por transferencia
Cuándo utilizar aprendizaje por transferencia
Carga de sistemas pre-entrenados en Keras
API funcional de Keras
Uso sistemas pre-entrenados de TensorFlow Hub
Resultados de entrenamiento
Introducción a variables relevantes del TensorBoard
Análisis y publicación de resultados del entrenamiento
Introducción al despliegue de modelos en producción
Siguientes pasos con deep learning
Crea una cuenta o inicia sesión
¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera
Adquiere por un año todos los cursos, escuelas y certificados por un precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Para esta ocasión cargaremos datos almacenados en formatos CSV (Comma Separated Values) y BASE64.
Para empezar, es de vital importancia reconocer los datos con los que estamos trabajando, en esta ocasión revisaremos los datos de sign_mnist_base64 que tendrá dentro un JSON con una estructura de llave/valor con la codificación de la imagen.
Para el primero parte manipularemos imágenes en BASE64, por lo que importaremos este módulo
``` {code-block} python
import base64
Definimos en la variable url la ubicación del archivo a extraer la información.
url = "/tmp/databasesLoadData/sign_mnist_base64/data.json"
Cargamos los datos del JSON a memoria.
with open(url) as f:
data = json.load(f)
Cargaremos los datos en una variable, determinamos la locación a guardar la imagen y abrimos un archivo con el seudónimo de file_to_save, decodificaremos el BASE64 y lo guardaremos en un buffer, finalmente lo guardaremos en esta locación y con esto quedará escrito en disco.
base64_img_bytes = data['b'].encode('utf-8')
path_img = "/tmp/decoded_image.png"
with open(path_img, "wb") as file_to_save:
decoded_image_data = base64.decodebytes(base64_img_bytes)
file_to_save.write(decoded_image_data)
Podemos consumir esta imagen abriéndola con PIL.
img = Image.open(path_img)
img
Las imágenes son arrays anidados con diferentes canales (cada canal representando un color diferente), en esta ocasión el único canal es de la escala de grises, donde cada pixel puede encontrarse entre los valores de 0 - 255, siendo 0 negro y 255 blanco.
Esta interpretación matricial nos permite guardar imágenes en estructuras de datos como vectores, donde diferentes formatos son directamente compatibles con esta abstracción.
Para esta ocasión haremos uso de pandas para el manejo de CSV, además de otras librerÃas para la manipulación e interpretación de datos.
import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
from PIL import Image
import seaborn as sns
Leeremos los archivos CSV con la función read_csv de pandas en las locaciones de los archivos de entrenamiento y prueba.
train = pd.read_csv("/tmp/databasesLoadData/sign_mnist_train/sign_mnist_train.csv")
test = pd.read_csv("/tmp/databasesLoadData/sign_mnist_test/sign_mnist_test.csv")
Podemos analizar los primeros datos del dataset con el método head que nos traerá los primeros 5 registros, notaremos que son 785 elementos, donde el primero pertenece a la etiqueta de la imagen y el resto a cada pixel (28x28=784).
train.head()
5 rows × 785 columns
Tenemos acceso a las dimensiones del dataset con el atributo shape, que nos retornará 27455 imágenes de 28x28 con etiqueta.
train.shape
(27455, 785)
Para arreglar la dimensionalidad, separaremos la etiqueta de los datos, por lo que aislaremos los valores en una nueva variable.
labels = train['label'].values
A su vez, eliminaremos esta columna del dataset original.
train.drop('label', axis = 1, inplace = True)
train.head()
5 rows × 784 columns
Para almacenar las imágenes en memoria las cargaremos desde el dataframe (únicamente tomando los atributos de values), si verificamos las dimensiones tendremos un array de numpy de 27455x784 que podremos graficar desde matplotlib.
images = train.values
images.shape
(27455, 784)
plt.imshow(images[1].reshape(28,28))
Con esto hemos cargado imágenes a partir de formato BASE64 y CSV a memoria para ser interpretadas como tensores.
Contribución creada por Sebastián Franco Gómez.
Aportes 2
Preguntas 3
Interesante el formato Base64, información que me sirvió en el siguiente enlace:
https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-base64-encode-and-decode-from-command-line/
Leer la base de datos en JSON con contenido BASE64
#
import json
import base64
from PIL import Image
url = "/tmp/databasesLoadData/sign_mnist_base64/data.json"
with open(url) as f:
data = json.load(f)
base64_img_bytes = data["b"].encode("utf-8") #
path_img = "/tmp/decoded_image.png"
with open(path_img, "wb") as file_to_save:
decoded_image_data = base64.decodebytes(base64_img_bytes)
file_to_save.write(decoded_image_data)
img = Image.open(path_img)
img
Leer la base de datos en CSV
#
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from PIL import Image
train = pd.read_csv("/tmp/databasesLoadData/sign_mnist_train/sign_mnist_train.csv")
test = pd.read_csv("/tmp/databasesLoadData/sign_mnist_test/sign_mnist_test.csv")
print(train.head())
print(train.shape)
labels = train['label'].values
train.drop('label', axis = 1, inplace = True)
print(train.head())
images = train.values
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.