Hallo, Xiaozhuang! Freut mich, Sie kennenzulernen! Kann ich irgendetwas tun, um Ihnen zu helfen?
Ich habe in den letzten Tagen einige Inhalte zum Thema Deep Learning geteilt.
Darüber hinaus gibt es in Pytorch einige gängige Datenverarbeitungsfunktionen ähnlich wie Numpy und Pandas, die gleichermaßen wichtig und interessant sind!
Ähnlich bietet PyTorch auch viele Funktionen zur Datenverarbeitung und -transformation.
Jetzt werfen wir einen Blick auf die wichtigsten notwendigen Funktionen.
In PyTorch ist Torch.Tensor eine grundlegende Datenstruktur, die zur Darstellung von Tensoren verwendet wird. Ein Tensor ist ein mehrdimensionales Array, das verschiedene Datentypen wie Zahlen und boolesche Werte enthalten kann. Sie können den Konstruktor von Torch.Tensor verwenden, um einen Tensor zu erstellen, oder Sie können ihn mit anderen Funktionen erstellen.
import torch# 创建一个空的张量empty_tensor = torch.Tensor()# 从列表创建张量data = [1, 2, 3, 4]tensor_from_list = torch.Tensor(data)
wird verwendet, um NumPy-Arrays in PyTorch-Tensoren zu konvertieren.
import numpy as npnumpy_array = np.array([1, 2, 3, 4])torch_tensor = torch.from_numpy(numpy_array)
wird verwendet, um numerische Python-Werte aus einem Tensor zu extrahieren, der nur ein Element enthält. Gilt für Skalartensoren.
scalar_tensor = torch.tensor(5)scalar_value = scalar_tensor.item()
wird verwendet, um die Form des Tensors zu ändern.
original_tensor = torch.randn(2, 3)# 2x3的随机张量reshaped_tensor = original_tensor.view(3, 2)# 将形状改变为3x2
wird verwendet, um einen Tensor in ein bestimmtes Gerät (z. B. CPU oder GPU) umzuwandeln.
cpu_tensor = torch.randn(3)gpu_tensor = cpu_tensor.to("cuda")# 将张量移动到GPU
Konvertieren Sie einen Tensor in ein NumPy-Array.
pytorch_tensor = torch.tensor([1, 2, 3])numpy_array = pytorch_tensor.numpy()
wird für die One-Hot-Codierung ganzzahliger Tensoren verwendet.
import torch.nn.functional as Finteger_tensor = torch.tensor([0, 2, 1])one_hot_encoded = F.one_hot(integer_tensor)
werden zum Laden und Verarbeiten von Datensätzen verwendet. Diese beiden Klassen werden normalerweise zusammen mit benutzerdefinierten Datensatzklassen verwendet.
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)
Die oben genannten sind einige wichtige Datenkonvertierungsfunktionen in PyTorch, die einfach verwendet werden.
Sie sind sehr, sehr hilfreich bei der Verarbeitung und Aufbereitung von Daten in Deep-Learning-Aufgaben.
Als nächstes erstellen wir einen Bildsegmentierungsfall.
In diesem Fall verwenden wir PyTorch und die Torchvision-Bibliothek für die Bildsegmentierung unter Verwendung des vorab trainierten DeepLabV3-Modells und des PASCAL VOC-Datensatzes.
Der gesamte Code umfasst das, was wir oben gelernt haben, z. B. Größenänderung, Zuschneiden, Standardisierung usw.
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()
In diesem Fall definieren wir zunächst eine Reihe von Bildtransformationsfunktionen, einschließlich Größenänderung, Konvertierung in Tensor und Normalisierung. Diese Transformationen stellen sicher, dass das Eingabebild den Anforderungen des Modells entspricht.
Dann wurde ein Beispielbild geladen und diese Transformationen angewendet.
Als nächstes verwendeten wir das vorab trainierte DeepLabV3-Modell in Torchvision für die Bildsegmentierung. Für die Ausgabe haben wir den maximalen Index der Vorhersageergebnisse extrahiert, um die vorhergesagte Klasse für jedes Pixel zu erhalten.
Abschließend wandeln wir die Vorhersageergebnisse in Farbbilder um und visualisieren die Originalbilder und Segmentierungsergebnisse.
Dieser Fall verdeutlicht die wichtige Rolle der Bildtransformationsfunktion bei der Bildsegmentierungsaufgabe. Sie stellt sicher, dass das Eingabebild die Eingabeanforderungen des Modells erfüllt und die Ausgabeergebnisse leicht zu visualisieren sind.
Das obige ist der detaillierte Inhalt vonEine superstarke Pytorch-Operation! !. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!