Ejercicio: Presentación de fotos en Jupyter Notebook

Completado

Ahora veremos algunas de las imágenes que hemos cargado en el equipo. Les asignaremos etiquetas que indiquen el tipo de roca que hay en cada foto.

Transformación y visualización de las imágenes

En esta sección, agregaremos código para hacer coincidir cada imagen de roca con un tipo de roca, en función de la carpeta de imágenes. Llamamos de nuevo a la clase transforms.Compose para transformar cada imagen en píxeles y cambiar su tamaño a las dimensiones que prefiramos.

Seleccionamos un conjunto de imágenes aleatoriamente de forma similar a como se usaron las funciones load_split_train_test y SubsetRandomSampler en el último ejercicio. El código recorre en iteración las imágenes ordenadas de forma aleatoria del conjunto de datos de pruebas.

La última sección de código muestra las imágenes que se cargan en el programa. Usamos funciones de la biblioteca PIL para manipular las imágenes y el comando plt.show para imprimirlas.

Adición de código para transformar y seleccionar imágenes aleatorias

Estamos listos para agregar el código para transformar las imágenes.

  1. En Visual Studio Code, vuelva al archivo de Jupyter Notebook.

  2. Agregue el código siguiente en una nueva celda. Después de agregar el nuevo código, ejecute la celda.

    # 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
    

Adición de código para mostrar imágenes seleccionadas aleatoriamente

Siga estos pasos para agregar el código para mostrar las imágenes.

  1. Agregue el código siguiente en una nueva celda. Después de agregar el nuevo código, ejecute la celda.

    # 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. Presione Ctrl + S para guardar los cambios en el archivo de Jupyter Notebook.

Después de ejecutar este nuevo código, debería ver cinco imágenes limpiadas en la salida. El código está configurado para mostrar cinco imágenes, pero puede cambiar el número.

 


Pasos siguientes

Continúe con el módulo siguiente de esta ruta de aprendizaje y obtenga más información sobre la clasificación de tipos de rocas espaciales en fotos aleatorias mediante el uso de la inteligencia artificial.

Importante

Si tiene previsto continuar con el módulo siguiente en esta ruta de aprendizaje, deje el símbolo del sistema de Anaconda abierto y el archivo de Jupyter Notebook abierto en Visual Studio Code. Si cierra estas aplicaciones o planea trabajar en los ejercicios del módulo en varias sesiones, tendrá que volver a abrir las herramientas y volver a configurar el entorno de trabajo para continuar con el desarrollo del modelo.