Rumah > pembangunan bahagian belakang > Tutorial Python > Contoh terperinci struktur data tensor dalam Pytorch

Contoh terperinci struktur data tensor dalam Pytorch

WBOY
Lepaskan: 2022-09-14 17:25:53
ke hadapan
2898 orang telah melayarinya

[Cadangan berkaitan: Tutorial video Python3 ]

torch.Tensor

torch.Tensor ialah A matriks berbilang dimensi yang mengandungi elemen jenis data tunggal , serupa dengan numpy array.
Tensor boleh dijana menggunakan torch.tensor() untuk menukar senarai Python atau data jujukan Yang dijana ialah dtype dan lalainya ialah torch.FloatTensor.

Perhatikan bahawa torch.tensor() sentiasa menyalin data. Jika anda mempunyai data Tensor dan hanya mahu menukar sifat requires_gradnya, gunakan requires_grad_() atau detach() untuk mengelakkan penyalinan. Jika anda mempunyai pelbagai numpy dan ingin mengelakkan penyalinan, gunakan torch.as_tensor().

1. Tensor jenis data yang ditentukan boleh dihasilkan dengan menghantar parameter torch.dtype dan/atau torch.device kepada pembina:

Perhatikan bahawa mengikut urutan untuk menukar tensor torch.device dan/atau torch.dtype yang sedia ada, pertimbangkan untuk menggunakan kaedah to()

>>> torch.ones([2,3], dtype=torch.float64, device="cuda:0")
tensor([[1., 1., 1.],
        [1., 1., 1.]], device='cuda:0', dtype=torch.float64)
>>> torch.ones([2,3], dtype=torch.float32)
tensor([[1., 1., 1.],
        [1., 1., 1.]])
Salin selepas log masuk
2. Kandungan Tensor boleh diakses dan diubah suai pengindeksan atau penghirisan:

>>> 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]])
Salin selepas log masuk
3, gunakan kaedah

atau torch.Tensor.item() untuk mendapatkan Nombor Python daripada int()Tensor yang hanya mempunyai satu nilai:

>>> x = torch.tensor([[4.5]])
>>> x
tensor([[4.5000]])
>>> x.item()
4.5
>>> int(x)
4
Salin selepas log masuk
4, Tensor boleh lulus parameter

Cipta, supaya requires_grad=True akan merekodkan operasi yang berkaitan untuk melaksanakan terbitan automatik: torch.autograd

>>> 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]])
Salin selepas log masuk
5. Setiap tensor mempunyai

yang sepadan untuk menyimpan datanya. Kelas tensor menyediakan pandangan berbilang dimensi, berjalur dan mentakrifkan operasi berangka. torch.Storage

Jenis data tensor

Torch mentakrifkan tujuh jenis tensor CPU dan lapan jenis tensor GPU:

Contoh terperinci struktur data tensor dalam Pytorch

ialah lalai Singkatan daripada jenis tensor (torch.Tensor), iaitu, jenis data titik terapung bit torch.FloatTensor. 32

Atribut Tensor

Tensor mempunyai banyak atribut, termasuk jenis data, dimensi Tensor dan saiz Tensor.

    Jenis data: Jenis data tensor yang berbeza boleh ditetapkan dengan menukar nilai parameter dtype kaedah torch.tensor().
  • Dimensi: Jenis data yang berbeza boleh diwakili oleh tensor dimensi yang berbeza. Skalar ialah tensor 0-dimensi, vektor ialah tensor 1-dimensi, dan matriks ialah tensor 2-dimensi. Imej berwarna mempunyai tiga saluran, rgb, dan boleh diwakili sebagai tensor 3 dimensi. Video juga mempunyai dimensi masa, yang boleh dinyatakan sebagai tensor 4 dimensi dengan beberapa kurungan segi empat sama [bilangan dimensi. Dimensi tensor boleh diperoleh menggunakan kaedah dim().
  • Saiz: Anda boleh menggunakan atribut shape atau kaedah size() untuk melihat panjang tensor dalam setiap dimensi, dan anda boleh menggunakan kaedah view() atau kaedah reshape() untuk menukar saiz daripada tensor.
Kod sampel adalah seperti berikut:

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)
Salin selepas log masuk
Output program adalah seperti berikut:

Contoh terperinci struktur data tensor dalam Pytorch


Perbezaan antara pandangan dan bentuk semula

Kedua-dua kaedah digunakan untuk menukar bentuk tensor() hanya sesuai untuk tensor operasi yang memenuhi syarat kesinambungan (

), while reshape() both Anda juga boleh beroperasi pada tensor yang tidak memenuhi syarat kesinambungan. Apabila keadaan kesinambungan tensor (contiguous) dipenuhi, hasil yang dikembalikan oleh a.reshape() adalah sama dengan a.view(), dan tiada ruang memori baharu akan dibuka apabila contiguous tidak dipenuhi, the kaedah view() digunakan secara langsung akan gagal, contiguous masih berguna, tetapi ruang memori akan dibuka semula dan tidak akan berkongsi memori dengan tensor sebelumnya, iaitu salinan reshape() "" akan dikembalikan (bersamaan dengan memanggil kaedah dahulu dan kemudian menggunakan kaedah contiguous()). view()Untuk pemahaman lanjut, sila rujuk artikel ini

Tensor dan ndarray

1, tensor dan tatasusunan numpy. Anda boleh menggunakan kaedah

untuk mendapatkan tatasusunan numpy daripada Tensor, atau anda boleh menggunakan kaedah .numpy() untuk mendapatkan Tensor daripada tatasusunan numpy. Tatasusunan Tensor dan numpy yang dikaitkan dengan kedua-dua kaedah ini berkongsi memori data. Anda boleh menggunakan kaedah torch.from_numpy tensor untuk menyalin tensor untuk memecahkan perkaitan ini. clone

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;>
"""
Salin selepas log masuk
2,

kaedah dan item() kaedah boleh menukar tensor kepada nombor Python dan senarai nombortolist()

# 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;>
"""
Salin selepas log masuk

创建 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.]])
Salin selepas log masuk

【相关推荐:Python3视频教程

Atas ialah kandungan terperinci Contoh terperinci struktur data tensor dalam Pytorch. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:jb51.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan