PyTorchの基本(1)-----テンソル(テンソル)

序文

多くの人が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

おすすめ

転載: blog.csdn.net/dongjinkun/article/details/113781001