Como baixar o conjunto de dados MNIST e usá-lo para aprendizado de máquina
O conjunto de dados MNIST é um grande banco de dados de dígitos manuscritos que é comumente usado para treinar vários sistemas de processamento de imagem e modelos de aprendizado de máquina. Ele contém 60.000 imagens de treinamento e 10.000 imagens de teste de dígitos de 0 a 9, cada uma com um tamanho de 28x28 pixels. O conjunto de dados é amplamente utilizado como referência para avaliar o desempenho de diferentes algoritmos e técnicas em visão computacional e aprendizado profundo.
download mnist
Neste artigo, mostraremos como baixar o conjunto de dados MNIST em diferentes formatos, como carregar e plotar o conjunto de dados em Python e como treinar uma rede neural simples no conjunto de dados usando Keras. Ao final deste artigo, você terá um melhor entendimento do conjunto de dados MNIST e como usá-lo para seus próprios projetos de aprendizado de máquina.
O que é conjunto de dados MNIST e por que é útil?
Visão geral do conjunto de dados MNIST
O conjunto de dados MNIST foi criado em 1994 por Yann LeCun, Corinna Cortes e Christopher J.C. Burges como uma combinação de dois bancos de dados do NIST: Special Database 1 e Special Database 3. Special Database 1 e Special Database 3 consistem em dígitos escritos por alunos do ensino médio e funcionários do United States Census Bureau, respectivamente. Os criadores sentiram que, como o conjunto de dados de treinamento do NIST foi retirado de funcionários do American Census Bureau, enquanto o conjunto de dados de teste foi retirado de estudantes americanos do ensino médio, não era adequado para experimentos de aprendizado de máquina. Além disso, as imagens em preto e branco do NIST foram normalizadas para caber em uma caixa delimitadora de 28x28 pixels e suavizadas, o que introduziu níveis de tons de cinza.
O conjunto de dados MNIST tornou-se um dos conjuntos de dados mais populares no campo do aprendizado de máquina, especialmente para iniciantes que desejam aprender os fundamentos do processamento de imagens e redes neurais. O conjunto de dados é fácil de usar, tem um formato simples e um tamanho relativamente pequeno.O conjunto de dados também oferece um bom equilíbrio entre complexidade e simplicidade, pois os dígitos são fáceis de reconhecer, mas ainda apresentam algumas variações e ruídos. O conjunto de dados foi usado para testar vários métodos e técnicas, como máquinas de vetores de suporte, redes neurais convolucionais, redes adversárias generativas e muito mais.
Aplicativos de conjunto de dados MNIST
O conjunto de dados MNIST tem muitas aplicações em diferentes domínios e indústrias. Alguns exemplos são:
Reconhecimento de escrita: O conjunto de dados MNIST pode ser usado para treinar modelos que podem reconhecer dígitos ou caracteres manuscritos em documentos em papel, formulários, cheques, etc.
Reconhecimento óptico de caracteres (OCR): O conjunto de dados MNIST pode ser usado para treinar modelos que podem converter imagens digitalizadas ou arquivos PDF em texto editável.
Visão computacional: O conjunto de dados MNIST pode ser usado para treinar modelos que podem executar tarefas como segmentação de imagens, detecção de objetos, reconhecimento facial, etc.
Aprendizagem profunda: o conjunto de dados MNIST pode ser usado para treinar modelos que podem gerar imagens realistas, melhorar a qualidade da imagem, realizar transferência de estilo, etc.
Como baixar o conjunto de dados MNIST em diferentes formatos?
Baixe o conjunto de dados MNIST em formato binário
A fonte original do conjunto de dados MNIST é [aqui]( O conjunto de dados é armazenado em um formato binário proprietário que consiste em quatro arquivos:
train-labels-idx1-ubyte.gz: rótulos do conjunto de treinamento (9.991 bytes)
t10k-images-idx3-ubyte.gz: imagens do conjunto de teste (1.625.281 bytes)
t10k-labels-idx1-ubyte.gz: rótulos do conjunto de teste (4.454 bytes)
Para baixar o conjunto de dados MNIST em formato binário, você pode usar os seguintes comandos em um terminal:
mkdir mnist cd mnist wget wget wget wget gunzip *.gz
Isso criará uma pasta chamada mnist e baixará e descompactará os quatro arquivos nela. Cada arquivo tem um cabeçalho que descreve o número de imagens, o número de linhas e o número de colunas. O restante do arquivo contém os valores de pixel de cada imagem, armazenados como bytes não assinados. Cada pixel tem um valor entre 0 e 255, onde 0 é preto e 255 é branco.
Baixe o conjunto de dados MNIST no formato CSV
Se você preferir trabalhar com o conjunto de dados MNIST em um formato mais legível, você pode baixá-lo no formato CSV [aqui]( O conjunto de dados é armazenado em dois arquivos:
mnist_train.csv: conjunto de treinamento (53 MB)
mnist_test.csv: conjunto de teste (9 MB)
Para baixar o conjunto de dados MNIST no formato CSV, você pode usar os seguintes comandos em um terminal:
mkdir mnist_csv cd mnist_csv wget wget
Isso criará uma pasta chamada mnist_csv e baixará os dois arquivos nela. Cada arquivo tem uma linha por imagem e cada linha tem 785 colunas. A primeira coluna é o rótulo da imagem e o restante são os valores de pixel da imagem, armazenados como números inteiros entre 0 e 255.
Baixe o conjunto de dados MNIST no formato TensorFlow
Se você estiver usando o TensorFlow como sua estrutura de aprendizado de máquina, poderá baixar e carregar facilmente o conjunto de dados MNIST usando a biblioteca TensorFlow Datasets (TFDS). TFDS é uma coleção de conjuntos de dados prontos para uso que são compatíveis com o pipeline de dados do TensorFlow. O conjunto de dados MNIST é um dos conjuntos de dados disponíveis no TFDS.
Para baixar o conjunto de dados MNIST no formato TensorFlow, você pode usar os seguintes comandos em um script ou notebook Python:
import tensorflow as tf import tensorflow_datasets as tfds # Baixe e carregue o conjunto de dados MNIST como tf.data.Datasets train_ds, test_ds = tfds.load('mnist', split=['train', 'test'], shuffle_files=True) # Imprima algumas informações sobre o conjunto de dados print(train_ds) print(test_ds)
Isso fará o download e carregará o conjunto de dados MNIST como dois objetos tf.data.Datasets: train_ds e test_ds. Cada objeto é um iterável de pares (image, label), onde image é um tf.Tensor de shape (28, 28, 1) e dtype tf.uint8, e label é um tf.Tensor de shape () e dtype tf.int64. Você pode usar esses objetos para alimentar seu modelo do TensorFlow ou realizar outras operações neles.
Como carregar e plotar o conjunto de dados MNIST em Python?
Carregar conjunto de dados MNIST usando Pandas
Se você baixou o conjunto de dados MNIST no formato CSV, pode usar o Pandas para carregá-lo em um DataFrame. Pandas é uma biblioteca popular para análise e manipulação de dados em Python. Um DataFrame é uma estrutura de dados tabular bidimensional que pode armazenar vários tipos de dados.
Para carregar o conjunto de dados MNIST usando Pandas, você pode usar os seguintes comandos em um script ou notebook Python:
import pandas as pd # Carrega o conjunto de treinamento como um DataFrame train_df = pd.read_csv('mnist_train.csv', header=None) # Carrega o conjunto de teste como um DataFrame test_df = pd.read_csv('mnist_test.csv', header=None) # Imprime algumas informações sobre os DataFrames print(train_df.shape) print(test_df.shape) print(train_ df.head()) print(test_df.head())
Isso carregará o conjunto de dados MNIST como dois DataFrames: train_df e test_df. Cada DataFrame possui 785 colunas, onde a primeira coluna é o rótulo e o restante são os valores de pixel. Cada DataFrame possui 60.000 e 10.000 linhas, respectivamente, correspondendo ao número de imagens nos conjuntos de treinamento e teste. Você pode usar o método head() para ver as cinco primeiras linhas de cada DataFrame.
Carregar conjunto de dados MNIST usando conjuntos de dados do TensorFlow
Se você baixou o conjunto de dados MNIST no formato TensorFlow, pode usar conjuntos de dados TensorFlow para carregá-lo em objetos tf.data.Datasets. TensorFlow Datasets é uma biblioteca que fornece uma coleção de conjuntos de dados prontos para uso compatíveis com o pipeline de dados do TensorFlow.Um tf.data.Dataset é um iterável de elementos, onde cada elemento pode ser uma tupla, um dicionário, um tensor ou uma estrutura aninhada desses tipos.
Para carregar o conjunto de dados MNIST usando conjuntos de dados do TensorFlow, você pode usar os seguintes comandos em um script ou notebook Python:
import tensorflow as tf import tensorflow_datasets as tfds # Baixe e carregue o conjunto de dados MNIST como tf.data.Datasets train_ds, test_ds = tfds.load('mnist', split=['train', 'test'], shuffle_files=True) # Imprima algumas informações sobre os conjuntos de dados print(train_ds) print(test_ds)
Isso fará o download e carregará o conjunto de dados MNIST como dois objetos tf.data.Datasets: train_ds e test_ds. Cada objeto é um iterável de pares (image, label), onde image é um tf.Tensor de shape (28, 28, 1) e dtype tf.uint8, e label é um tf.Tensor de shape () e dtype tf.int64. Você pode usar esses objetos para alimentar seu modelo do TensorFlow ou realizar outras operações neles.
Traçar imagens MNIST usando Matplotlib
Matplotlib é uma biblioteca para criar e exibir vários tipos de plotagens e gráficos em Python. Você pode usar o Matplotlib para plotar as imagens MNIST e ver como elas se parecem. Para plotar as imagens MNIST usando o Matplotlib, você pode usar os seguintes comandos em um script ou notebook Python:
import matplotlib.pyplot as plt # Plote 25 imagens aleatórias do conjunto de treinamento plt.figure(figsize=(10, 10)) for i in range(25): # Selecione uma imagem aleatória e um rótulo da imagem do conjunto de treinamento, label = train_df.sample(1).values[0][1:], train_df.sample(1).values[0][0] # Reformule a imagem em um array de 28x28 image = image.resha pe(28, 28) # Plota a imagem em uma grade 5x5 plt.subplot(5, 5, i+1) plt.imshow(image, cmap='gray') plt.title(f'Label: label') plt.tight_layout() plt.show()
Isso plotará 25 imagens aleatórias do conjunto de treinamento em uma grade 5x5, junto com seus rótulos. Você pode ver que as imagens são em tons de cinza e têm diferentes estilos e orientações de caligrafia.Você também pode plotar imagens do conjunto de teste substituindo train_df por test_df no código.
Como treinar uma rede neural no conjunto de dados MNIST usando Keras?
Pré-processar dados MNIST para rede neural
Keras é uma API de alto nível para construir e treinar redes neurais no TensorFlow. Você pode usar Keras para criar uma rede neural simples que pode classificar as imagens MNIST em seus dígitos correspondentes. Antes de poder treinar sua rede neural, você precisa pré-processar os dados MNIST para torná-los adequados para entrada e saída da rede neural.
Para pré-processar os dados MNIST para rede neural, você pode usar os seguintes comandos em um script ou notebook Python:
import numpy as np # Converter DataFrames em arrays numpy X_train = train_df.values[:, 1:] y_train = train_df.values[:, 0] X_test = test_df.values[:, 1:] y_test = test_df.values[:, 0] # Normalizar valores de pixel para estar entre 0 e 1 X_train = X_train / 255.0 X_test = X_ test / 255.0 # Reshape imagens para ter uma dimensão extra para canais X_train = X_train.reshape(-1, 28, 28, 1) X_test = X_test.reshape(-1, 28, 28, 1) # One-hot encode labels para ter 10 classes y_train = np.eye(10)[y_train] y_test = np.eye(10)[y_test]
Isso converterá os DataFrames em arrays numpy, normalizará os valores de pixel entre 0 e 1, remodelará as imagens para ter uma dimensão extra para canais (já que estamos usando imagens em tons de cinza) e um -hot codificará os rótulos para ter 10 classes (já que temos 10 dígitos). Isso deixará os dados prontos para alimentar a rede neural.
Definir e compilar modelo de rede neural
Para definir e compilar um modelo de rede neural usando Keras, você pode usar os seguintes comandos em um script ou notebook Python:
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense # Definir um modelo de modelo sequencial = Sequential() # Adicionar uma camada convolucional com 32 filtros, tamanho de kernel 3x3, ativação ReLU e formato de entrada de (28, 28, 1) model.add(Conv2D(32, (3, 3), activation='relu', input_shape =(28, 28, 1))) # Adicione uma camada de pooling máximo com modelo de tamanho de pool 2x2.add(MaxPooling2D((2, 2))) # Adicione uma camada plana para converter os mapas de recursos 2D em vetores de recursos 1D model.add(Flatten()) # Adicione uma camada densa com 128 unidades e modelo de ativação ReLU.add(Dense(128, activation='relu')) # Adicione uma camada densa com 10 unidades e ativação softmax para a saída model.add(Dense(10, activation='softmax')) # Compile o modelo com perda categórica crossentropy, otimizador adam e métrica de precisão model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy']) # Imprima o resumo do modelo model.summary()
Isso definirá e compilará um modelo de rede neural simples que consiste em uma camada convolucional, uma camada de agrupamento máximo, uma camada plana e duas camadas densas. A camada convolucional extrairá recursos das imagens usando 32 filtros com tamanho de kernel 3x3 e ativação ReLU. A camada de agrupamento máximo reduzirá as dimensões espaciais dos mapas de recursos, obtendo o valor máximo em cada região 2x2. A camada plana converterá os mapas de recursos 2D em vetores de recursos 1D que podem ser alimentados nas camadas densas. A primeira camada densa terá 128 unidades e ativação ReLU, e a segunda camada densa terá 10 unidades e ativação softmax para saída. A ativação do softmax garantirá que os valores de saída somam um e representam as probabilidades de cada classe.O modelo será compilado com perda categórica crossentropy, que mede a diferença entre os rótulos verdadeiros e os rótulos previstos, otimizador adam, que é um algoritmo de gradiente descendente adaptativo que ajusta a taxa de aprendizado com base nos gradientes, e métrica de precisão, que mede a fração de imagens classificadas corretamente.
Treine e avalie o modelo de rede neural
Para treinar e avaliar o modelo de rede neural usando Keras, você pode usar os seguintes comandos em um script ou notebook Python:
# Treine o modelo para 10 épocas com tamanho de lote de 32 e divisão de validação de 0,2 history = model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0,2) # Plote as curvas de precisão e perda de treinamento e validação plt.figure(figsize=(12, 6)) plt.subplot(1, 2, 1) plt.plot(history.his tory['precisão'], label='Precisão de treinamento') plt.plot(history.history['val_accuracy'], label='Precisão de validação') plt.title('Precisão') plt.legend() plt.subplot(1, 2, 2) plt.plot(history.history['loss'], label='Perda de treinamento') plt.plot(history.history['val _loss'], label='Validation Loss') plt.title('Loss') plt.legend() plt.show() # Avalie o modelo no conjunto de teste test_loss, test_acc = model.evaluate(X_test, y_test) print(f'Test Loss: test_loss:.4f') print(f'Test Accuracy: test_acc:.4f')
Isso treinará o modelo por 10 épocas com tamanho de lote de 32 e divisão de validação de 0,2. Isso significa que o modelo usará 32 imagens por vez para atualizar seus pesos e usar 20% dos dados de treinamento como dados de validação para monitorar seu desempenho durante o treinamento. O modelo retornará um objeto de histórico que contém os valores de precisão e perda para cada época para os conjuntos de treinamento e validação. Você pode usar o Matplotlib para plotar esses valores e ver como o modelo aprende com o tempo. Você pode ver que o modelo atinge uma alta precisão de mais de 98% nos conjuntos de treinamento e validação após 10 épocas e tem uma baixa perda de menos de 0,1.Você também pode avaliar o modelo no conjunto de teste e ver que ele atinge uma precisão semelhante de mais de 98% e uma baixa perda de menos de 0,1. Isso significa que o modelo generaliza bem para dados não vistos e pode classificar novas imagens de dígitos manuscritos com alta confiança.
Conclusão
Neste artigo, aprendemos como baixar o conjunto de dados MNIST em diferentes formatos, como carregar e plotar o conjunto de dados MNIST em Python e como treinar uma rede neural simples no conjunto de dados MNIST usando Keras. Vimos que o conjunto de dados MNIST é um grande banco de dados de dígitos manuscritos que é amplamente utilizado para treinar e testar vários modelos de processamento de imagem e aprendizado de máquina. Também vimos que o conjunto de dados MNIST pode ser baixado nos formatos binário, CSV ou TensorFlow e pode ser carregado e plotado usando as bibliotecas Pandas, TensorFlow Datasets ou Matplotlib. Por fim, vimos que podemos usar o Keras para definir, compilar, treinar e avaliar um modelo de rede neural simples que pode atingir mais de 98% de precisão na classificação das imagens MNIST em seus dígitos correspondentes.
Esperamos que este artigo tenha ajudado você a aprender mais sobre o conjunto de dados MNIST e como usá-lo para seus próprios projetos de aprendizado de máquina. Se você tiver alguma dúvida ou feedback, sinta-se à vontade para deixar um comentário abaixo. Obrigado por ler!
perguntas frequentes
Qual é a diferença entre os conjuntos de dados MNIST e Fashion-MNIST?
Fashion-MNIST é um conjunto de dados de imagens em escala de cinza 28x28 de 10 categorias de moda, como camisetas, calças, vestidos, etc. Tem a mesma estrutura e tamanho do conjunto de dados MNIST, com 60.000 imagens de treinamento e 10.000 imagens de teste. O Fashion-MNIST foi criado como uma alternativa mais desafiadora ao conjunto de dados MNIST, pois os itens de moda são mais diversos e complexos do que os dígitos. Você pode baixar e usar o Fashion-MNIST da mesma forma que o MNIST.
Como posso melhorar a precisão do meu modelo de rede neural no conjunto de dados MNIST?
Há muitas maneiras de melhorar a precisão do seu modelo de rede neural no conjunto de dados MNIST, como:
Usando mais ou diferentes camadas, como dropout, normalização de lote ou conexões residuais.
Usando diferentes funções de ativação, como sigmoid, tanh ou LeakyReLU.
Usando diferentes otimizadores, como SGD, RMSprop ou Adamax.
Usando diferentes hiperparâmetros, como taxa de aprendizado, tamanho do lote ou número de épocas.
Usando técnicas de aumento de dados, como rotação, dimensionamento ou inversão.
Usando técnicas de regularização, como decaimento de peso ou parada antecipada.
Você pode experimentar diferentes combinações desses métodos e ver o que funciona melhor para o seu modelo.
Como posso visualizar os recursos aprendidos pelo meu modelo de rede neural no conjunto de dados MNIST?
Você pode visualizar os recursos aprendidos pelo seu modelo de rede neural no conjunto de dados MNIST usando métodos como:
Plotando os filtros ou kernels das camadas convolucionais.
Plotando os mapas de recursos ou ativações das camadas convolucionais.
Plotar os pesos ou vieses das camadas densas.
Plotando as incorporações ou projeções das camadas ocultas.
Plotando os gradientes ou mapas de saliência da camada de saída.
Você pode usar bibliotecas como TensorFlow Visualization Toolkit (tf-explain), Keras Visualization Toolkit (keras-vis) ou PyTorch Visualization Toolkit (torchvision) para ajudá-lo com esses métodos.
Como posso usar o conjunto de dados MNIST para outras tarefas além da classificação?
Você pode usar o conjunto de dados MNIST para outras tarefas além da classificação usando métodos como:
Geração de imagem: você pode usar modelos generativos, como autoencoders variacionais (VAEs) ou redes adversárias generativas (GANs) para gerar novas imagens de dígitos manuscritos que parecem realistas e diversos.
Aprimoramento de imagem: você pode usar modelos como redes de super-resolução ou redes de redução de ruído para aprimorar a qualidade ou resolução das imagens MNIST.
Transferência de estilo de imagem: você pode usar modelos como redes de transferência de estilo neural ou redes adversárias consistentes em ciclo (CycleGANs) para transferir o estilo de um domínio de imagem para outro, como de MNIST para Fashion-MNIST ou vice-versa.
Segmentação de imagem: você pode usar modelos como U-Net ou Mask R-CNN para segmentar as imagens MNIST em diferentes regiões com base em seus dígitos ou fundo.
Legenda de imagem: você pode usar modelos como redes codificador-decodificador ou redes de atenção para gerar legendas ou descrições para as imagens MNIST com base em seu conteúdo.
Onde posso encontrar mais conjuntos de dados semelhantes ao MNIST?
Você pode encontrar mais conjuntos de dados semelhantes ao MNIST usando fontes como:
[Conjuntos de dados do TensorFlow]( uma coleção de conjuntos de dados prontos para uso que são compatíveis com o pipeline de dados do TensorFlow. Você pode encontrar conjuntos de dados para imagem, texto, áudio, vídeo e mais domínios.
[Kaggle Datasets]( Uma plataforma para hospedar e explorar conjuntos de dados de vários tipos e tamanhos. Você pode encontrar conjuntos de dados para competições, projetos ou fins de aprendizagem.
[Repositório de aprendizado de máquina UCI]( uma coleção de conjuntos de dados para pesquisa e educação de aprendizado de máquina. Você pode encontrar conjuntos de dados para classificação, regressão, agrupamento e outras tarefas.
[Awesome Public Datasets]( Uma lista com curadoria de conjuntos de dados públicos de alta qualidade em vários domínios e formatos. Você pode encontrar conjuntos de dados para biologia, economia, educação e outros campos.
Espero que este artigo tenha ajudado você a aprender mais sobre o conjunto de dados MNIST e como usá-lo para seus próprios projetos de aprendizado de máquina. Se você tiver alguma dúvida ou feedback, sinta-se à vontade para deixar um comentário abaixo. Obrigado por ler! 0517a86e26
Comments