Pytorch のテンソル データ構造の詳細な例

WBOY
リリース: 2022-09-14 17:25:53
転載
2842 人が閲覧しました

【関連する推奨事項: Python3 ビデオ チュートリアル ]

torch.Tensor

torch.Tensor は、numpy の array に似た、単一のデータ型の 要素を含む多次元行列です。 Tensor は、Python のリストまたは
シーケンス データ を変換する torch.tensor() を使用して生成できます。生成されるものは dtype で、デフォルトは torch.FloatTensor## です#。

torch.tensor()

は常にデータをコピーします。 Tensor データがあり、その requires_grad プロパティを変更したいだけの場合は、コピーを避けるために requires_grad_() または detach() を使用します。 numpy 配列があり、コピーを避けたい場合は、torch.as_tensor() を使用してください。

1. 指定されたデータ型の Tensor は、パラメーター
torch.dtype

および/または torch.device をコンストラクターに渡すことによって生成できます。 ##既存の tensor の torch.device および/または torch.dtype を変更するには、

to()
メソッドの使用を検討してください。

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:py;">&gt;&gt;&gt; torch.ones([2,3], dtype=torch.float64, device=&quot;cuda:0&quot;) tensor([[1., 1., 1.], [1., 1., 1.]], device=&amp;#39;cuda:0&amp;#39;, dtype=torch.float64) &gt;&gt;&gt; torch.ones([2,3], dtype=torch.float32) tensor([[1., 1., 1.], [1., 1., 1.]])</pre><div class="contentsignin">ログイン後にコピー</div></div> 2、Tensor コンテンツは、Python のインデックス作成またはスライスを通じてアクセスおよび変更できます:

>>> matrix = torch.tensor([[2,3,4],[5,6,7]])
>>> print(matrix[1][2])
tensor(7)
>>> matrix[1][2] = 9
>>> print(matrix)
tensor([[2, 3, 4],
        [5, 6, 9]])
ログイン後にコピー
3、

torch.Tensor.item()

または

int()## を使用します。 からの # メソッドのみ 値の Tensor から Python 番号を取得します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:py;">&gt;&gt;&gt; x = torch.tensor([[4.5]]) &gt;&gt;&gt; x tensor([[4.5000]]) &gt;&gt;&gt; x.item() 4.5 &gt;&gt;&gt; int(x) 4</pre><div class="contentsignin">ログイン後にコピー</div></div>4。Tensor はパラメーター requires_grad=True を使用して作成できるため、

torch.autograd

は関連する操作を記録します: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:py;">&gt;&gt;&gt; x = torch.tensor([[1., -1.], [1., 1.]], requires_grad=True) &gt;&gt;&gt; out = x.pow(2).sum() &gt;&gt;&gt; out.backward() &gt;&gt;&gt; x.grad tensor([[ 2.0000, -2.0000], [ 2.0000, 2.0000]])</pre><div class="contentsignin">ログイン後にコピー</div></div>5。各テンソルにはデータを保存するための対応する torch.Storage があります。 tensor クラスは、多次元のストライド ビューを提供し、数値演算を定義します。

Tensor データ型Torch は 7 つの CPU テンソル タイプと 8 つの GPU テンソル タイプを定義します:

torch.TensorPytorch のテンソル データ構造の詳細な例 は、デフォルトのテンソル型 (

torch.FloatTensor

) の略称であり、32 ビット浮動小数点データ型です。 Tensor の属性Tensor には、データ型、Tensor 次元、Tensor サイズなどの多くの属性があります。

データ型: torch.tensor() メソッドの dtype パラメーター値を変更することで、さまざまなテンソル データ型を設定できます。

次元: さまざまなタイプのデータを、さまざまな次元のテンソルで表すことができます。スカラーは 0 次元のテンソル、ベクトルは 1 次元のテンソル、行列は 2 次元のテンソルです。カラー画像には rgb の 3 つのチャネルがあり、3 次元テンソルとして表現できます。ビデオには時間次元もあり、いくつかの角括弧 [次元の数] を使用した 4 次元テンソルとして表現できます。テンソルの次元は、 dim() メソッドを使用して取得できます。
  • Size:shape 属性または size() メソッドを使用して各次元のテンソルの長さを表示でき、view() メソッドまたは reshape() メソッドを使用してサイズを変更できます。テンソルの。
  • #サンプル コードは次のとおりです。
  • matrix = torch.tensor([[[1,2,3,4],[5,6,7,8]],
                           [[5,4,6,7], [5,6,8,9]]], dtype = torch.float64)
    print(matrix)               # 打印 tensor
    print(matrix.dtype)     # 打印 tensor 数据类型
    print(matrix.dim())     # 打印 tensor 维度
    print(matrix.size())     # 打印 tensor 尺寸
    print(matrix.shape)    # 打印 tensor 尺寸
    matrix2 = matrix.view(4, 2, 2) # 改变 tensor 尺寸
    print(matrix2)
    ログイン後にコピー
  • プログラムの出力は次のとおりです。

Pytorch のテンソル データ構造の詳細な例## view と reshape の違い

両方のメソッドは、テンソルの形状を変更するために使用されます。view() は、連続性条件 (
contiguous

) を満たすテンソルの操作にのみ適しています。 、 while reshape() ) 同時に、連続性条件を満たさないテンソルを操作することもできます。テンソル連続性条件 (

contiguous

) が満たされると、a.reshape() によって返される結果は a.view() と同じになり、新しいメモリ空間は開かれません。

は満足できません view() メソッドを直接使用すると失敗します reshape() はまだ便利ですが、メモリ空間を再度オープンし、以前のメソッドとメモリを共有しませんテンソル、つまり、"copy" (最初に contiguous() メソッドを呼び出し、次に view() メソッドを使用するのと同じです)。 さらに理解するには、この記事を参照してください。Tensor と ndarray1、tensor と numpy 配列。 .numpy()
メソッドを使用して Tensor から numpy 配列を取得することも、

torch.from_numpy

を使用して numpy 配列から Tensor を取得することもできます。これら 2 つのメソッドに関連付けられた Tensor 配列と numpy 配列はデータ メモリを共有します。テンソルの

clone

メソッドを使用してテンソルをコピーし、この関連付けを解除できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:py;">arr = np.random.rand(4,5) print(type(arr)) tensor1 = torch.from_numpy(arr) print(type(tensor1)) arr1 = tensor1.numpy() print(type(arr1)) &quot;&quot;&quot; &lt;class &amp;#39;numpy.ndarray&amp;#39;&gt; &lt;class &amp;#39;torch.Tensor&amp;#39;&gt; &lt;class &amp;#39;numpy.ndarray&amp;#39;&gt; &quot;&quot;&quot;</pre><div class="contentsignin">ログイン後にコピー</div></div>2、item() メソッドと tolist() メソッドは、テンソルを Python の数値と数値のリストに変換できます

# item方法和tolist方法可以将张量转换成Python数值和数值列表
scalar = torch.tensor(5)  # 标量
s = scalar.item()
print(s)
print(type(s))

tensor = torch.rand(3,2)  # 矩阵
t = tensor.tolist()
print(t)
print(type(t))
"""
1.0
<class &#39;float&#39;>
[[0.8211846351623535, 0.20020723342895508], [0.011571824550628662, 0.2906131148338318]]
<class &#39;list&#39;>
"""
ログイン後にコピー

创建 Tensor

创建 tensor ,可以传入数据或者维度,torch.tensor() 方法只能传入数据,torch.Tensor() 方法既可以传入数据也可以传维度,强烈建议 tensor() 传数据,Tensor() 传维度,否则易搞混。

传入维度的方法

方法名方法功能备注
torch.rand(*sizes, out=None) → Tensor返回一个张量,包含了从区间 [0, 1)均匀分布中抽取的一组随机数。张量的形状由参数sizes定义。推荐
torch.randn(*sizes, out=None) → Tensor返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量的形状由参数sizes定义。不推荐
torch.normal(means, std, out=None) → Tensor返回一个张量,包含了从指定均值 means 和标准差 std 的离散正态分布中抽取的一组随机数。标准差 std 是一个张量,包含每个输出元素相关的正态分布标准差。多种形式,建议看源码
torch.rand_like(a)根据数据 a 的 shape 来生成随机数据不常用
torch.randint(low=0, high, size)生成指定范围(low, hight)和 size 的随机整数数据常用
torch.full([2, 2], 4)生成给定维度,全部数据相等的数据不常用
torch.arange(start=0, end, step=1, *, out=None)生成指定间隔的数据易用常用
torch.ones(*size, *, out=None)生成给定 size 且值全为1 的矩阵数据简单
zeros()/zeros_like()/eye()0 的 tensor 和 对角矩阵简单

样例代码:

>>> torch.rand([1,1,3,3])
tensor([[[[0.3005, 0.6891, 0.4628],
          [0.4808, 0.8968, 0.5237],
          [0.4417, 0.2479, 0.0175]]]])
>>> torch.normal(2, 3, size=(1, 4))
tensor([[3.6851, 3.2853, 1.8538, 3.5181]])
>>> torch.full([2, 2], 4)
tensor([[4, 4],
        [4, 4]])
>>> torch.arange(0,10,2)
tensor([0, 2, 4, 6, 8])
>>> torch.eye(3,3)
tensor([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
ログイン後にコピー

【相关推荐:Python3视频教程

以上がPytorch のテンソル データ構造の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート