Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Sessão 1 - Faça como eu fiz: CIFAR10

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

1 resposta

Fala, Leandro! Tudo bom?

Agradeço por trazer sua solução para o fórum!

Curti demais como trabalhou a visualização de dados para explorar o CIFAR10 com PyTorch, entendeu perfeitamente a importância da reorganização das dimensões para compatibilizar tensores com o Matplotlib e utilizou bem o método permute() para corrigir o formato das imagens antes da exibição.

Algo bem legal para complementar é transformar a classe base de carregamento em uma função utilitária, deixando o notebook mais modular. Dessa maneira:

def mostrar_imagem(img_tensor, label, classes):
    img = img_tensor.permute(1, 2, 0)  # C × H × W → H × W × C
    plt.imshow(img)
    plt.title(classes[label])
    plt.axis("off")
    plt.show()

Isso faz com que a visualização fique mais clara e reutilizável em diferentes partes do notebook.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Documentação: comentar cada célula para explicar o raciocínio.
  • Escalabilidade: usar DataLoader para manipular lotes maiores de imagens.
  • Generalização: criar funções para buscar amostras de qualquer classe, não apenas uma de cada.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Ah, uma pergunta: você prefere manter a visualização com apenas uma amostra por classe ou já pensa em evoluir para mostrar várias imagens por classe em uma grade maior?

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!