Cvičení – zobrazení fotek v Poznámkovém bloku Jupyter

Dokončeno

Teď se podíváme na některé image, které jsme načetli do počítače. Dáme jim popisky, abychom označili, jaký typ horniny je na každé fotce.

Transformace a zobrazení obrázků

V této části přidáme kód, který bude odpovídat jednotlivým obrázkům hornin s typem horniny na základě složky obrázku. Třídu znovu zavoláme transforms.Compose , abychom každý obrázek transformovali na pixely a změnili jeho velikost na naše upřednostňované rozměry.

Sadu obrázků vybereme náhodným způsobem podobným způsobem, jakým jsme v posledním cvičení použili load_split_train_test funkce a SubsetRandomSampler funkce. Kód iteruje přes prohazované obrázky v testovací datové sadě.

Poslední část kódu zobrazí obrázky, které jsou načteny do programu. K manipulaci s obrázky a příkazem plt.show k jejich tisku používáme funkce z knihovny PIL.

Přidání kódu pro transformaci a výběr náhodných obrázků

Jsme připraveni přidat kód pro transformaci obrázků.

  1. V editoru Visual Studio Code se vraťte do souboru Jupyter Notebook.

  2. Do nové buňky přidejte následující kód. Po přidání nového kódu spusťte buňku.

    # 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 = dataiter.next()
        return images, labels
    

Přidání kódu pro zobrazení náhodně vybraných obrázků

Následujícím postupem přidáte kód pro zobrazení obrázků.

  1. Do nové buňky přidejte následující kód. Po přidání nového kódu spusťte buňku.

    # 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. Stisknutím ctrl+ S uložte změny do souboru Jupyter Notebook.

Po spuštění tohoto nového kódu by se ve výstupu mělo zobrazit pět vyčištěných obrázků. Kód je nastavený tak, aby zobrazoval pět obrázků, ale můžete změnit číslo.

 


Další kroky

Pokračujte k dalšímu modulu v této Učení cestě a zjistěte, jak klasifikovat typy vesmírných kamenů v náhodných fotografiích pomocí AI.

Důležité

Pokud máte v plánu pokračovat k dalšímu modulu v této Učení cestě, nechejte svůj příkazový řádek Anacoda otevřený a váš soubor Jupyter Notebook otevřený v editoru Visual Studio Code. Pokud tyto aplikace zavřete nebo plánujete pracovat na cvičeních modulu ve více relacích, budete muset znovu otevřít nástroje a znovu nakonfigurovat pracovní prostředí, aby pokračovalo ve vývoji modelu.