Esercizio: Visualizzare le foto in Jupyter Notebook

Completato

Verranno ora visualizzate alcune delle immagini caricate nel computer. Verranno visualizzate etichette per indicare il tipo di roccia presente in ogni foto.

Trasformare e visualizzare le immagini

In questa sezione verrà aggiunto il codice per associare ogni immagine di roccia a un tipo di roccia, in base alla cartella dell'immagine. Viene chiamata nuovamente la classe transforms.Compose per trasformare ogni immagine in pixel e ridimensionarla in base alle dimensioni preferite.

Si seleziona un set di immagini casuale in modo simile a come sono stati usate le funzioni load_split_train_test e SubsetRandomSampler nell'ultimo esercizio. Il codice scorre le immagini riorganizzate nel set di dati di test.

L'ultima sezione del codice visualizza le immagini caricate nel programma. Le funzioni della libreria PIL vengono usate per modificare le immagini e il comando plt.show viene usato per stamparle.

Aggiungere codice per trasformare e selezionare immagini casuali

Ora si è pronti ad aggiungere il codice per trasformare le immagini.

  1. In Visual Studio Code tornare al file di Jupyter Notebook.

  2. Aggiungere il codice seguente in una nuova cella. Dopo aver aggiunto il nuovo codice, eseguire la cella.

    # Transform an image into pixels and resize it
    test_transforms = transforms.Compose([transforms.RandomResizedCrop(224),
                                       transforms.Resize(224),
                                       transforms.ToTensor(),
                                     ])
    
    # Randomly select a set of images by using a similar approach as the load_split_train_test function
    def get_random_images(num):
        data = datasets.ImageFolder(data_dir, transform=test_transforms)
        classes = data.classes
        indices = list(range(len(data)))
        np.random.shuffle(indices)
        idx = indices[:num]
        from torch.utils.data.sampler import SubsetRandomSampler
        sampler = SubsetRandomSampler(idx)
        loader = torch.utils.data.DataLoader(data, sampler=sampler, batch_size=num)
    
        # Create an iterator to iterate over the shuffled images in the test image dataset
        dataiter = iter(loader)
    
        # Get and return the images and labels from the iterator
        images, labels = next(dataiter)
        return images, labels
    

Aggiungere codice per visualizzare immagini selezionate in modo casuale

Seguire questa procedura per aggiungere il codice per visualizzare le immagini.

  1. Aggiungere il codice seguente in una nuova cella. Dopo aver aggiunto il nuovo codice, eseguire la cella.

    # Show five images - you can change this number
    images, labels = get_random_images(5)
    
    # Convert the array of pixels to an image
    to_pil = transforms.ToPILImage()
    fig=plt.figure(figsize=(20,20))
    
    # Get a list of all classes in the training data
    classes=trainloader.dataset.classes
    
    # Draw the images in a plot to display in the notebook
    for ii in range(len(images)):
        image = to_pil(images[ii])
        sub = fig.add_subplot(1, len(images), ii+1)
        plt.axis('off')
        plt.imshow(image)
    
    # Display all of the images 
    plt.show()
    
  2. Premere CTRL+S per salvare le modifiche apportate al file di Jupyter Notebook.

Dopo aver eseguito questo nuovo codice, nell'output dovrebbero essere visualizzate cinque immagini pulite. Il codice è impostato per visualizzare cinque immagini, ma è possibile modificare il numero.

 


Passaggi successivi

Passare al modulo successivo in questo percorso di apprendimento e scoprire come classificare i tipi di rocce spaziali in foto casuali con l’intelligenza artificiale.

Importante

Se si prevede di proseguire con il modulo successivo del percorso di apprendimento, lasciare aperti il prompt di Anacoda e il file Jupyter Notebook in Visual Studio Code. Se si chiudono le applicazioni o si prevede di lavorare agli esercizi del modulo in più sessioni, sarà necessario riaprire gli strumenti e riconfigurare l'ambiente di lavoro per continuare lo sviluppo del modello.