Pytorch数据类型及Tensor的相关操作

目录

  • pytorch的数据类型
  • Tensor
    • 查看数据的类型
    • Tensor的类型
      • 0维标量
      • 一维向量
      • 二维Tensor
      • 三维tensor
      • 四维tensor
  • 创建Tensor
    • import from numpy
    • import from list
    • randint
    • rand/rand_like
    • randn
    • rand.normal
    • full/arrage
    • arange
    • ones/zeros/eye
    • randperm

pytorch的数据类型

python PyTorch
Int IntTensor of size()
float FloatTensor of size()
Int array IntTensor of size [d1, d2 ,…]
Float array FloatTensor of size [d1, d2, …]
string

pytorch没有对应string的数据类型,所以在pytorch中一般有如下的方式来表示string:

  • One – hot
    通过[0 1 0 0]这样的矩阵形式来表示。
  • Embedding
    自带的API表示,如Word2vec、glove。

Tensor

查看数据的类型

[1] import torch
[2] a = torch.randn(2,3)
[3] a
[4] tensor([[-1.3980, -0.6004,  0.6113],
           [ 1.2985,  0.4644,  1.2936]])
[5] a.type
[6] <function Tensor.type>
[7] type(a)
[8] torch.Tensor
[9] isinstance(a,torch.FloatTensor)
[10] True
[11] a = a.cuda()  # 将数据传送到cuda上(GPU操作)
[12] isinstance(a,torch.FloatTensor)
[13] False.
[14] isinstance(a,torch.cuda.FloatTensor)
[15] True

Tensor的类型

0维标量

0维tensor一般用来表示损失函数的数值及Loss的数值。

[1] import torch
[2] torch.tensor(1.)
[3] tensor(1.)
[4] a = torch.tensor(1.3)
[5] a.shape
[6] torch.Size([])
[7] len(a.shape)
[8] 0
[9] a.size()
[10] torch.Size([])

一维向量

一维向量一般用来表示Bias或者是Linear input。

[1] torch.tensor([1.1])
[2] tensor([1.1000])

[3] torch.tensor([1.1, 2.2])
[4] tensor([1.1000, 2.2000])

[5] torch.FloatTensor(1)  # 创建一维Float型tensor
[6] tensor([1.4013e-45])

[7] torch.FloatTensor(2)
[8] tensor([3.7140e+00, 4.5916e-41])

[9] data = np.ones(2)  # 通过np创建向量再转换成tensor
[10] array([1., 1.])
[11] data
[12] torch.from_numpy(data)
[13] tensor([1., 1.], dtype=torch.float64)

[14] a = torch.ones(2)
[15] a.shape
[16] torch.Size([2])

二维Tensor

一般用来表示 Linear input,但是是组成了batch的输入。

[1] a = torch.randn(2, 3)
[2] a
[3] tensor([[ 0.5858,  0.7921, -1.0959],
           [-0.9188, -1.0520,  0.3439]])
[4] a.shape
[5] torch.Size([2, 3])
[6] 0
[7] a.size(0)
[8] 2
[9] a.size(1)
[10] 3

三维tensor

一般用来表示RNN input batch。

[1] a = torch.rand(1,2,3)
[2] a
[3] tensor([[[0.3731, 0.6286, 0.4451],
           [0.3610, 0.3913, 0.3960]]])
[4] a.shape
[5] torch.Size([1, 2, 3])
[6] a[0]  # 第0维的所有数据
[7] tensor([[0.3731, 0.6286, 0.4451],
           [0.3610, 0.3913, 0.3960]])
[8] a[0,0]  
[9] tensor([0.3731, 0.6286, 0.4451])
[10] a[0,0,2]
[11] tensor(0.4451)

四维tensor

一般用来表示CNN的数据,表达形式为[b,c,w,h]
b: batch size
c: channel
w: width
h: hight

[1] a = torch.rand(2,3,28,28)
[2] a.shape
[3] torch.Size([2, 3, 28, 28])
[4] a.numel()
[5] 4704
[6] a.dim()
[7] 4

创建Tensor

import from numpy

[1] import torch
[2] import numpy as np

[1] a = np.array([2,3,3])
[4] torch.from_numpy(a)
[5] tensor([2, 3, 3], dtype=torch.int32)

[6] a = np.ones([2,3])  # 创建元素都为1的2行3列矩阵。
[7] torch.from_numpy(a)
[8] tensor([[1., 1., 1.],
           [1., 1., 1.]], dtype=torch.float64)

import from list

[1] torch.tensor([2.,3.2])
[2] tensor([2.0000, 3.2000])

[3] torch.FloatTensor([2.,3.2])
[4] tensor([2.0000, 3.2000])

[5] torch.tensor([[2.,3.2],[2.,2.3]])
[6] tensor([[2.0000, 3.2000],
           [2.0000, 2.3000]])

# 创建两行三列的tensor。
[7] torch.FloatTensor(2,3)
[8] tensor([[0., 0., 0.],
           [0., 0., 0.]])

注意区分:torch.tensor([num1,num2]),这种形式是直接定义指定类型的tensor。tensor.torch.Tensor(2,3)这是定义指定大小的无定义的tensor,使用大写的T,也可以定义指定类型和数据的tensor,torch.Tensor([num1,num2])

randint

torch.randint(min,max,[d1,d2,...]),创建数据范围为[min,max),维度为[d1,d2,…]的tensor。

[1] torch.randint(1,10,[3,3])
[2] tensor([[2, 6, 4],
           [3, 2, 1],
           [2, 8, 7]])

rand/rand_like

torch.rand(d1,d2,...): 返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数。

[1] torch.rand(3,3)
[2] tensor([[0.5878, 0.9668, 0.3650],
           [0.1557, 0.3499, 0.9330],
           [0.7722, 0.9499, 0.3523]])
[1] a = torch.rand(3,3)
[2] b = torch.rand_like(a)
[3] tensor([[0.2042, 0.0564, 0.9969],
           [0.2000, 0.4774, 0.5674],
           [0.8551, 0.9213, 0.1106]])

torch.rand_like(a): 创建维度和a一样的tensor。

randn

[1] torch.randn(3,3)
[2] tensor([[-0.7544, -0.5258, -0.4428],
           [-0.1384, -1.2117, -0.2828],
           [-1.0915, -0.5079, -0.3922]])

torch.randn(d1,d2,...): 返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。

rand.normal

torch.normal(means, std, out=None)

返回一个张量,包含了从指定均值means和标准差std的离散正态分布中抽取的一组随机数。
标准差std是一个张量,包含每个输出元素相关的正态分布标准差。
参数:
means (float, optional) - 均值
std (Tensor) - 标准差
out (Tensor) - 输出张量

[1] torch.normal(mean=torch.full([10],0,dtype=torch.float),std=torch.arange(1,0,-0.1))
[2] tensor([-1.6619, -1.0360,  1.2595,  0.4415,  0.9030, -0.3031,  0.1125, -0.2781,
         0.0257,  0.1411])

注意:如果报错"normal_kernel_cpu" not implemented for 'Long',则要改变数据类型dtype=torch.float

full/arrage

torch.full([d1,d2,...], 7),生成全部一样的tensor.

arange

torch.arange(start, end):生成[start, end)的tensor。

ones/zeros/eye

torch.ones(d1, d2, ...):生成全1;
torch.zeros(d1, d2, ...):生成全0;
torch.eye(d1, d2, ...):生成单位矩阵。

randperm

torch.randperm(num):生成随机打散的tensor。

你可能感兴趣的:(学习记录,深度学习,python,pytorch)