ゼロからPytorchノートを深く学ぶ——テンソルの作成(上)

15403 ワード

pytorchの基本データ型であるテンソル(Tensor)では、テンソルはいったい何なのでしょうか.テンソルはNumpyにおけるndarrayに類似しており,深さ学習の基礎はニューラルネットワーク構造であり,Pytorchではテンソルはニューラルネットワークを構築する基礎であることが知られている.
比較的重要な点は,テンソルがGPU上で計算できることである.したがって本質的にPyTorchはテンソルを扱うライブラリである.1つのテンソルは、数値、ベクトル、マトリクス、または任意のn次元配列です.
次に、1次元テンソル、2次元テンソル、3次元テンソルをそれぞれ示します.次に、テンソルの作成方法を見てみましょう.
テンソルの相関パラメータ:torch.tensor(data,dtype=None,device=None,requires_grad=False,pin_memory=False)data:データ、list,numpyのndarray dtype:データ型、デフォルトはdataのタイプと一致device:存在するデバイス、gpu/cpu requires_grad:勾配が必要かどうかは、ニューラルネットワーク構造が勾配pinを要求することが多いためです.memory:ロックメモリに保存するかどうかNumpyを使用してテンソルを作成npでndarrayを作成し、テンソルに変換します.データ型はデフォルトでdataと一致します.ここでは3*3の全1テンソルを作成します.
import torch
import numpy as np
arr = np.ones((3,3))
print(" :",arr.dtype) # : float64
t = torch.tensor(arr)
print(t)

GPU環境を構築した場合は、次のコードでテンソルをGPUに作成できます.
arr = np.ones((3,3))#np 
print(" :",arr.dtype)
t = torch.tensor(arr,device='cuda')
print(t)

Numpyによってテンソルを作成する方法はtorchを使用することである.from_numpy(ndarray).torch.from_numpy(ndarray)は、1つのndarrayを受け入れるだけでよいことがわかります.
arr = np.array([[1,2,3],[4,5,6]])# 
t = torch.from_numpy(arr)
print(arr)
print(t)

しかし、注意しなければならないのはtorchからです.from_numpyが作成したtensorとndarrayはメモリを共有し、そのうちの1つのデータを変更すると、もう1つも変更されます.たとえばarrayの内容を変更します.
arr = np.array([[1,2,3],[4,5,6]])
t = torch.from_numpy(arr)# array 
arr[0,0] = 999
print(arr)
print(t)

あるいは、テンソルの内容を変更します.
arr = np.array([[1,2,3],[4,5,6]])
t = torch.from_numpy(arr)# tensor 
t[0,0] = -888
print(arr)
print(t)

全0テンソルを作成するにはtorchを使用します.zeros()は、全0テンソルを作成するために使用されます:zeros(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False).size:テンソルの形状out:出力テンソルdtype:データ型layout:メモリ内のレイアウト形式、strided,sparse_coo等device:所在設備、gpu/cpu requires_grad:勾配が必要かどうか
t1 = torch.tensor([1,2,3])# t1 , 
t = torch.zeros((2,3),out=t1)# t t1
print(t,'
'
,t1) print(id(t),id(t1),id(t)==id(t1))

上記のidにより、tとt 1のidは同じであるため、tとt 1がメモリ内で指すメモリブロックは同じであることが分かった.
通過するzeros_like()は、全0テンソル:torchを作成することもできる.zeros_like(input,dtype=None,layout=None,device=None,requires_grad=False)は、inputシェイプに基づいて全0テンソルを作成します.たとえば、3*5の全0テンソルを作成します.
input = torch.empty(3, 5)
t = torch.zeros_like(input)
print(t)

全1テンソルの作成と全0テンソルの作成はほぼ一致し、torch.ones() torch.ones_like()
数値に基づいてテンソルtorchを作成する.full torch.full(size,fill_value,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)の新しい出現パラメータ:fill_value:入力された値
たとえば、2*2を作成する要素はすべて8のテンソルです.
t = torch.full((2,2),8)
print(t)


torch.full_like() torch.full_like(input, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
input = torch.empty(3, 5)# 
t = torch.full_like(input,8)
print(t)

上はinputの形状に基づいて要素が8のテンソルを作成しました.
等差を作成する1次元テンソルはtorch.arang()等差を作成する1次元テンソル:arange(start=0,end,step=1,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)start:数列の開始値end:数列の終了値が取れず、end-1 step:公差(ステップ長)しか取れず、デフォルトは1 t=torch.arange(1,9,2) print(t)
等間隔(均等)の1次元テンソルtorchを作成する.linspace(start,end,steps=100,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)そのうち:steps:作成された1次元テンソルの要素個数end:終了位置
t = torch.linspace(1,9,5)
print(t)
t = torch.linspace(1,9,7)
print(t)

対数平均の1次元テンソルtorchを作成します.logspace(start,end,steps=100,base=10.0,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)パラメータ:base:対数関数の下、デフォルトは10
t = torch.logspace(start=-5, end=10,steps=4)
print(t)

単位対角行列(2次元テンソル)torchを作成する.eye(n,m=None,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)パラメータ:m:行列行数n:行列列数
t = torch.eye(4)
print(t)# 。