PyTorch入门实战教程笔记(四):基础张量操作1

PyTorch入门实战教程笔记(四):基础张量操作1

包括:数据类型 和 创建Tensor

数据类型:

Python 与PyTorch基本类型对比如下图,可以看到数据可以一一对应,不同的维度表示了不同的类型。不过应该注意的是,PyTorch中没有类键string支持的,不过可以采用编码的方式,例如One-hot来表示,如 [0,1,0,0…]. 除此之外,也可以用Embedding可以用来表示常用的语言,不多介绍。
在这里插入图片描述
  在PyTorch中,我们只需要记住常用的类型就行,如下图所标准的类型,torch.ByteTensor用来比较两个元素是否相等,并且应该注意torch的CPU和GPU的类型是不一样的 中间要加cuda。可以用data=data.cuda()进行CPU到GPU类型的转换
  在这里插入图片描述
  我们可以使用一下方法来检验tensor的类型:
  在这里插入图片描述
  Dim 0张量:(标量)建立一个dimension(维度)为零的tensor,这种类型在loss函数中常用。可以用下图的语句得到标量的shape。
在这里插入图片描述
在这里插入图片描述
  Dim 1 张量 (向量,一维),定义是需要在tensor()中加[],还可以使用FloatTensor(),但是要注意,tensor()指定的就是tensor的数据,而FloatTensor()初始参数即可向量的长度。用nump.ones(2)生成一个长度为2的长度,常用于Bias、Linear Input的数据。
在这里插入图片描述
  Dim 2 张量 (矩阵),经常使用于带有batch的Linear Input,可以用下面方法实现:
在这里插入图片描述
  Dim 3 张量 按下面的方法定义3阶张量,常用于 RNN.
在这里插入图片描述
  Dim 4 张量 4阶张量,特别适合图像处理,四个参数如(2,3,28,28),代表两张图片,3个通道(RGB),高度28,宽度28的图片。
在这里插入图片描述
 另,除此之外,已用numel()来计算整个张量的个数多少,如下图 2×3×28×28=4704,还可以用dim()来计算张量的阶数。
 在这里插入图片描述

创建Tensor

引入Tensor
第一种方式,通过numpy引入,直接导进来,数据不变,为什么要转呢,因为要使用Tensor在GPU上加速运算,具体实现如下图:
在这里插入图片描述
第二种方式,直接通过list创建,具体如下图,需要注意的是torch.tensor()和torch.FloatTensor()是不一样的,tensor的T大小写含义不同,小写代表数据直接传入,大写如果不加list[],(2,3)代表创建一个两行三列的矩阵。所以尽量少用大写的创建数据直接传入。
在这里插入图片描述
生成数据:

#下面三种均可生成未初始化的数据:
torch.empty()
torch.FloatTensor(d1,d2,d3)  		#使用前要把数据写进来
torch.IntTensor(d1,d2,d3)

#初始化方式,没有初始化的可能存在隐患,推荐使用随机初始化
torch.rand(3,3)						#使用均匀的伪随机的[0,1]之间的随机数
torch.randint(1,10)					#从1-10中间随机的整数(不包含10)
torch.randn(3,3)						#正态分布的随机初始化,均值为0,方差为1
#还可以用torch.normal,前一个参数mean是生成长度为10的向量[0,0,0..],方差是1到0慢慢的减小,如1,0.9,0.8...
 torch.normal(  mean = torch.full([10],0), std=torch.arange(1,0,-0.1)  )

#把所有的tensor赋值为同一个元素:
torch.full([2,3],7)      #生成两行三列的矩阵,元素全为7,类型为FloatTensor
torch.full([],7)           #生成一个标量,也就是维度为零的数
torch.full([1],7)			#生成一个向量,一维向量

#torch支持arange,不支持range
torch.arange(0,10)			#也是包前不包后
torch.arange(0,10,2)		#也是包前不包后,步长为2

#linspace  /   logspace
torch.linspace(0,10,steps=4)   #将0~10(包含头尾),平均分成4份,输出[0.0000,3.3333,6.6667,10.0000]
torch.logspace(0,-1,steps=4)	#将0~-1(包含头尾)分成10份,输出结果为10的多少次方,比如第一个数据为1.000,即10的0次方,其余类推。

生成数据:
  生成0、 1 、 对角线的矩阵方法,应注意eye()只能接受一个或两个参数,不能接受三个参数,一个参数代表输出一个对角方阵,两个参数输出如下:
在这里插入图片描述
  相对于numpy中的随机打乱数据函数random.shuffle(),torch中有torch.randperm(),比如:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值