ホームページ >バックエンド開発 >Python チュートリアル >Pytorch のテンソル データ構造の詳細な例
【関連する推奨事項: Python3 ビデオ チュートリアル ]
torch.Tensor
は、numpy の array に似た、単一のデータ型の 要素を含む多次元行列です。
Tensor は、Python のリストまたは
シーケンス データ を変換する torch.tensor() を使用して生成できます。生成されるものは dtype で、デフォルトは
torch.FloatTensor## です#。
torch.tensor()torch.dtypeは常にデータをコピーします。 Tensor データがあり、その
1. 指定されたデータ型の Tensor は、パラメーターrequires_grad
プロパティを変更したいだけの場合は、コピーを避けるためにrequires_grad_()
またはdetach()
を使用します。numpy
配列があり、コピーを避けたい場合は、torch.as_tensor()
を使用してください。
および/または torch.device
をコンストラクターに渡すことによって生成できます。
##既存の tensor の torch.device および/または torch.dtype を変更するには、
メソッドの使用を検討してください。3、
<pre class="brush:py;">>>> torch.ones([2,3], dtype=torch.float64, device="cuda:0") tensor([[1., 1., 1.], [1., 1., 1.]], device=&#39;cuda:0&#39;, dtype=torch.float64) >>> torch.ones([2,3], dtype=torch.float32) tensor([[1., 1., 1.], [1., 1., 1.]])</pre>
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]])
torch.Tensor.item()
またはint()## を使用します。 からの # メソッドのみ 値の Tensor
から Python 番号を取得します: <pre class="brush:py;">>>> x = torch.tensor([[4.5]])
>>> x
tensor([[4.5000]])
>>> x.item()
4.5
>>> int(x)
4</pre>
4。Tensor はパラメーター requires_grad=True を使用して作成できるため、
は関連する操作を記録します: <pre class="brush:py;">>>> x = torch.tensor([[1., -1.], [1., 1.]], requires_grad=True)
>>> out = x.pow(2).sum()
>>> out.backward()
>>> x.grad
tensor([[ 2.0000, -2.0000],
[ 2.0000, 2.0000]])</pre>
5。各テンソルにはデータを保存するための対応する torch.Storage
があります。 tensor クラスは、多次元のストライド ビューを提供し、数値演算を定義します。
Tensor データ型Torch は 7 つの CPU テンソル タイプと 8 つの GPU テンソル タイプを定義します:
torch.Tensor は、デフォルトのテンソル型 (
torch.FloatTensor) の略称であり、32
ビット浮動小数点データ型です。 Tensor の属性
Tensor には、データ型、Tensor 次元、Tensor サイズなどの多くの属性があります。
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)
## view と reshape の違い
両方のメソッドは、テンソルの形状を変更するために使用されます。view() は、連続性条件 (
contiguous
は満足できません view() メソッドを直接使用すると失敗します reshape()
はまだ便利ですが、メモリ空間を再度オープンし、以前のメソッドとメモリを共有しませんテンソル、つまり、"copy"
(最初に contiguous()
メソッドを呼び出し、次に view()
メソッドを使用するのと同じです)。 さらに理解するには、この記事を参照してください。Tensor と ndarray
1、tensor と numpy 配列。
.numpy()
メソッドを使用して Tensor から numpy 配列を取得することも、
メソッドを使用してテンソルをコピーし、この関連付けを解除できます。 <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))
"""
<class &#39;numpy.ndarray&#39;>
<class &#39;torch.Tensor&#39;>
<class &#39;numpy.ndarray&#39;>
"""</pre>
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 'float'> [[0.8211846351623535, 0.20020723342895508], [0.011571824550628662, 0.2906131148338318]] <class 'list'> """
创建 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 サイトの他の関連記事を参照してください。