Ejercicio: Presentación de fotos en Jupyter Notebook
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.
En Visual Studio Code, vuelva al archivo de Jupyter Notebook.
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.
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()
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.