pytorch学习笔记(五)——pytorch基础之基本数据类型
pytorch学习笔记(五)——pytorch基础之基本数据类型
目录
类型检查
torch.randn(2,3)创建一个两行三列dimension(维度)为2的tensor类型,randn表示创建的数据满足N(0,1)的正态分布
a.type()返回tensor类型
isinstance()用来对tensor进行合法化检验,将两个进行对比 类型一致返回TRUE
python 自带的type函数返回基本数据类型 并不会提供额外的信息
同时若相同数据分别放在cpu和gpu的环境下,所生成的数据类型也是不一样的
不同维度tensor创建
维度为0的标量
torch.tensor()中直接传入标量数据,生成的是dimension为0的tensor
用途:我们主要使用这种tensor来表示计算的loss,loss即为标量
a.shape与a.size()作用等同,输出的torch.size([])即表示dimension为0,说明该tensor为标量
维度为1的tensor(张量)
创建张量时要加上[],此时dimension为1,使用tensor()函数时指定的是具体的数据,使用FloatTensor()只需要传入想要生成数据的size,维度默认为1。还可以从numpy引入 np.ones() 生成ndarray格式的[1.,1.,1…],在转换成tensor格式
用途:dimension为1的tensor主要用于神经元中的bias或神经网络的输入,如MNIST数据集中图片格式转换后为tensor([784])
值得注意的是在pytorch0.4版本之前loss采用的都是张量格式如tensor([0.3]),在0.4和1.0之后引入标量格式如tensor(0.3)
如何区别shape,size,dimension ,tensor?
如一个二维的tensor,内容是[[1,2],[3,4]],那么它的dimension为2
size等同于shape为[2,2]即两行两列,tensor则是指具体的数据[[1,2],[3,4]]
维度为2的tensor
torch.randn(2,3)创建一个两行三列dimension(维度)为2的tensor
使用a.size(0)返回tensor shape的第一个元素(第一维度的长度)
使用a.size(1)返回tensor shape的第二个元素(第二维度的长度)
或使用a.shape[1]效果等同
用途:用作神经网络带有batchsize的线性输入,如MNIST数据集中[4,784]表示有四张图片,每张图片784个像素点,第一个维度表示第几张照片,第二个维度表示照片中第几个像素点对应的数值。
维度为3的tensor
使用torch.rand(1,2,3)生成一个维度为3的tensor,rand表示生成的数字实在0-1之间的随机数。
a[0]表示tensor a第一个维度下标为0的数,shape为[2,3]
可用list函数把shape转换为list格式
用途:维度为3的tensor尤其适合于RNN模型用于自然语言处理,加入一句话由10个单词组成,每个单词有100中可能,采用一位热编码,则代表一句话的tensor shape为[10,100],若一次输入20句话,则tensor shape为[10,20,100]
维度为4的tensor
原理同上不再赘述
用途:主要用于CNN中输入,如[5,1,28,28]格式tensor四个维度分别表示
batchsize,channel,height,weight,例子中表示五张通道为1高度宽度都为28个像素点的图片。灰度图通道数为1,彩色图通道数为3分别表示RGB。
补充知识
numel表示总的数据个数2328*28=4704
dim返回维度数 也可使用len(a.shape)