参考動画:
Depth Eye公式アカウント:01-02 - Tensorの導入と作成
torch.tensor()
b = torch.tensor(data,
dtype=None,
device=None,
requires_grad=False,
pin_memory=False)
data: 作成されたテンソルのデータソース (list または numpy にすることができます)
dtype: データ型、デフォルトはデータと一致します
device: 選択されたデバイス、cuda/cpu
require_grad: 勾配が必要かどうか
pin_memory: ページ ロック メモリがあるかどうか (変換効率に関連しており、通常は False に設定されます)
import numpy as np
import torch
arr = np.ones((3, 3))
print("ndarray的数据类型:", arr.dtype)
t = torch.tensor(arr)
# t = torch.tensor(arr, device='cuda')
print(t)
出力:
ndarray的数据类型: float64
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]], dtype=torch.float64)
torch.from_numpy(ndarray)
関数: numpy からテンソルを作成
注: torch.from_numpy から作成されたテンソルは元の ndarray とメモリを共有し、一方のデータが変更されると、もう一方も変更されます。
import numpy as np
import torch
arr = np.array([[1, 2, 3], [4, 5, 6]])
t = torch.from_numpy(arr)
print(t)
arr[0, 0] = 7
print(t)
出力:
tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)
tensor([[7, 2, 3],
[4, 5, 6]], dtype=torch.int32)
トーチゼロス()
関数: 指定されたサイズに基づいてすべて 0 のテンソルを作成します。
torch.zeros(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
*size: 作成されたテンソルのサイズ
out: どのテンソルに出力されるか
dtype: 作成されたテンソルのコンテンツのタイプ
レイアウト: メモリ内のテンソルの分散方法、現在サポートされているdevice: テンソルが配置されtorch.strided
てtorch.sparse_coo
いるデバイス、GPU /cpu
require_grad: グラデーションが必要かどうか
import torch
t = torch.zeros((3, 3)) #不使用out参数创建
tt = torch.tensor([2.])
torch.zeros((3, 3), out=tt) #使用out参数输出到已有tensor
print(t, '\n', tt)
出力:
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
次のように使用する場合、注意すべき点が 1 つあります。
t = torch.tensor([2.])
p = torch.zeros((3, 3), out=t)
次にt
、 と はp
同じアドレスを指します。
torch.zeros_like()
機能: 入力の形状に基づいて all-0 テンソルを作成します。
torch.zeros_like(input,
dtype=None,
layout=None,
device=None,
requires_grad=False)
入力: 新しいテンソルの作成に使用される形状のベース。生成されたテンソルは入力と同じ形状を持ちます。
注: 入力は tensor のみにすることができ、np.array は使用できません。
残りのパラメータは torch.zeros() と同じです。
import numpy as np
import torch
data = torch.tensor(np.array([[1, 2], [3, 4]]))
t = torch.zeros_like(data)
print(t)
出力:
tensor([[0, 0],
[0, 0]], dtype=torch.int32)
トーチワンズ()
機能: 基本的に torch.zeros() と同じように、指定されたサイズに基づいてすべて 1 のテンソルを作成します。
torch.ones(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
torch.ones_like()
機能: 基本的に torch.zeros_like() と同じように、入力の形状に基づいて all-1 テンソルを作成します。
torch.ones_like(input,
dtype=None,
layout=None,
device=None,
requires_grad=False)
トーチ.フル()
機能: 指定されたサイズに従ってテンソルを作成し、すべての要素を fill_value に割り当てます。
torch.full(size,
fill_value,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
fill_value: 渡されたパラメータ、full() は、作成されたすべてのテンソルを fill_value に割り当てます。
import numpy as np
import torch
t = torch.full(size=(3, 3), fill_value=4)
print(t)
出力:
tensor([[4, 4, 4],
[4, 4, 4],
[4, 4, 4]])
トーチ.arange()
機能: 算術 1 次元テンソルを作成します。
torch.arange(start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
範囲は [開始、終了)、左クローズおよび右オープン、ステップはステップ サイズです。その他のパラメータは上記関数と同じです。
import numpy as np
import torch
t = torch.arange(start=3, end=6, step=1)
print(t)
出力:
tensor([3, 4, 5])
トーチ.linspace()
機能: 均等に分割された 1 次元テンソルを作成します。
linspace: 線形空間。以下のログスペースに似ています。
torch.linspace(start=0,
end,
steps=100,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
範囲は [start, end] で、閉じた間隔です (arange とは異なります)。ステップは、生成されたテンソルの長さです。
import numpy as np
import torch
t = torch.linspace(start=2, end=10, steps=4)
print(t)
出力:
tensor([ 2.0000, 4.6667, 7.3333, 10.0000])
torch.logspace()
機能: 対数的に分割された 1 次元テンソルを作成します。
logspace: ログ スペース。上記の linspace に似ています。
torch.logspace(start,
end,
steps=100,
base=10.0,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
start、end、stepsはlinspaceと同じです。Base は対数関数の底を指し、デフォルトは 10 です。
linspace との違いは、開始、終了、ステップを通じて列挙するシーケンスがテンソルの内容であり、ログベース log_{base}をその外側に配置する必要があることです。ログ_ _ベース_。一方、列挙するのは拠点を拠点とした勢力である。
次のコードを参照できます。
import numpy as np
import torch
t = torch.logspace(start=1, end=3, steps=3, base=10.0)
print(t)
出力:
tensor([ 10., 100., 1000.])
トーチ.eye()
機能: 2 次元テンソルである単位対角行列を作成します。デフォルトは正方行列です。
torch.eye(n,
m=None,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
n、m: 行列の行数と列数。通常、n を設定するだけで済みます。
import numpy as np
import torch
t = torch.eye(n=3)
p = torch.eye(n=3, m=4)
print(t)
print(p)
出力:
tensor([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
tensor([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.]])
トーチ.ノーマル()
関数: 与えられた平均μ \muに従ってμと標準偏差σ \sigmaσ、N ( μ , σ ) N(\mu,\sigma ) をN ( μ ,σ )は、サイズに応じた乱数を生成する(具体的にどのようにサイズを対応させるかについては後述する)。
torch.normal(mean,
std,
out=None)
means: 平均; std: 標準偏差。
平均と標準偏差のタイプは、float または tensor のいずれかです。このときの状況は4つありますが、まずはサンプルコードを見てみましょう。
import numpy as np
import torch
t1 = torch.normal(mean=2, std=3, size=(2, 3))
print("t1:\n", t1)
t2 = torch.normal(mean=torch.arange(1., 3.), std=torch.arange(3., 5.))
print("t2:\n", t2)
t3 = torch.normal(mean=1., std=torch.arange(1., 5.))
print("t3:\n", t3)
t4 = torch.normal(mean=torch.arange(1., 4.), std=2.)
print("t4:\n", t4)
出力:
t1:
tensor([[-0.1495, 0.2061, 3.0486],
[ 6.1257, 1.6023, 1.1515]])
t2:
tensor([-5.4967, 7.4201])
t3:
tensor([ 3.3218, 0.7347, -3.6644, 3.4812])
t4:
tensor([2.2250, 1.1026, 0.9171])
means と std は両方とも float です
サンプルコードの t1 を参照してください。
この時点で、生成するテンソルのサイズを示す別のパラメーター サイズを追加する必要があります。生成された t1 の各要素は、N (mean, std) N(mean, std)で構成されます。N (平均、_ _s t d )によって生成される乱数
means と std は両方ともテンソルです
サンプルコードの t2 を参照してください。
試してみると、mean と std の形状が同じである必要があるため、生成されるテンソルの対応する位置は、mean と std の対応する位置の平均と標準偏差からランダムに導出される数値になります。
平均は浮動小数点、標準はテンソルです
サンプルコードの t3 を参照してください。
生成されるテンソルは std と同じ形状を持ち、対応する位置は、mean と std の対応する位置の標準偏差によってランダムに生成される数値です。
平均はテンソル、標準は浮動小数点です
サンプルコードの t4 を参照してください。
生成されたテンソルは平均値と同じ形状を持ち、対応する位置は平均値と対応する位置の平均値の std によってランダムに生成された数値です。
トーチ.randn()
関数: 標準正規分布の生成N (0, 1) N(0,1)N ( 0 ,1 )。
torch.randn(*size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
import numpy as np
import torch
t = torch.randn((2, 3))
print(t)
出力:
tensor([[ 0.2370, -1.4351, -0.0624],
[ 0.7974, 1.2915, -1.0052]])
トーチ.randn_like()
機能: 指定されたテンソルと同じサイズの標準正規分布テンソルを生成します。(torch.zeros_like() および torch.ones_like() に類似)
import numpy as np
import torch
tmp = torch.ones((2, 3))
t = torch.randn_like(tmp)
print(t)
出力:
tensor([[-0.3384, -0.8061, 0.7020],
[ 0.1602, 0.6525, -0.6860]])
torch.rand()、torch.rand_like()
機能: 区間 [0,1) で一様分布を生成します。例は省略します。
torch.randint()、torch.randint_like()
機能:区間 [low, high) 内の整数の一様分布を生成します。
torch.randperm()
機能: 0 から n-1 までのランダムな置換を生成します。ここで、n はテンソルの長さです。
torch.randperm(n,
out=None,
dtype=torch.int64,
layout=torch.strided,
device=None,
requires_grad=False)
import numpy as np
import torch
t = torch.randperm(5)
print(t)
出力:
tensor([3, 2, 1, 0, 4])
トーチ.ベルヌーイ()
機能: 入力を確率として使用してベルヌーイ分布 (0-1 分布、2 点分布) を生成します。
torch.bernoulli(input,
*,
generator=None,
ont=None)
入力は確率値、つまりテンソルです。
import numpy as np
import torch
p = torch.rand((3, 3))
t = torch.bernoulli(p)
print("p:\n", p)
print("t:\n", t)
出力:
p:
tensor([[0.6881, 0.7921, 0.4212],
[0.6857, 0.4809, 0.4009],
[0.2400, 0.5160, 0.1303]])
t:
tensor([[1., 1., 1.],
[1., 1., 0.],
[0., 0., 0.]])