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.
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)
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)
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()
est utilisé pour changer la forme du tenseur.
original_tensor = torch.randn(2, 3)# 2x3的随机张量reshaped_tensor = original_tensor.view(3, 2)# 将形状改变为3x2
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
Convertissez un tenseur en tableau NumPy.
pytorch_tensor = torch.tensor([1, 2, 3])numpy_array = pytorch_tensor.numpy()
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)
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)
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.
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()
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.
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!