Nesta atividade, acrescentei ao notebook Datasets.ipynb o carregamento e a visualização do conjunto de dados CIFAR10, seguindo como referência o exemplo anteriormente realizado com o MNIST.
Durante a execução do notebook, foi identificado o erro Invalid shape (3, 281, 500) for image data. O problema acontecia porque as imagens transformadas em tensores pelo PyTorch utilizam o formato C × H × W, no qual os canais aparecem primeiro. Entretanto, o método imshow() do Matplotlib espera receber a imagem no formato H × W × C, com os canais na última dimensão.
Para corrigir o problema, foi utilizado o método permute(1, 2, 0), reorganizando as dimensões do tensor antes da exibição. A imagem foi atribuída a uma nova variável, preservando o tensor original. Para o rótulo de segmentação, também foi utilizado o método squeeze(0), removendo a dimensão unitária antes de sua exibição em escala de cinza.
Em seguida, foram criadas duas células para responder ao enunciado da atividade.
Na primeira célula, o dataset CIFAR10 foi carregado por meio da classe datasets.CIFAR10, utilizando o conjunto de teste e a transformação transforms.ToTensor(). Também foi criada uma lista com os nomes das dez classes existentes no conjunto: avião, automóvel, pássaro, gato, cervo, cachorro, sapo, cavalo, navio e caminhão. Além disso, foram verificadas informações como o tipo dos dados, a dimensionalidade de uma imagem e a quantidade total de elementos do dataset.
Na segunda célula, o conjunto foi percorrido até que fosse encontrada uma imagem pertencente a cada uma das dez classes. As imagens foram armazenadas em um dicionário, utilizando o número da classe como chave. A busca foi encerrada assim que todas as classes foram encontradas.
Por fim, foram exibidas dez imagens em uma grade de duas linhas e cinco colunas. Antes de cada imagem ser apresentada pelo Matplotlib, suas dimensões foram reorganizadas de C × H × W para H × W × C. Cada amostra também recebeu como título o número e o nome de sua respectiva classe.
Dessa forma, foi utilizada uma quantidade N = 10 de amostras, garantindo que todas as classes do CIFAR10 fossem apresentadas na tela, conforme solicitado no enunciado.
Segue a baixo o código com a solução:
https://github.com/Moquiuti/Redes-Neurais-Convolucionais-Deep-Learning-com-PyTorch/blob/main/Datasets.ipynb