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:
[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
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])
一般用来表示 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
一般用来表示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)
一般用来表示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
[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)
[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])
。
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]])
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。
[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,即高斯白噪声)中抽取的一组随机数。
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
torch.full([d1,d2,...], 7)
,生成全部一样的tensor.
torch.arange(start, end)
:生成[start, end)的tensor。
torch.ones(d1, d2, ...)
:生成全1;
torch.zeros(d1, d2, ...)
:生成全0;
torch.eye(d1, d2, ...)
:生成单位矩阵。
torch.randperm(num)
:生成随机打散的tensor。