Rumah >pembangunan bahagian belakang >Tutorial Python >Contoh terperinci struktur data tensor dalam Pytorch
[Cadangan berkaitan: Tutorial video Python3 ]
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 sifatrequires_grad
nya, gunakanrequires_grad_()
ataudetach()
untuk mengelakkan penyalinan. Jika anda mempunyai pelbagainumpy
dan ingin mengelakkan penyalinan, gunakantorch.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.]])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]])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) 44, 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]])5. Setiap tensor mempunyai
yang sepadan untuk menyimpan datanya. Kelas tensor menyediakan pandangan berbilang dimensi, berjalur dan mentakrifkan operasi berangka. torch.Storage
ialah lalai Singkatan daripada jenis tensor (torch.Tensor
), iaitu, jenis data titik terapung bit torch.FloatTensor
. 32
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)Output program adalah seperti berikut:
), 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
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 'numpy.ndarray'> <class 'torch.Tensor'> <class 'numpy.ndarray'> """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 '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视频教程 】
Atas ialah kandungan terperinci Contoh terperinci struktur data tensor dalam Pytorch. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!