Pytorch's Dataloader

Pytorch's Dataloader
Dataloader de Pytorch es una característica útil que mantiene sus datos organizados y simplifica su tubería de aprendizaje automático. Nos permite iterar los datos, administrar lotes y barajar las muestras para evitar el sobreajuste. Revisaremos la implementación de dataLoader en Pytorch en este artículo. Antes de eso, pasaremos por las terminologías básicas que usaremos al implementar el cargador de datos. Luego comenzaremos con el conjunto de datos Mnist de moda incluido con Pytorch. Más tarde, utilizaremos dataLoader con nuestro conjunto de datos personalizado.

¿Qué es pytorch??

Pytorch es un marco de aprendizaje profundo de código abierto para construir arquitecturas de red y otras técnicas de alto nivel como RNN, CNN y LSTM. Es utilizado por investigadores, empresas y comunidades de ML y AI.

El grupo de investigación de inteligencia artificial de Facebook es principalmente responsable de su desarrollo.

¿Qué es Tensor (enfoque basado en matemáticas)?

Ejercer una fuerza sobre una superficie y ver cómo se desvía en diferentes direcciones. Es posible que anticipe que se mueva en la misma dirección que la fuerza, pero esto no siempre sucede; La razón de esto es que el material no es uniforme en todas las direcciones; puede tener alguna estructura, como un cristal o capas. Una fuerza, que es un vector, es su punto de partida. (Las direcciones X, Y y Z tienen tres componentes.) Recibe un vector de deflexión (movimiento en x, y y z). La fuerza, sin embargo, está en la dirección inversa desde el movimiento! Fingimos que la respuesta es proporcional a la fuerza, lo que significa duplicar la fuerza dos veces el movimiento. Esto se llama una "reacción lineal."

¿Cómo puedes poner todo esto en términos matemáticos?? Con un tensor, por supuesto. Considere que un tensor es un instrumento matemático que toma un vector (como la fuerza) y devuelve un nuevo vector (el movimiento). Los tensores solo se requieren cuando los dos vectores apuntan en direcciones opuestas.

Iteraciones, lotes, epocs. ¿Qué son en términos de redes neuronales??

El número de iteraciones (denotado por norte Aquí) es el número de veces que un lote de instancias de entrenamiento estima el gradiente y actualiza los parámetros de la red neuronal.

El tamaño del lote B se refiere a cuántas instancias de capacitación se emplean en una sola iteración. Esto generalmente se usa cuando el número de instancias de entrenamiento es bastante grande, y generalmente es efectivo dividir todos los datos en mini lotes. Cada lote tiene el tamaño: 1< B < N.

Para usar los datos de capacitación completos una vez, se necesita norte (norte/B) iteraciones. Esto es lo que es una época. Entonces (norte/B)*mi, dónde mi es el número de épocas, es el número total de veces que se cambian los parámetros.

Hay tres tipos de descenso de gradiente. Hay una compensación entre ellos, ya que se puede dar una buena precisión, pero es lento. Por otro lado, uno es más rápido, pero no garantiza una buena precisión:

N = b, una época equivale a una iteración en modo por lotes.

Modo de mini lotes: 1 < B < N, with N/B iterations per epoch.

B = 1, una época toma n iteraciones en el modelo estocástico de descenso de gradiente.

Implementación de dataLoader en el conjunto de datos MNIST de moda

Cargando el conjunto de datos de la moda de Pytorch

Fashion-Mnist es un conjunto de datos de imágenes que incluye 60,000 capacitación y 10,000 instancias de prueba. Cada ejemplo incluye una imagen en escala de grises de 28 x 28 con una etiqueta de una de las diez categorías. A continuación se presentan algunos parámetros que satisface al cargar el conjunto de datos.

raíz: Este es el directorio en el que se guarda el conjunto de datos.

tren: indica que los datos entrenados o probados deben cargarse.

descargar: Si los datos no están disponibles en Root, se descarga a través de Internet.

transformar y target_transform: Estos parámetros especifican la característica y las transformaciones de la etiqueta.

antorcha de importación
toldio.tensiones.conjunto de datos de dataMport
fromTorchVisionImport DataSets
vecino.transformsimportTotensor
importmatplotlib.pyplotasplt
Train = conjuntos de datos.FashionMnist (
root = "datos",
tren = verdadero,
Descargar = True,
transform = totensor ()
)
Test = DataSets.FashionMnist (
root = "datos",
tren = falso,
Descargar = True,
transform = totensor ()
)

Costumbre Conjunto de datos de sus archivos

importos
importar pandas como PD
de la visión de antorchas.io impertread_image
# Crear clase para el conjunto de datos personalizado
classCustomDataSet (conjunto de datos):
# Inicializar el conjunto de datos
def__init __ (self, anotaciones, img_dir, trans = none, target_trans = none):
ser.Etiquetas = PD.Read_csv (anotaciones)
ser.img_dir = img_dir
ser.trans = trans
ser.Target_trans = Target_trans
# función para devolver la longitud de los datos
def__len __ (self):
Returnlen (yo.etiquetas)
# función para obtener una muestra en el índice dado
Def__getItem __ (self, índice):
ruta = OS.camino.Únete (a uno mismo.img_dir, yo.etiquetas.Iloc [índice, 0])
img = read_image (ruta)
etiqueta = self.etiquetas.ILOC [índice, 1]
en sí mismo.trans:
img = yo.trans (img)
en sí mismo.Target_trans:
etiqueta = self.Target_trans (etiqueta)
returnimg, etiqueta

En el código anterior, vemos tres métodos importantes:

__en eso__: Esta función se llama cuando se crea el objeto de conjunto de datos. Ambas transformaciones, así como el directorio que contiene las imágenes y el archivo de anotaciones, se configuran.

__len__: Esta función le devuelve la longitud del conjunto de datos o el número de muestras en el conjunto de datos.

__obtiene el objeto__: Este método nos da la muestra presente en un índice.

Capacitación con dataLoader

Almacenar los datos en los cargadores de datos. Los cargadores de datos son iterables que le permiten pasar las muestras una a la vez al momento del entrenamiento e incluso barajar los datos después de que se procesen todos los lotes.

de la antorcha.tensiones.Data Import Dataloader
Train_Loader = DataLoader (Train, Batch_Size = 32, Shuffle = True)
test_loader = dataLoader (test, batch_size = 32, shuffle = true)

Iterar el dataloader

# Mostrar imagen y etiqueta.
Train_Feature, Train_Labels = Next (iter (Train_Loader))
Print (F "La forma de las características del lote actual es Train_Features.tamaño()")
Impresión (F "La forma de las etiquetas de la forma de lote actual es Train_Labels.tamaño()")
img = Train_Feature [0].estrujar()
etiqueta = Train_Labels [0]
PLT.Imshow (img, cmap = "gris")
PLT.espectáculo()
imprimir (f "etiqueta: etiqueta")

Producción

La forma de las características del lote actual es la antorcha.Tamaño ([32, 1, 28, 28])

La forma de las etiquetas de la forma de lote actual es la antorcha.Tamaño ([32])

Etiqueta: 5

Cada iteración en el código anterior devuelve un lote de características de capacitación y etiquetas de entrenamiento para cada iteración. Para evitar el sobreajuste, los datos se barajan después de que todos los lotes se hayan procesado.

Implementación del cargador de datos en un conjunto de datos personalizado

# Importar las bibliotecas que utilizaremos
antorcha de importación
toldio.tensiones.conjunto de datos de dataMport
toldio.tensiones.DataImportDataloader
# Definición de la clase de conjunto de datos
classDataSets (conjunto de datos):
# Inicializar el conjunto de datos aquí
def__init __ (yo):
Numbers = list (rango (0, 20, 1))
ser.datos = números
# Obtenga la longitud del conjunto de datos aquí
def__len __ (self):
Returnlen (yo.datos)
# Obtenga el artículo en un índice
Def__getItem __ (self, índice):
devolverse.Datos [índice]
# crear un objeto de la clase data_set
DataSet = DataSets ()
# Implementar el cargador de datos en el conjunto de datos y especificar los parámetros
dataloader = dataLoader (DataSet, Batch_Size = 5, Shuffle = True)
Fori, lote en enumerado (dataLoader):
Imprimir (i, lote)

Producción

0 tensor ([0, 4, 9, 15, 14])
1 tensor ([11, 16, 12, 3, 10])
2 tensor ([6, 8, 2, 17, 1])
3 tensor ([7, 18, 5, 13, 19])

Conclusión

Revisamos la implementación del dataLoader de Pytorch para administrar la capacitación de nuestros datos. Ahora nos damos cuenta de la facilidad con la que podemos administrar los lotes, barajar, iteración de nuestros conjuntos de datos utilizando dataLoader. Esto ayuda en un mejor análisis de nuestros modelos y, en última instancia, los mejora.