>  기사  >  기술 주변기기  >  매우 강력한 Pytorch 작업! !

매우 강력한 Pytorch 작업! !

PHPz
PHPz앞으로
2024-01-06 21:02:14925검색

안녕하세요, 샤오좡님! 만나서 반가워요! 제가 도와드릴 수 있는 일이 있나요?

지난 며칠간 딥러닝에 대한 콘텐츠를 공유해왔습니다.

또한 Pytorch에는 numpy 및 pandas와 유사한 몇 가지 일반적인 데이터 처리 기능이 있는데, 이는 똑같이 중요하고 흥미롭습니다!

마찬가지로 PyTorch는 데이터 처리 및 변환을 위한 다양한 기능도 제공합니다.

이제 가장 중요한 필수 기능을 살펴보겠습니다.

一个超强 Pytorch 操作!!

torch.Tensor

PyTorch에서 torch.Tensor는 텐서를 표현하는 데 사용되는 기본 데이터 구조입니다. 텐서는 숫자 및 부울 값과 같은 다양한 유형의 데이터를 포함할 수 있는 다차원 배열입니다. torch.Tensor의 생성자를 사용하여 텐서를 생성하거나 다른 함수를 사용하여 생성할 수 있습니다.

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

torch.from_numpy

는 NumPy 배열을 PyTorch 텐서로 변환하는 데 사용됩니다.

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

torch.Tensor.item

은 요소가 하나만 포함된 텐서에서 Python 숫자 값을 추출하는 데 사용됩니다. 스칼라 텐서에 적용됩니다.

scalar_tensor = torch.tensor(5)scalar_value = scalar_tensor.item()

torch.Tensor.view

는 텐서의 모양을 변경하는 데 사용됩니다.

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

torch.Tensor.to

는 텐서를 지정된 장치(예: CPU 또는 GPU)로 변환하는 데 사용됩니다.

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

torch.Tensor.numpy

텐서를 NumPy 배열로 변환합니다.

pytorch_tensor = torch.tensor([1, 2, 3])numpy_array = pytorch_tensor.numpy()

torch.nn.function.one_hot

은 정수 텐서의 원-핫 인코딩에 사용됩니다.

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

torch.utils.data.Dataset 및 torch.utils.data.DataLoader

는 데이터 세트를 로드하고 처리하는 데 사용됩니다. 이 두 클래스는 일반적으로 사용자 정의 데이터 세트 클래스와 함께 사용됩니다.

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)

위 내용은 PyTorch에서 간단하게 사용되는 중요한 데이터 변환 함수들입니다.

딥 러닝 작업에서 데이터를 처리하고 준비하는 데 매우 유용합니다.

케이스

다음으로 이미지 분할 케이스를 만들어 보겠습니다.

이 경우 사전 훈련된 DeepLabV3 모델과 PASCAL VOC 데이터 세트를 사용하여 이미지 분할을 위해 PyTorch 및 torchvision 라이브러리를 사용합니다.

전체 코드에는 크기 조정, 자르기, 표준화 등과 같이 위에서 배운 내용이 포함됩니다.

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()

이 경우 먼저 크기 조정, 텐서로 변환, 정규화를 포함한 일련의 이미지 변환 기능을 정의합니다. 이러한 변환은 입력 이미지가 모델의 요구 사항을 충족하는지 확인합니다.

그런 다음 샘플 이미지가 로드되고 이러한 변환이 적용되었습니다.

다음으로 이미지 분할을 위해 torchvision에서 사전 훈련된 DeepLabV3 모델을 사용했습니다. 출력의 경우 예측 결과의 최대 인덱스를 추출하여 각 픽셀에 대한 예측 클래스를 얻었습니다.

마지막으로 예측 결과를 컬러 이미지로 변환하고 원본 이미지와 분할 결과를 시각화합니다.

一个超强 Pytorch 操作!!

이 사례는 입력 이미지가 모델의 입력 요구 사항을 충족하고 출력 결과를 쉽게 시각화할 수 있도록 이미지 분할 작업에서 이미지 변환 기능의 중요한 역할을 강조합니다.

위 내용은 매우 강력한 Pytorch 작업! !의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제