私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
import torch
x = torch.arange(16).reshape(1,4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
a3 = x.sum(axis = 0,keepdim=True)
a4 = x.sum(axis = 0,keepdim=False)
a5 = x.sum(axis = 2,keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
import torch
x = torch.arange(16).reshape(4,4)
print(x)
print('--------')
a = x.sum(axis = 1,keepdim=True)
a2 = x.sum(axis = 1,keepdim=False)
print(a)
print(a2)
print(x/a)
これら 2 つの例を組み合わせて、さまざまな状況下での軸の変化を詳細に説明します。
PyTorch でのテンソルの次元操作と特定の軸に沿った合計を理解するには、少し時間がかかります。 2 つの例を通してこれらの操作を段階的に分析し、さまざまな状況下での軸の変化を詳細に説明します。
import torch
x = torch.arange(16).reshape(1, 4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
a3 = x.sum(axis=0, keepdim=True)
a4 = x.sum(axis=0, keepdim=False)
a5 = x.sum(axis=2, keepdim=True)
print(a)
print(a2)
print('----------')
print(a3)
print(a4)
print(a5)
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
これは、 (1, 4, 4)
テンソルの。これは 4x4 行列を含むバッチと考えることができます。
x.sum(axis=1, keepdim=True)
次元を維持しながら、軸 1 (つまり 2 番目の次元 4 の方向) に沿って合計します。
tensor([[[24, 28, 32, 36]]])
形はこうなります (1, 1, 4)
。
x.sum(axis=1, keepdim=False)
軸 1 に沿って合計し、次元は保持されません。
tensor([[24, 28, 32, 36]])
形はこうなります (1, 4)
。
x.sum(axis=0, keepdim=True)
次元を維持しながら、軸 0 (つまり、最初の次元 1 の方向) に沿って合計します。
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
元のテンソルには軸 0 上の要素が 1 つだけあるため、結果は元のテンソルと同じ形状になります。 (1, 4, 4)
。
x.sum(axis=0, keepdim=False)
軸 0 に沿った合計。次元は保持されません。
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
形はこうなります (4, 4)
。
x.sum(axis=2, keepdim=True)
次元を維持しながら、軸 2 (つまり、3 番目の次元、4 の方向) に沿って合計します。
tensor([[[ 6],
[22],
[38],
[54]]])
形はこうなります (1, 4, 1)
。
keepdim=True
合計された次元は保持され、結果の次元数は変更されませんが、合計された次元のサイズは 1 になります。keepdim=False
合計された次元が削除され、結果の次元数が 1 減ります。import torch
x = torch.arange(16).reshape(4, 4)
print(x)
print('--------')
a = x.sum(axis=1, keepdim=True)
a2 = x.sum(axis=1, keepdim=False)
print(a)
print(a2)
print(x/a)
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
これは、 (4, 4)
テンソルの。
x.sum(axis=1, keepdim=True)
次元を維持しながら、軸 1 (つまり 2 番目の次元 4 の方向) に沿って合計します。
tensor([[ 6],
[22],
[38],
[54]])
形はこうなります (4, 1)
。
x.sum(axis=1, keepdim=False)
軸 1 に沿って合計し、次元は保持されません。
tensor([ 6, 22, 38, 54])
形はこうなります (4,)
。
x / a
tensor([[0.0000, 0.1667, 0.3333, 0.5000],
[0.1818, 0.2273, 0.2727, 0.3182],
[0.2105, 0.2368, 0.2632, 0.2895],
[0.2222, 0.2407, 0.2593, 0.2778]])
これは、各要素の合計を対応する行で割ったもので、次のようになります。
tensor([[ 0/6, 1/6, 2/6, 3/6],
[ 4/22, 5/22, 6/22, 7/22],
[ 8/38, 9/38, 10/38, 11/38],
[12/54, 13/54, 14/54, 15/54]])
使用 keepdim=True
次元を維持する場合、次元の合計は 1 になります。使用keepdim=False
の場合、合計された寸法が削除されます。
reshape(1, 4, 4) ではなく行が列になるのはなぜですか? reshape(4, 4) の場合にのみ行が行として表示されます。
まず基本的な概念を確認しましょう。
(4, 4)
import torch
x = torch.arange(16).reshape(4, 4)
print(x)
出力:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
このテンソルの形状は、 (4, 4)
、 は 4x4 行列を表します。
わかりました水平です:
[ 0, 1, 2, 3]
[ 4, 5, 6, 7]
[ 8, 9, 10, 11]
[12, 13, 14, 15]
リスト垂直です:
[ 0, 4, 8, 12]
[ 1, 5, 9, 13]
[ 2, 6, 10, 14]
[ 3, 7, 11, 15]
(1, 4, 4)
x = torch.arange(16).reshape(1, 4, 4)
print(x)
出力:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
このテンソルの形状は、 (1, 4, 4)
、 1x4x4 の 3 次元テンソルを表します。
1
、バッチサイズを示します。4
、行数 (行列あたりの行数) を表します。4
、列数(各行列の列)を表します。(4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
出力:
tensor([[ 6],
[22],
[38],
[54]])
(1, 4, 4)
:a = x.sum(axis=1, keepdim=True)
print(a)
出力:
tensor([[[24, 28, 32, 36]]])
存在する (1, 4, 4)
3次元テンソルでは最初の次元がバッチサイズを表すため、動作時には各4x4行列が依然として2次元的に処理されるようです。ただし、バッチ次元が追加されるため、合計演算では 2 次元テンソルとは異なる動作をします。
具体的には: