Maison > Périphériques technologiques > IA > Une opération Pytorch super puissante ! !

Une opération Pytorch super puissante ! !

PHPz
Libérer: 2024-01-06 21:02:14
avant
985 Les gens l'ont consulté

Salut, Xiaozhuang ! Ravi de vous rencontrer! Puis-je faire quelque chose pour vous aider ?

J'ai partagé du contenu sur l'apprentissage profond au cours des derniers jours.

De plus, il existe certaines fonctions de traitement de données courantes similaires à numpy et pandas dans Pytorch, qui sont tout aussi importantes et intéressantes !

De même, PyTorch fournit également de nombreuses fonctions de traitement et de transformation des données.

Jetons maintenant un coup d’œil aux fonctions nécessaires les plus importantes.

一个超强 Pytorch 操作!!

torch.Tensor

Dans PyTorch, torch.Tensor est une structure de données de base utilisée pour représenter des tenseurs. Un tenseur est un tableau multidimensionnel pouvant contenir différents types de données telles que des nombres et des valeurs booléennes. Vous pouvez utiliser le constructeur de torch.Tensor pour créer un tenseur, ou vous pouvez utiliser d'autres fonctions pour le créer.

import torch# 创建一个空的张量empty_tensor = torch.Tensor()# 从列表创建张量data = [1, 2, 3, 4]tensor_from_list = torch.Tensor(data)
Copier après la connexion

torch.from_numpy

est utilisé pour convertir les tableaux NumPy en tenseurs PyTorch.

import numpy as npnumpy_array = np.array([1, 2, 3, 4])torch_tensor = torch.from_numpy(numpy_array)
Copier après la connexion

torch.Tensor.item

est utilisé pour extraire les valeurs numériques Python d'un tenseur ne contenant qu'un seul élément. S'applique aux tenseurs scalaires.

scalar_tensor = torch.tensor(5)scalar_value = scalar_tensor.item()
Copier après la connexion

torch.Tensor.view

est utilisé pour changer la forme du tenseur.

original_tensor = torch.randn(2, 3)# 2x3的随机张量reshaped_tensor = original_tensor.view(3, 2)# 将形状改变为3x2
Copier après la connexion

torch.Tensor.to

est utilisé pour convertir un tenseur en un périphérique spécifié (tel qu'un CPU ou un GPU).

cpu_tensor = torch.randn(3)gpu_tensor = cpu_tensor.to("cuda")# 将张量移动到GPU
Copier après la connexion

torch.Tensor.numpy

Convertissez un tenseur en tableau NumPy.

pytorch_tensor = torch.tensor([1, 2, 3])numpy_array = pytorch_tensor.numpy()
Copier après la connexion

torch.nn.function.one_hot

est utilisé pour l'encodage à chaud de tenseurs entiers.

import torch.nn.functional as Finteger_tensor = torch.tensor([0, 2, 1])one_hot_encoded = F.one_hot(integer_tensor)
Copier après la connexion

torch.utils.data.Dataset et torch.utils.data.DataLoader

sont utilisés pour charger et traiter des ensembles de données. Ces deux classes sont généralement utilisées avec des classes d'ensembles de données personnalisées.

from torch.utils.data import Dataset, DataLoaderclass CustomDataset(Dataset):def __init__(self, data):self.data = datadef __len__(self):return len(self.data)def __getitem__(self, index):return self.data[index]dataset = CustomDataset([1, 2, 3, 4, 5])dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
Copier après la connexion

Ci-dessus sont quelques fonctions de conversion de données importantes dans PyTorch, qui sont simplement utilisées.

Ils sont très, très utiles pour traiter et préparer les données dans les tâches d'apprentissage en profondeur.

Un cas

Ensuite, nous réalisons un cas de segmentation d'images.

Dans ce cas, nous utiliserons les bibliothèques PyTorch et torchvision pour la segmentation d'images, en utilisant le modèle DeepLabV3 pré-entraîné et l'ensemble de données PASCAL VOC.

L'ensemble du code implique ce que nous avons appris ci-dessus, comme le redimensionnement, le recadrage, la standardisation, etc.

import torchimport torchvision.transforms as transformsfrom torchvision import modelsfrom PIL import Imageimport matplotlib.pyplot as plt# 下载示例图像!wget -O example_image.jpg https://pytorch.org/assets/deeplab/deeplab1.jpg# 定义图像转换transform = transforms.Compose([transforms.Resize((256, 256)),# 调整大小transforms.ToTensor(), # 转换为张量transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])# 标准化])# 加载并转换图像image_path = 'example_image.jpg'image = Image.open(image_path).convert("RGB")input_tensor = transform(image).unsqueeze(0)# 添加批次维度# 加载预训练的DeepLabV3模型model = models.segmentation.deeplabv3_resnet101(pretrained=True)model.eval()# 进行图像分割with torch.no_grad():output = model(input_tensor)['out'][0]output_predictions = output.argmax(0)# 将预测结果转换为彩色图像def decode_segmap(image, nc=21):label_colors = np.array([(0, 0, 0),# 0: 背景 (128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128),# 1-5: 物体 (0, 128, 128), (128, 128, 128), (64, 0, 0), (192, 0, 0),# 6-9: 道路 (64, 128, 0), (192, 128, 0), (64, 0, 128), (192, 0, 128),# 10-13: 面部 (64, 128, 128), (192, 128, 128), (0, 64, 0), (128, 64, 0),# 14-17: 植物 (0, 192, 0), (128, 192, 0), (0, 64, 128)])# 18-20: 建筑r = np.zeros_like(image).astype(np.uint8)g = np.zeros_like(image).astype(np.uint8)b = np.zeros_like(image).astype(np.uint8)for l in range(0, nc):idx = image == lr[idx] = label_colors[l, 0]g[idx] = label_colors[l, 1]b[idx] = label_colors[l, 2]rgb = np.stack([r, g, b], axis=2)return rgb# 将预测结果转换为彩色图像output_rgb = decode_segmap(output_predictions.numpy())# 可视化原始图像和分割结果plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1)plt.imshow(image)plt.title('Original Image')plt.subplot(1, 2, 2)plt.imshow(output_rgb)plt.title('Segmentation Result')plt.show()
Copier après la connexion

Dans ce cas, nous définissons d'abord une série de fonctions de transformation d'image, notamment le redimensionnement, la conversion en tenseur et la normalisation. Ces transformations garantissent que l'image d'entrée répond aux besoins du modèle.

Ensuite, un exemple d'image a été chargé et ces transformations ont été appliquées.

Ensuite, nous avons utilisé le modèle DeepLabV3 pré-entraîné dans torchvision pour la segmentation d'images. Pour la sortie, nous avons extrait l'indice maximum des résultats de prédiction pour obtenir la classe prédite pour chaque pixel.

Enfin, nous convertissons les résultats de prédiction en images couleur et visualisons les images originales et les résultats de segmentation.

一个超强 Pytorch 操作!!

Ce cas met en évidence le rôle important de la fonction de conversion d'image dans la tâche de segmentation d'image, garantissant que l'image d'entrée répond aux exigences d'entrée du modèle et que les résultats de sortie sont faciles à visualiser.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal