超強力な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 つの操作! ! !

ブログ    
ブログ    

推薦する

Google、3年ぶりの検索エンジンアルゴリズムの改良を発表

Googleは木曜日に創立15周年を迎えた。これを記念して、同社は同日、2010年以来最大の検索エン...

...

...

XiaoIce がクローンを正式にリリース: すでに年間 100 万元を稼いだ人もいます!

AIの助けを借りれば、月に10万元、年に100万元稼ぐことができます。想像できますか?信じないでく...

「人工知能のゴッドファーザー」ジェフリー・ヒントン氏は再び警告した。AIが人間に取って代わるかもしれない

10月10日、「人工知能のゴッドファーザー」として知られるジェフリー・ヒントン氏は、人工知能は危険で...

権限の取得方法についての簡単な説明: ファイルのアップロード

概要ファイルアップロードの脆弱性は、アップロード機能を持つアプリケーションで発生します。アプリケーシ...

多様な用途に焦点を当て、ドローンマッピングはますます熱を帯びている

農作物の保護から電力検査、映画やテレビの撮影から消防救助、緊急通信から交通検査まで、ドローンの活用が...

...

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

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

メタバースと自動運転車のどちらが先に来るでしょうか?

今年、未来のテクノロジーの中で最も注目されている2つの分野は、メタバースと自動運転車です。メタバース...

ビッグデータとリアルタイム分析のためのアルゴリズム分類

今日、ビッグデータ技術の発展と進歩により、大量のデータを収集および送信するための新しい、より効率的な...

AIはプログラマーの仕事を破壊する最初のものとなるでしょうか?プログラマーの90%は就職が難しくなっていると考えており、大学生もキャリアプランの調整が必要

一夜にしてプログラマーは仕事を見つけられなくなるようですね?海外メディアのマザーボードとブラインドが...

ドローン技術の飛躍的進歩とアプリケーションの革新が2017年に新たな時代を告げるかもしれない

いたるところで見られる「ドローン+自撮り・追尾撮影」、今年JD.comとAmazonが開始した「ドロ...

AIがDotAのトッププレイヤーに勝利したのは画期的なことでしょうか? OpenAIが詳細を発表

[[200484]]週末、OpenAI は世界最高峰の DotA 2 イベント TI7 (The I...