tensor中数据类型的相互转换

tensor中数据类型的相互转换

Pytorch中的Tensor常用的类型转换函数

  1. tensor数据类型转换
    在tensor的后面添加: .int()、.float()、.double()等.
    同时也可以使用  .to(type) 进行实现。
    同时也可以使用 type()函数 ,data为Tensor数据类型,data.type()为给出data的类型,如果使用data.type(torch.FloatTensor)则强制转换为torch.FloatTensor类型张量。当你不知道要转换为什么类型时,但需要求a1,a2两个张量的乘积,可以使用a1.type_as(a2)将a1转换为a2同类型。
  2. tensor<–>numpy
     Tensor---->Numpy 使用 tensor.numpy(),tensor为Tensor变量
     Numpy ----> Tensor 使用 torch.from_numpy(data),data为numpy变量
  3. tensor<–>Python
     Tensor ----> 单个Python数据,使用data.item(),data为Tensor变量且只能为包含单个数据
     Tensor ----> Python list,使用data.tolist(),data为Tensor变量,返回shape相同的可嵌套的list
  4. 数据存储位置转换
    CPU张量 ----> GPU张量,使用data.cuda()
    GPU张量 ----> CPU张量,使用data.cpu()

判断某个变量类型可以使用:isinstance(data,type)
例如:判断某个变量是否为张量

        if isinstance(rchannel,torch.Tensor):
                attens = torch.split(atten, rchannel.item()//self.radix, dim=1)
            else:
                attens = torch.split(atten, rchannel // self.radix, dim=1)

5)使用.shape以及.size()获得张量的形状时,比较不稳定,有时输出的形状元素是张量,有时是int型:例如:

  #第一种获得张量的形状,结果常为tensor,但是有时会转为int型的方法
  x_shape = list(x.size())
  batch, rchannel=x_shape[0],x_shape[1]
  #第二种获得张量的形状,结果常为tensor,但是有时会转为int型的方法
  batch, rchannel = x.shape[:2] #获得的值有时是张量有时是int,不稳定
  #解决方法
  if isinstance(rchannel,torch.Tensor):
       attens = torch.split(atten, rchannel.item()//self.radix, dim=1)
  else:
       attens = torch.split(atten, rchannel // self.radix, dim=1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值