Rumah > Peranti teknologi > AI > teks badan

Operasi Pytorch yang sangat berkuasa! !

PHPz
Lepaskan: 2024-01-06 21:02:14
ke hadapan
949 orang telah melayarinya

Hai, Xiaozhuang! Selamat berkenalan! Adakah terdapat apa-apa yang boleh saya lakukan untuk membantu anda?

Saya telah berkongsi beberapa kandungan tentang pembelajaran mendalam sejak beberapa hari lalu.

Selain itu, terdapat beberapa fungsi pemprosesan data biasa yang serupa dengan numpy dan panda dalam Pytorch, yang sama penting dan menarik!

Begitu juga, PyTorch juga menyediakan banyak fungsi untuk pemprosesan dan transformasi data.

Sekarang mari kita lihat fungsi yang paling penting yang diperlukan.

一个超强 Pytorch 操作!!

torch.Tensor

Dalam PyTorch, torch.Tensor ialah struktur data asas yang digunakan untuk mewakili tensor. Tensor ialah tatasusunan berbilang dimensi yang boleh mengandungi pelbagai jenis data seperti nombor dan nilai Boolean. Anda boleh menggunakan pembina obor.Tensor untuk mencipta tensor, atau anda boleh menggunakan fungsi lain untuk menciptanya.

import torch# 创建一个空的张量empty_tensor = torch.Tensor()# 从列表创建张量data = [1, 2, 3, 4]tensor_from_list = torch.Tensor(data)
Salin selepas log masuk

torch.from_numpy

digunakan untuk menukar tatasusunan NumPy kepada tensor PyTorch.

import numpy as npnumpy_array = np.array([1, 2, 3, 4])torch_tensor = torch.from_numpy(numpy_array)
Salin selepas log masuk

torch.Tensor.item

digunakan untuk mengekstrak nilai berangka Python dari tensor yang mengandungi hanya satu elemen. Berlaku pada tensor skalar.

scalar_tensor = torch.tensor(5)scalar_value = scalar_tensor.item()
Salin selepas log masuk

torch.Tensor.view

digunakan untuk menukar bentuk tensor.

original_tensor = torch.randn(2, 3)# 2x3的随机张量reshaped_tensor = original_tensor.view(3, 2)# 将形状改变为3x2
Salin selepas log masuk

torch.Tensor.to

digunakan untuk menukar tensor kepada peranti tertentu (seperti CPU atau GPU).

cpu_tensor = torch.randn(3)gpu_tensor = cpu_tensor.to("cuda")# 将张量移动到GPU
Salin selepas log masuk

torch.Tensor.numpy

Tukar tensor kepada tatasusunan NumPy.

pytorch_tensor = torch.tensor([1, 2, 3])numpy_array = pytorch_tensor.numpy()
Salin selepas log masuk

torch.nn.functional.one_hot

digunakan untuk pengekodan satu panas tensor integer.

import torch.nn.functional as Finteger_tensor = torch.tensor([0, 2, 1])one_hot_encoded = F.one_hot(integer_tensor)
Salin selepas log masuk

torch.utils.data.Dataset dan torch.utils.data.DataLoader

digunakan untuk memuatkan dan memproses set data. Kedua-dua kelas ini biasanya digunakan bersama dengan kelas set data tersuai.

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)
Salin selepas log masuk

Di atas adalah beberapa fungsi penukaran data penting dalam PyTorch, yang digunakan secara ringkas.

Mereka sangat, sangat membantu untuk memproses dan menyediakan data dalam tugas pembelajaran mendalam.

Satu kes

Seterusnya, kami membuat kes pembahagian imej.

Dalam kes ini, kami akan menggunakan perpustakaan PyTorch dan torchvision untuk pembahagian imej, menggunakan model DeepLabV3 terlatih dan set data PASCAL VOC.

Keseluruhan kod melibatkan perkara yang kami pelajari di atas, seperti saiz semula, pemangkasan, penyeragaman, dsb.

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()
Salin selepas log masuk

Dalam kes ini, kami mula-mula menentukan satu siri fungsi transformasi imej, termasuk mengubah saiz, menukar kepada tensor dan menormalkan. Transformasi ini memastikan bahawa imej input memenuhi keperluan model.

Kemudian, imej sampel telah dimuatkan dan transformasi ini digunakan.

Seterusnya, kami menggunakan model DeepLabV3 terlatih dalam torchvision untuk pembahagian imej. Untuk output, kami mengekstrak indeks maksimum keputusan ramalan untuk mendapatkan kelas ramalan bagi setiap piksel.

Akhir sekali, kami menukar hasil ramalan kepada imej berwarna dan menggambarkan imej asal dan hasil pembahagian.

一个超强 Pytorch 操作!!

Kes ini menyerlahkan peranan penting fungsi penukaran imej dalam tugas pembahagian imej, memastikan imej input memenuhi keperluan input model dan hasil output mudah untuk digambarkan.

Atas ialah kandungan terperinci Operasi Pytorch yang sangat berkuasa! !. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan