PyTorch中toch.tenssorとtoch.Tensorの違いを詳しく説明します。
4966 ワード
PyTorchはここ数年大火です。TensorFlowよりPyTorchはPython初心者の方が友好的で、使いやすいです。
ご存知のように、numpyはPythonにおけるデータ分析の専門的な第三者ライブラリとして、Pythonが保有するMathライブラリよりも速いです。同様に、PyTorchにはnumpyに似たライブラリがあり、Tensorと呼ばれています。Tensorはニューラルネットワーク界のnumpyと自称しています。
一、numpyとTensorの対比
比較項目
numpy
Tensor
同じ点
マルチ次元配列を定義し、スライス、次元変更、数学演算などを行うことができます。
マルチ次元配列を定義し、スライス、次元変更、数学演算などを行うことができます。
違い点
1、生成される配列のタイプはnumpy.ndarayである。
2、darrayをCPUに入れて演算します。
3、導入方式はimport numpy as npで、その後np.array([1,2]を通じて配列を作ります。
4、numpyにはx.type()の使い方がなく、type(x)しか使えません。
1、生成される配列のタイプはtoch.Tensorである。
2、GPUにtensorを入れて加速演算を行います(GPUがあれば)。
3、導入方式はimport touchで、その後toch.tensor(1,2)またはtouch.Tensor(1,2)を通じて配列を構築する。
4、Tensorでは配列の種類を調べてtype(x)を使ってもいいし、x.type()を使ってもいいです。ただし、x.type()の採用がより推奨されています。具体的な原因は以下の通りです。
例(以下のコードはすべてJupyter Notebookで実行され、かつ通過される):
numpy:
二、toch.tensorとtoch.Tensorの違い
注意深い読者が気づいたかもしれませんが、Tensorを通じて配列を作るには、toch.tenssor([1,2])またはtoch.Tensor([1,2])の2つの方法があります。この2つの方法にはどんな違いがありますか?
(1)toch.tensorはデータからデータのタイプを推論しますが、toch.Tensorはtoch.empty(ランダムにごみの配列を生成します。詳細は例をご参照ください。)とtoch.tenserの間の一種の混合です。しかし、データが入ると、toch.Tensorはグローバルデフォルトdtype(Float Tensor)を使用する。
(2)touch.tenssor(1)は固定値1を返し、touch.Tensor(1)は大きさ1のテンソルを返し、初期化された乱数値である。
PyTorchは不思議な道具で、その中のTensorの使い方はnumpyよりずっと豊富です。練習中にまとめて上手になります。
ここでPyTorch中toch.tensorとtoch.Tensorの違いについて詳しく説明した文章を紹介します。PyTorch中toch.tensorとtoch.Tensorの内容は以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。
ご存知のように、numpyはPythonにおけるデータ分析の専門的な第三者ライブラリとして、Pythonが保有するMathライブラリよりも速いです。同様に、PyTorchにはnumpyに似たライブラリがあり、Tensorと呼ばれています。Tensorはニューラルネットワーク界のnumpyと自称しています。
一、numpyとTensorの対比
比較項目
numpy
Tensor
同じ点
マルチ次元配列を定義し、スライス、次元変更、数学演算などを行うことができます。
マルチ次元配列を定義し、スライス、次元変更、数学演算などを行うことができます。
違い点
1、生成される配列のタイプはnumpy.ndarayである。
2、darrayをCPUに入れて演算します。
3、導入方式はimport numpy as npで、その後np.array([1,2]を通じて配列を作ります。
4、numpyにはx.type()の使い方がなく、type(x)しか使えません。
1、生成される配列のタイプはtoch.Tensorである。
2、GPUにtensorを入れて加速演算を行います(GPUがあれば)。
3、導入方式はimport touchで、その後toch.tensor(1,2)またはtouch.Tensor(1,2)を通じて配列を構築する。
4、Tensorでは配列の種類を調べてtype(x)を使ってもいいし、x.type()を使ってもいいです。ただし、x.type()の採用がより推奨されています。具体的な原因は以下の通りです。
例(以下のコードはすべてJupyter Notebookで実行され、かつ通過される):
numpy:
import numpy as np
x = np.array([1,2])
# , , Jupyter Notebook , print() ~
x #array([1, 2])
print(x) #[1 2]
type(x) #numpy.ndarray
print(type(x)) #<class 'numpy.ndarray'>
# :numpy x.type() , type(x)!!!
Tensor:
import torch # , import torch, import Tensor!!!
x = torch.tensor([1,2])
x #tensor([1, 2])
print(x) #tensor([1, 2]), , numpy !
type(x) #torch.Tensor
print(type(x)) #<class 'torch.Tensor'>
x.type() #'torch.LongTensor', :numpy , !!!
print(x.type()) #torch.LongTensor, :numpy , !!!
numpyとTensorの使用には他の違いがあります。本文の重点ではないので、詳しくは述べません。今後は更新するかもしれません。 二、toch.tensorとtoch.Tensorの違い
注意深い読者が気づいたかもしれませんが、Tensorを通じて配列を作るには、toch.tenssor([1,2])またはtoch.Tensor([1,2])の2つの方法があります。この2つの方法にはどんな違いがありますか?
(1)toch.tensorはデータからデータのタイプを推論しますが、toch.Tensorはtoch.empty(ランダムにごみの配列を生成します。詳細は例をご参照ください。)とtoch.tenserの間の一種の混合です。しかし、データが入ると、toch.Tensorはグローバルデフォルトdtype(Float Tensor)を使用する。
(2)touch.tenssor(1)は固定値1を返し、touch.Tensor(1)は大きさ1のテンソルを返し、初期化された乱数値である。
import torch # , import torch, import Tensor!!!
x = torch.tensor([1,2])
x #tensor([1, 2])
print(x) #tensor([1, 2]), , numpy !
type(x) #torch.Tensor
print(type(x)) #<class 'torch.Tensor'>
x.type() #'torch.LongTensor', :numpy , !!!
print(x.type()) #torch.LongTensor, :numpy , !!!
y = torch.Tensor([1,2])
y #tensor([1., 2.]), torch.Tensor dtype(FloatTensor)
print(y) #tensor([1., 2.]), torch.Tensor dtype(FloatTensor)
type(y) #torch.Tensor
print(type(y)) #<class 'torch.Tensor'>
y.type() #'torch.FloatTensor', : !tensor->LongTensor,Tensor->FloatTensor!!!
print(y.type()) #torch.FloatTensor, : !tensor->LongTensor,Tensor->FloatTensor!!!
z = torch.empty([1,2])
z # , :tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]])
print(z) # , :tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]])
type(z) #torch.Tensor
print(type(z)) #<class 'torch.Tensor'>
z.type() #'torch.FloatTensor', :empty() torch.FloatTensor torch.LongTensor
print(z.type()) #torch.FloatTensor, :empty() torch.FloatTensor torch.LongTensor
#torch.tensor(1)、torch.Tensor(1) torch.empty(1) :
t1 = torch.tensor(1)
t2 = torch.Tensor(1)
t3 = torch.empty(1)
t1 #tensor(1)
print(t1) #tensor(1)
type(t1) #torch.Tensor
print(type(t1)) #<class 'torch.Tensor'>
t1.type() #'torch.LongTenso'
print(t1.type()) #torch.LongTensor
t2 # , :tensor([2.8026e-45]),tensor([0.])
print(t2) # , :tensor([2.8026e-45]),tensor([0.])
type(t2) #torch.Tensor
print(type(t2)) #<class 'torch.Tensor'>
t2.type() #'torch.FloatTensor'
print(t2.type()) #torch.FloatTensor
t3 # , :tensor([0.]),tensor([1.4013e-45])
print(t3) # , :tensor([0.]),tensor([1.4013e-45])
type(t3) #torch.Tensor
print(type(t3)) #<class 'torch.Tensor'>
t3.type() #'torch.FloatTensor'
print(t3.type()) #torch.FloatTensor
上記で述べたように、Tensorには、x.type()を使用してデータタイプを見ることがより推奨されています。x.type()の出力結果は'toch.LongTensor'または'totch.Float Tensor'であるため、2つの配列の種類の違いが見られます。type(x)を採用すると、一色の出力結果はtoch.Tensorであり、タイプの違いは表現できません。PyTorchは不思議な道具で、その中のTensorの使い方はnumpyよりずっと豊富です。練習中にまとめて上手になります。
ここでPyTorch中toch.tensorとtoch.Tensorの違いについて詳しく説明した文章を紹介します。PyTorch中toch.tensorとtoch.Tensorの内容は以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。