1. 基本数据类型
-
Dimension 0/rank 0 ,0维数据(标量)
torch.tensor(1.0) # out:tensor(1.) torch.tensor(1.3) # out:tensor(1.300) # 查看数据类型 a = torch.tensor(2.2) a.shape # 注意这里是shape没有括号,不是一个成员函数,与size()区分 # out:torch.Size([]) len(a.shape) # out:0 a.size() # out:torch.Size([]) # size为成员函数,记得加括号
-
Dim1/rank 1
用来表示bias神经网络中的偏置项或者打平后的数据,如[28,28]的图片,打平后为[784]
torch.tensor([1.1]) # out:tensor([1.1000]) # 一维的张量 torch.tensor([1.1,2.2]) # out:tensor([1.1000,2.2000]) # 或者使用torch.FloatTensor()产生一维张量 torch.FloatTensor(1) # out:tensor([2.3000]) torch.FloatTensor(2) # out:tensor([1.6000,3.5000])
-
Dim2/rank2
用来表示带有batch的输入,如一张图片[784],一次输入4张图片[4,784]
a = torch.randn(2,3) # out:tensor([[ 0.8689, -0.5615, 0.6235], # [ 0.5463, 1.1281, 0.1555]]) a.shape # torch.Size([2, 3]) a.size() # torch.Size([2, 3]) a.size(0) # 2 a.size(1) # 3 a.shape[1] #注意这里shape索引是[]列表结构 # 3
-
Dim3/rank3
适合NLP的RNN输入
a = torch.rand(2,2,3) # tensor([[[0.3447, 0.6256, 0.9380], [0.1662, 0.2953, 0.6855]], [[0.2159, 0.2447, 0.8352], [0.6679, 0.7348, 0.2862]]]) a.shape # torch.Size([2, 2, 3]) a.size(1) # 2 a.size(2) # 3
-
Dim4/rank4
适合CNN网络输入[b,c,h,w]batch,色彩通道,图片大小
a = torch.rand(2,3,28,28) # 一次输入2张28*28的彩色图片
-
Mixed补充
a = torch.rand(2,3,28,28) a.numel() # 得到数据占用内存的大小 4704=2*3*28*28 a.dim() # 返回数据的维度 4 更加直观
2. 创建tensor
-
import from numpy适用于大量数据导入,numpy方便
a = np.array([2,3.3]) torch.from_numpy(a) # tensor([2.0000,3.3000],dtype=torch.float64)
-
import from list适用于少量数据,只需要生成给定的list数据
torch.tensor([2,3.2]) #接收的参数就是现存的数据 # tensor([2.0000, 3.2000]) torch.tensor([[2,3.2],[1.2,4]]) # tensor([[2.0000, 3.2000], [1.2000, 4.0000]]) # 大写的Tensor接收数据的维度,也可直接给值,不建议直接给值使用 torch.IntTensor(2,3) # tensor([[1684420912, 758330982,878981426], [ 929379373, 876162359, 825045090]], dtype=torch.int32) torch.IntTensor([2,3]) # 这里直接传入list给定值 # tensor([2, 3], dtype=torch.int32)
-
uninitialized未初始化的数据及初始化定义
1. 程序报错nan或inf查看数据是否未初始化,定义了数据空间后,记得及时写入数据
torch.empty(d1,d2,d3)
2. 带初始化的数据
torch.rand(3,3) # 产生[0,1]均匀分布的数据 # tensor([[0.1713, 0.8286, 0.8841], [0.4365, 0.2444, 0.5381], [0.8176, 0.0386, 0.4318]]) a = torch.rand(3,3) b = torch.rand_like(a) # 接收参数为tensor,产生同样大小的tensor torch.randint(1,10,[3,3]) # 产生给定范围[1,10)的二维数据 # tensor([[6, 7, 9], [8, 1, 9], [6, 7, 3]]) torch.randn(3,3) # 产生正态分布的数据N(0,1)均值0,方差1 torch.full([2,3],7) # 指定数据填充 torch.full([],7) # tensor(7),dim0 torch.arange(0,10) # 等差数列,参数(start,end,step) # 数据的切分,切分为m个,包括右端点,与arange不同 torch.linspace(0,10,5) # tensor([ 0.0000, 2.5000, 5.0000, 7.5000, 10.0000]) torch.ones(3,3) # 全部为1 torch.zeros(3,3) # 全部为0 torch.eye(3,3) # 对角矩阵,只有对角为1
- 数据打散
torch.randperm(3) # tensor([2, 0, 1]) 产生随机索引 a = torch.rand(3,2) # 3位同学语文成绩 b = torch.rand(3,2) # math idx = torch.randperm(3) a[idx],b[idx]
-
set default type设置tensor的默认类型
# 默认torch的小数为FloatTensor torch.tensor([1.,2]).type() # 'torch.FloatTensor' torch.set_default_tensor_type(torch.DoubleTensor) # 设置默认为Double类型 torch.tensor([1.,2]).type() # 'torch.DoubleTensor'
3. type-check
a = torch.randn(2,3)
a.type()
# 'torch.FloatTensor' 可以查看数据的类型
# 在程序中检查数据类型是否一致
isinstance(a,torch.FloatTensor)
# True
# 与GPU上的数据进行比较
isinstance(a,torch.cuda.FloatTensor)
# False
# 使用.cuda方法,将数据类型转换为gpu数据
a = a.cuda()
isinstance(a,torch.cuda.FloatTensor)
# True