超強力なPytorchオペレーション! ! !

超強力なPytorchオペレーション! ! !

こんにちは、Xiaozhuangです!

ここ数日、ディープラーニングに関するコンテンツをいくつか共有しました。

さらに、numpy や pandas に似た一般的なデータ処理関数も、Pytorch では同様に重要かつ興味深いものです。 !

Pytorch は、データの処理と変換のための多くの機能も提供します。

今日は最も重要な機能を見てみましょう。

トーチ.テンソル

torch.Tensor は PyTorch で最も基本的なデータ構造であり、テンソルを表すために使用されます。テンソルは、数値やブール値などを含めることができる多次元配列です。 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 np numpy_array = np.array([1, 2, 3, 4]) torch_tensor = torch.from_numpy(numpy_array)

torch.Tensor.item

1 つの要素のみを含むテンソルから 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

トーチ.テンソル.numpy

テンソルを NumPy 配列に変換します。

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

torch.nn.function.one_hot トーチ.nn.function.one_hot

整数テンソルをワンホットエンコードするために使用されます。

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

torch.utils.data.Dataset と torch.utils.data.DataLoader

データセットを読み込んで処理するために使用されます。これら 2 つのクラスは通常、カスタム データセット クラスと一緒に使用されます。

 from torch.utils.data import Dataset, DataLoader class CustomDataset(Dataset): def __init__(self, data): self.data = data def __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 torch import torchvision.transforms as transforms from torchvision import models from PIL import Image import 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 == l r[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 の最も重要な 9 つの操作! ! !

ブログ    

推薦する

...

人工知能は労働力不足の重要な解決策とみられる

セリディアンは、無限の労働力を動員する力に焦点を当てた年次経営者調査の結果を発表しました。調査では、...

...

人工知能とクラウドコンピューティングはアプリケーションエコシステムの形成を加速させている

現在、人工知能は生産性の向上を可能にし、さまざまな産業のインテリジェント化と新旧の運動エネルギーの変...

...

映画はヒットできるでしょうか?機械学習を使用して正確な予測を行う

映画データベース (TMDB) は映画データ用の API を提供し、ユーザーはこのデータベースからデ...

...

...

7Bモデルがまた手に入ると最高ですね! 700億のLLaMA2を突破、Appleのコンピュータは

「調整」に 500 ドルかかる 70 億パラメータのモデルは、700 億パラメータの Llama 2...

...

数秒で理解:小売業における画像認識

【51CTO.comオリジナル記事】スーパーマーケットに入ったところを想像してみてください。計量のた...

外国人大学生がAIモデルを発明:人間の目では真偽の判別が難しい中国の山水画を素早く生成できる

最近、プリンストン大学の学部生であるアリス・シューさんが卒業論文でプリンストン2020年度優秀卒業論...

マスク氏:ロボットが雇用を奪い、ユニバーサル・ベーシック・インカムが必須に

億万長者のイーロン・マスク氏は最近、一連のツイートで、ロボットが人間の仕事を奪うなら、政府による普遍...

企業が人工知能を導入する際に知っておくべき5つの誤解

[[392106]] AI は広く普及しているにもかかわらず、知識と認識のギャップにより、商業的な導...

Llama 2 第 2 波のハイライト: 慎重すぎるため、コード生成には改善の余地が大いにある

有用か無害かLlama-2-chat は、セキュリティ フィルターに関して過度に敏感な動作を示すこと...