テンソルの次元でPyTorch変換

基本的なデータのためにテンソルPyTorch(テンソル)、問題に対処する上で、我々は、頻繁にデータの大きさを変更する必要があるオブジェクトと計算の後半でさらに処理するために、本論文の目的は、いくつかの次元に閲覧を容易にする記載された方法および実施例を、変換します。

外形寸法表示:torch.Tensor.size()

現在のテンソルの寸法をチェック

例えば:

>>>インポートトーチ
>>> = torch.Tensor([[[1、2]、[3、4]、[5、6]]])
>>> a.size()
torch.Size([1 、3、2])

変形テンソル:torch.Tensor.view(*引数)→テンソル

同じデータが異なるサイズテンソルを返します。返されたテンソルは同じデータと元のテンソルの要素の数が同じでなければなりませんが、異なるサイズを有することができます。テンソルは、連続連続している必要があります()表示することができます。

例えば:

>>> X = torch.randn(2,9)
>>> x.size()
torch.Size([2,9])
>>> X 
テンソル([[ - 1.6833、-0.4100、-1.5534、-0.6229 、-1.0310、-0.8038、0.5166、0.9774、
     0.3455]、
    [-0.2306、0.4217、1.2874、-0.3618、1.7872、-0.9012、0.8073、-1.1238、
     -0.3405]]) 
>>> Y = x.view(3 、6)
>>> y.size()
torch.Size([3,6])
>>> Y 
テンソル([ - 1.6833、-0.4100、-1.5534、-0.6229、-1.0310、-0.8038]、
    [0.5166 、0.9774、0.3455、-0.2306、0.4217、1.2874]、
    [-0.3618、1.7872、-0.9012、0.8073、-1.1238、-0.3405]])
>>> Z = x.view(2、3、3)
>>> z.size()
torch.Size([2、3、3])
>>>Z 
テンソル([[[ - 1.6833、-0.4100、-1.5534]、
     [-0.6229、-1.0310、-0.8038]、
     [0.5166、0.9774、0.3455]]、

    [[-0.2306、0.4217、1.2874]、
     [-0.3618、1.7872、-0.9012]、
     [0.8073、-1.1238、-0.3405]]])

xおよびyは、各データZのデータの数と大きさが同じであるが、寸法の大きさや数を変更することが分かります。

圧縮/解凍テンソル:torch.squeeze()、torch.unsqueeze()

  • torch.squeeze(入力、DIM =なし、アウト=なし)

1つの除去テンソル入力形状と戻ります。(A×B×C×D):入力フォーム(A×​​1×B×1×C×1×D)である場合、出力形状であります

薄暗い与えられたとき、押圧操作にのみ与えられた次元にあります。例えば、入力の形状:(A×1×B)、スクイーズ(入力0)テンソルのみスクイーズ(入力1)と、変わらない、形状が(A×B)となります。

戻りテンソルとテンソル入力がメモリを共有するので、他に変更されます1の内容に変更します。

例えば:

X = torch.randn >>>(3 ,. 1、2。)
>>> X 
テンソル([[[ - 

    0.1986、0.4352]]、[[0.0971、0.2296]]、

    [[0.8339、-0.5433]]])
> 。>> x.squeeze()サイズ() #パラメータなし、要素の数は、次元1の全て削除する
torch.Sizeを([3,2])
>>> x.squeeze()
テンソル([ - 0.1986 、0.4352]、
    [0.0971、0.2296]、
    [0.8339、-0.5433]]) 
>>> torch.squeeze(X、0).size()#の追加パラメータ、要素の最初の次元を除去する、ための作業をしません第一の次元における2つの要素がある
torch.Size([3、1、2])
>>> torch.squeeze(X、1).size()#の追加パラメータは、要素の第2の寸法が除去され、正確に1、作用
torch.Sizeは([3、2])

あなたは追加のパラメータを見ることができる場合は、1位の唯一の次元サイズが表示されなくなります

  • torch.unsqueeze(入力、暗く、外=なし)

寸法インサート1つの入力現像位置に、新しいテンソルを返します。

戻りテンソルとテンソル入力がメモリを共有するので、他に変更されます1の内容に変更します。

DIMが負の場合、変換がされるDIM + input.dim()+ 1

例えば上記のデータが続きます。

>>> x.unsqueeze(0).size()
torch.Size([1、3、1、2])
>>> x.unsqueeze(0)
テンソル([[[[ - 0.1986、0.4352]、

     [ 

     [0.0971、0.2296]]、[[0.8339、-0.5433]]]])
>>> x.unsqueeze(-1).size()
torch.Size([3、1、2、1])
>>> X .unsqueeze(-1)
テンソル([[[[ - 0.1986]、
     [0.4352]]]、

    [[[0.0971]、
     [0.2296]]]、

    [[[0.8339]、
     [-0.5433]]]])

これは、寸法を追加して、指定された場所で見ることができます。

テンソルを展開します。torch.Tensor.expand(*サイズ)→テンソル

新しいビューの戻りテンソルは、単一のディメンションは、より大きなサイズに拡大します。テンソルは、より高い次元に拡張することができ、新たな付加次元が前面に添付されます。新しいメモリを割り当てる必要はありませんテンソル展開しますが、ストライドによって0に設定されているビューの唯一の新しいテンソル、一次元のビットより高い次元で展開されます。新しいケースを割り当てることなく、任意の一次元メモリは、任意の値に拡張することができます。

例えば:

>>> X = torch.Tensor([1]、[2]、[3]])
>>> x.size()
torch.Size([3,1])
>>> x.expand(3、 4)
テンソル([1、1、1、1]、
    [2、2、2、2]、
    [3、3、3、3])
>> > x.expand(3、-1)
テンソル([1]、
    [2]、
    [3]])

変更することはできませんていない場合、それは1つだけの大きさ、1を展開することができるように拡張は、3行4列、充填プロセスの効果-1と1となった後3は、元のデータ行1であり、サイズが1ありませんディメンションは、記入し、元のように行かなければなりません。

繰り返しテンソル:torch.Tensor.repeat(*サイズ)

所定の寸法に沿って繰り返しテンソル。)(拡張とは異なり、この関数は、データテンソルをコピーします。

例えば:

>>> X = torch.Tensor([1、2、3])
>>> x.size()
torch.Size([3])
>>> x.repeat(4、2)
    [1、2。 、3、1、2、3]、
    [1、2、3、1、2、3]、
    [1、2、3、1、2、 3])
>>> x.repeat(4、2).size()
torch.Size([4,6])

元のデータ列1~3は、行方向に2倍カラム方向に拡大、4倍元に拡大、4行6列となります。

変更が全体元のデータに行われたときには、それぞれに、元のデータ、各単位は同一であり、4行2列の行列に、指定された寸法及びサイズを繰り返し、その後、見ることができますユニット。

行列の転置:torch.t(入力、アウト=なし)→テンソル

マトリックス(二次元テンソル)の入力、及び転置0、1次元。これは、関数の転置(入力、0、1)速記関数として見ることができます。

例えば:

X = torch.randn >>>(3 ,. 5)
>>> X 
テンソル([ - 1.0752、-0.9706、-0.8770、-0.4224、0.9776]、
    [0.2489、-0.2986、-0.7816、-0.0823、1.1811] 、
    [-1.1124、0.2160、-0.8446、0.1762、-0.5164]]) 
>>> XT()
テンソル([ - 1.0752、0.2489、-1.1124]、
    [-0.9706、-0.2986、0.2160]、
    [-0.8770、 -0.7816、-0.8446]、
    [-0.4224、-0.0823、0.1762]、
    [0.9776、1.1811、-0.5164]]) 
>>> torch.t(X)#別の使用
テンソル([ - 1.0752、0.2489 、 -1.1124]、
    [-0.9706、-0.2986、0.2160]、
    [-0.8770、-0.7816、-0.8446]、
    [-0.4224、-0.0823、0.1762]、
    [0.9776、1.1811、-0.5164]])

テンソルは、2次元行列でなければならない場合、それを使用することができます。

外形寸法交換:torch.transpose()、torch.Tensor.permute()

  • torch.transpose(入力、DIM0、DIM1、アウト=なし)→テンソル

入力スイッチマトリックスの入力に戻ります。スワップ寸法はDIM0とDIM1。変更がさらに修正原因となっているので、入力、出力テンソルテンソルは、メモリを共有しました。

例えば:

>>> X = torch.randn(2、4、3)
>>> X 
テンソル([[[ - 1.2502、-0.7363、0.5534]、
     [-0.2050、3.1847、-1.6729]、
     [-0.2591、-0.0860、 0.4660]、
     [-1.2189、-1.1206、0.0637]]、

    [[1.4791、-0.7569、2.5017]、
     [0.0098、-1.0217、0.8142]、
     [-0.2414、-0.1790、2.3506]、
     [-0.6860、-0.2363、 1.0481]]])>>>
torch.transpose(X、1、2).size()
torch.Size([2,3,4])
>>> torch.transpose(X、1、2)
テンソル([ [-1.2502、-0.2050、-0.2591、-1.2189]、
     [-0.7363、3.1847、-0.0860、-1.1206]、
     [0.5534、-1.6729、0.4660、0.0637]]、

    [[1.4791、0.0098、-0.2414、 - 0.6860]、 
     [-0.7569、-1.0217、-0.1790、-0.2363]、
     [2.5017、0.8142、2.3506、1.0481]]])
>>> torch.transpose(X、0、1).size()
torch.Size([4、2、3])
>>> torch.transpose(X、0、1)
テンソル([[[ - 1.2502、 -0.7363、0.5534]、
     [1.4791、-0.7569、2.5017]]、

    [[-0.2050、3.1847、-1.6729]、
     [0.0098、-1.0217、0.8142]]、

    [[-0.2591、-0.0860、0.4660]、
     [ - 

    0.2414、-0.1790、2.3506]]、[[-1.2189、-1.1206、0.0637]、
     [-0.6860、-0.2363、1.0481]]])

多次元テンソルに移調することができます

  • torch.Tensor.permute(暗くなります)

テンソル寸法転置

例えば上記のデータが続きます。

>>> x.size()
torch.Size([2、4、3])
>>> x.permute(2、0、1).size()
torch.Size([3、2、4])
> >> x.permute(2、0、1)
テンソル([[[ - 1.2502、-0.2050、-0.2591、-1.2189]、
     [1.4791、0.0098、-0.2414、-0.6860]]、

    [[-0.7363、3.1847、 -0.0860、-1.1206]、
     [-0.7569、-1.0217、-0.1790、-0.2363]]、

    [[0.5534、-1.6729、0.4660、0.0637]、
     [2.5017、0.8142、2.3506、1.0481]]])

充填プロセスにおける各次元の直接の指標は、テンソルは、それは二十から二交流に限定されるものではなく、サイズ指定された次元を交換します。

すべてのこの記事のために、私は学ぶために役立つことがしたいだと、私はあなたが私たちをサポートします願っています。

時間: 2019年8月17日

おすすめ

転載: www.cnblogs.com/leebxo/p/11827819.html