PyTorch Sparse 0.6 : 概要 (README) (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/18/2021 (0.6.9)
* 本ページは、PyTorch Sparse 0.6 の以下のページを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- Windows PC のブラウザからご参加が可能です。スマートデバイスもご利用可能です。
人工知能研究開発支援 | 人工知能研修サービス | テレワーク & オンライン授業を支援 |
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。) |
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ ; Facebook |
PyTorch Sparse 0.6 : 概要 (README)
このパッケージは autograd サポートを持つ最適化されたスパース行列演算の小さい拡張ライブラリから成ります。このパッケージは現在以下のメソッドから成ります :
総ての含まれる演算は様々なデータ型上で動作して CPU と GPU の両者のために実装されています。torch.sparse_coo_tensor を作成する hazzle を回避するため、このパッケージは (PyTorch で定義されたのと同じ shape を持つ) 引数としてインデックスと値 tensor を単純に渡すことによりスパース tensor 上の演算を定義します。値だけが autograd サポートを装備することに注意してください、インデックスは離散で従って微分可能ではないからです。
関数
Coalesce
torch_sparse.coalesce(index, value, m, n, op="add") -> (torch.LongTensor, torch.Tensor)
行単位でインデックスをソートして重複エントリは除去します。重複エントリはそれらをまとめて scatter することにより除去されます。scatter については、torch_scatter の任意の演算が利用できます。
パラメータ
- index (LongTensor) – スパース行列のインデックス tensor。
- value (Tensor) – スパース行列の値 tensor。
- m (int) – 対応するデンス行列の最初の次元。
- n (int) – 対応するデンス行列の 2 番目の次元。
- op (文字列、オプション) – 使用する scatter 演算 (デフォルト: “add”)
Returns
- index (LongTensor) – スパース行列の coalesced インデックス tensor。
- value (Tensor) – スパース行列の coalesced 値 tensor。
サンプル
import torch
from torch_sparse import coalesce
index = torch.tensor([[1, 0, 1, 0, 2, 1],
[0, 1, 1, 1, 0, 0]])
value = torch.Tensor([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]])
index, value = coalesce(index, value, m=3, n=2)
print(index) tensor([[0, 1, 1, 2], [1, 0, 1, 0]]) print(value) tensor([[6.0, 8.0], [7.0, 9.0], [3.0, 4.0], [5.0, 6.0]])
Transpose
torch_sparse.transpose(index, value, m, n) -> (torch.LongTensor, torch.Tensor)
スパース行列の次元 0 と 1 を転置する。
パラメータ
- index (LongTensor) – スパース行列のインデックス tensor。
- value (Tensor) – スパース行列の値 tensor。
- m (int) – 対応するデンス行列の最初の次元。
- n (int) – 対応するデンス行列の 2 番目の次元。
- coalesced (bool, オプション) – If set to False, will not coalesce the output. (default: True)
Returns
- index (LongTensor) – スパース行列の transposed インデックス tensor。
- value (Tensor) – スパース行列の transposed 値 tensor。
サンプル
import torch
from torch_sparse import transpose
index = torch.tensor([[1, 0, 1, 0, 2, 1],
[0, 1, 1, 1, 0, 0]])
value = torch.Tensor([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]])
index, value = transpose(index, value, 3, 2)
print(index) tensor([[0, 0, 1, 1], [1, 2, 0, 1]]) print(value) tensor([[7.0, 9.0], [5.0, 6.0], [6.0, 8.0], [3.0, 4.0]])
スパース-デンス行列乗算
torch_sparse.spmm(index, value, m, n, matrix) -> torch.Tensor
スパース行列のデンス行列による行列積。
パラメータ
- index (LongTensor) – スパース行列のインデックス tensor。
- value (Tensor) – スパース行列の値 tensor。
- m (int) – 対応するデンス行列の最初の次元。
- n (int) – 対応するデンス行列の 2 番目の次元。
- matrix (Tensor) – デンス行列
Returns
- out (Tensor) – デンス出力行列。
サンプル
import torch
from torch_sparse import spmm
index = torch.tensor([[0, 0, 1, 2, 2],
[0, 2, 1, 0, 1]])
value = torch.Tensor([1, 2, 4, 1, 3])
matrix = torch.Tensor([[1, 4], [2, 5], [3, 6]])
out = spmm(index, value, 3, 3, matrix)
print(out) tensor([[7.0, 16.0], [8.0, 20.0], [7.0, 19.0]])
スパース-スパース行列乗算
torch_sparse.spspmm(indexA, valueA, indexB, valueB, m, k, n) -> (torch.LongTensor, torch.Tensor)
2 つのスパース tensor の行列積。Both input sparse matrices need to be coalesced (use the coalesced attribute to force).
パラメータ
- indexA (LongTensor) – 最初のスパース行列のインデックス tensor。
- valueA (Tensor) – 最初のスパース行列の値 tensor。
- indexB (LongTensor) – 2 番目のスパース行列のインデックス tensor。
- valueB (Tensor) – 2 番目のスパース行列の値 tensor。
- m (int) – 最初の相当するデンス行列の最初の次元。
- k (int) – 最初の相当するデンス行列の 2 番目の次元、そして 2 番目の相当するデンス行列の最初の次元。
- n (int) – 2 番目の相当するデンス行列の 2 番目の次元。
- coalesced (bool, オプション): If set to True, will coalesce both input sparse matrices. (default: False)
Returns
- index (LongTensor) – スパース行列の出力インデックス tensor。
- value (Tensor) – スパース行列の出力値 tensor。
サンプル
import torch
from torch_sparse import spspmm
indexA = torch.tensor([[0, 0, 1, 2, 2], [1, 2, 0, 0, 1]])
valueA = torch.Tensor([1, 2, 3, 4, 5])
indexB = torch.tensor([[0, 2], [1, 0]])
valueB = torch.Tensor([2, 4])
indexC, valueC = spspmm(indexA, valueA, indexB, valueB, 3, 3, 2)
print(indexC) tensor([[0, 1, 2], [0, 1, 1]]) print(valueC) tensor([8.0, 6.0, 8.0])
以上