PyTorch没有string对应的表示类型(内键支持),但对于文本类型的序列数据,可以用ont-hot 或者 embedding的方式来表示:
数据在CPU上和在GPU上的类型是不同的:
dimension为0 :标量 -- 用来表示Loss
import torch
a = torch.ones(3)
print(a) # tensor([1., 1., 1.])
print(a.size()) # torch.Size([3])
print(a.shape) # torch.Size([3])
print(a.dim()) # 1 维度
print(a.type()) # torch.FloatTensor
print('-------------------------')
b = torch.tensor(666)
c = torch.tensor(6.66)
print(b.shape) # torch.Size([])
print(len(b.shape)) # 0
print(b.size()) # torch.Size([])
print(b.dim()) # dimension 维度为0
print(b.type()) # torch.LongTensor
print(c.type()) # torch.FloatTensor
print(type(b)) # <class 'torch.Tensor'>
dimension 为1 ,1维张量,即向量
dimension 为2的张量——矩阵 可以用来作为batch size的输入
三维张量 -- RNN的输入size
维度为4的张量 -- CNN的输入格式 [batch, channel, height, weight]
创建Tensor
未初始化的tensor后面一定要跟上初试化的步骤,因为默认的随机初始化不定会赋什么值
Tensor类型取的是默认的类型,一般为FloatTensor
采用符合某种分布的随机初始化(而不是默认随机初始化)
正态分布
full
arange
linspace、logspace 等差数列 - 下图logspace的底数是10
索引与切片
注意:上面a.index_select()的第二个参数得是torch.tensor类型的数据,torch.arange(8) 意思是取前8个维度
Tensor维度变换
view、reshape -- 重新调整shape,两者完全可以通用。为了与numpy一致,PyTorch0.4版本以后增加的reshape
squeeze -- 挤压、unsqueeze -- 扩展
Transpose、t、permute
expand、repeat
即满足 np.prod(a.size()) 和 np.prod(b.size()) 即可,这里的np.prod() 是numpy求乘积的方法。
真实例子:
expand / repeat
transpose 之后要使用.contiguous()使原变量变连续
广播 broadcasting -- 类似于 先UNsqueeze 再expand