序文
多くの人がPyTorchをGoogleのTensorflowと比較しますが、これらは2つの最も人気のあるディープラーニングフレームワークであるため、これは間違いなく問題ではありません。しかし、PyTorchに関しては、実際には最初にTorchについて話す必要があります。
トーチとは何ですか?
TorchはNumpyに似たTensor操作ライブラリです。Numpyとは異なり、TorchはGPUを非常によくサポートします。Luaはトーチの上部パッケージです。Luaは非常に高速ですが、Luaはニッチすぎるため、PyTorchが判明しました。
PyTorchは、自然言語処理などのアプリケーション向けのトーチベースのPythonオープンソース機械学習ライブラリです。これは主にFacebookの人工知能研究グループによって開発されています。Uberの「Pyro」もこのライブラリを使用しています。
PyTorchは、次の2つの高度な機能を提供するPythonパッケージです。
- 強力なGPUアクセラレーション(NumPyなど)を使用したテンソル計算
- 自動導出システムを含むディープニューラルネットワーク
最後に、インターネット上でTensorflowとPyTorchの比較はすでにたくさんあります。ここでは詳しく説明しません。興味がある場合は、この記事を読むことができますhttps://zhuanlan.zhihu.com/p/28636490。
1.テンソルとは(Tensor)
PyTorchは、テンソルを処理するためのライブラリです。テンソルは、PyTorchの基本的な操作単位です。テンソルは、数値、ベクトル、行列、または任意のn次元配列です。テンソルはNumpyのndarrayと同じであり、どちらも多次元行列を表します。ndarrayとの最大の違いは**です。PyTorchのTensorはGPUで実行できますが、numpyのndarrayはCPUでのみ実行できます。GPUで実行すると、計算が大幅に高速化されます。****
- ガイドパッケージ
# 首先要导入相关的包,以保证程序可以正常运行
import numpy as np
import torch
# 我们可以通过打印PyTorch的版本来确定是否导入成功
torch.__version__
- 単純なテンソルを作成する
# 生成一个2行3列的矩阵
x = torch.rand(2,3)
x
- Tensorのサイズを確認してください
# 可以使用与numpy相同的shape属性查看
print(x.shape)
# 也可以用使用size()函数
print(x.size())
- 多次元テンソルを生成する
y = torch.rand(2,3,4,5)
print(y.shape) # 打印y张量的大小
y
同形性の意味では、0次テンソル(r = 0)はスカラー(Scalar)、1次テンソル(r = 1)はベクトル(Vector)、2次テンソル(r = 2)はItです。は行列と呼ばれ、3次以上はまとめて多次元テンソルと呼ばれます。
- その中で、専門はスカラーです。最初にスカラーを生成しましょう。
scalar = torch.tensor(3.1415926)
scalar
# 对于标量, 我们可以直接使用.item()从中取出其对应的Python对象
scalar.item()
# 特别的,如果张量中只有一个元素,也可以用.item()取出对应的Python对象
tensor1 = torch.tensor([3.1415926])
tensor1.item()
2.テンソルの作成方法(Tensor)
- [0,1]一様分布を使用してテンソルをランダムに初期化します
rnd = torch.rand(5,3)
rnd
- 1つのパディングを使用
one = torch.ones(2,2)
one
- 0パディングを使用する
zero = torch.zeros(2,2)
zero
- 単位行列を初期化します。つまり、対角線は1で、その他は0です。
eye = torch.eye(2,2)
eye
一般的に使用される3つの方法
PyTorchのテンソル演算APIはNumpyと非常によく似ています。Numpyの関連する演算に精通している場合、2つは基本的に同じです。
- まず、新しいテンソルTensorを作成します
rnd = torch.randn(3,3)
rnd
次に、次の操作に進みます。
- 線に沿って最大値を取る
max_value,max_idx = torch.max(x,dim = 1)
max_value,max_idx
- 列に沿って最大値を取ります
max_value,max_idx = torch.max(x,dim = 0)
max_value,max_idx
- 各行の合計を求めます
sum_x = torch.sum(x,dim = 1)
sum_x
- 各列の合計を求めます
sum_y = torch.sum(x,dim = 0)
sum_y
- 2つのテンソルの合計を求めます
# 首先我们需要另建一个张量y
y = torch.randn(3,3)
z = x+y
z
- 「-」で終わる操作は、元の変数を結果に置き換えます。たとえば、「x.copy_(y)」はxを変更します。
x = torch.randn(3,3)
print('修改前', x)
y = torch.randn(3,3)
x.add_(y)
print('修改后', x)
第四に、TensorオブジェクトとNumpyオブジェクト間の変換
Tensorオブジェクトとnumpyオブジェクトはメモリを共有するため、それらの間の変換は高速で、リソースをほとんど消費しません。しかし、これは、一方が変更されると、もう一方も変更されることも意味します。
- Numpyオブジェクトへのテンソル
a = torch.randn((3,2))
# 将tensor转为numpy
numpy_a = a.numpy()
print(numpy_a)
- NumpyオブジェクトをTensorに変換する
torch_a = torch.from_numpy(numpy_a)
print(torch_a)
V.参考文献
https://github.com/zergtant/pytorch-handbook/blob/master/chapter2/2.1.1.pytorch-basics-tensor.ipynb