• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

pytorch–之halfTensor的使用详解

python 搞代码 4年前 (2022-01-08) 18次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了pytorch–之halfTensor的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

证明出错在dataloader里面

在pytorch当中,float16和half是一样的数据结构,都是属于half操作,

然后dataloader不能返回half值,所以在dataloader里面,要把float16改成float32即可返回

补充:Pytorch中Tensor常用操作归纳

对常用的一些Tensor的常用操作进行简单归纳,方便日后查询。后续有用到再补充。

1、创建Tensor

 import torch #经典方式 device = torch.device("cuda:0") x = torch.tensor([1,2],dtype = torch.float32,device = device,requires_grad=True) w = sum(2 * x) w.backward() print(x.device) print(x.dtype) print(x.grad) #Tensor y = torch.Tensor([1,2,3]) #等价于 y = torch.FloatTensor([1,2,3])#32位浮点型 #后者声明打开梯度 y.requires_grad = True #还有其他类型,常用的 torch.LongTensor(2,3) torch.shortTensor(2,3) torch.IntTensor(2,3) w = sum(2 * y) w.backward() print(y.grad) print(y.dtype) 

输出:

cuda:0
torch.float32
tensor([2., 2.], device=’cuda:0′)
tensor([2., 2., 2.])
torch.float32

和numpy类似的创建方法

 x = torch.linspace(1,10,10,dtype = torch.float32,requires_grad = True) y = torch.ones(10) z = torch.zeros((2,4)) w = torch.randn((2,3))#从标准正态分布(均值为0,方差为1)上随机采用,高斯噪声点,而rand相当于在0,1间随机采样 #torch.normal()???? print(x) print(y) print(z) print(w)

输出

tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.], requires_grad=True)
tensor([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
tensor([[0., 0., 0., 0.],
        [0., 0., 0., 0.]])
tensor([[-0.6505,  1.3897,  2.2265],
        [-1.7815, -1.8194, -0.4143]])

从numpy转换

 np_data = np.arange(2,13,2).reshape((2,3)) torch_data = torch.from_numpy(np_data)#numpy转tensor print('\nnumpy',np_data) print('\ntorch',torch_data)

输出

numpy [[ 2  4  6]
 [ 8 10 12]]

torch tensor([[ 2,  4,  6],
        [ 8, 10, 12]], dtype=torch.int32)

2、组合

 import torch x = torch.arange(0,10,1).reshape(2,-1)#size=(2,5) y = torch.ones(10).reshape(2,-1)#size=(2,5) print(x) print(y) w = torch.cat((x,y),dim = 0)#默认从size最左边开始,这里结果为:(2+2,5) z = torch.cat((x,y),dim = 1)#(2,5+5) print(w,w.size()) print(z,z.size()) #还有种stack()

输出:

tensor([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]])
tensor([[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]])
tensor([[0., 1., 2., 3., 4.],
        [5., 6., 7., 8., 9.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]]) torch.Size([4, 5])
tensor([[0., 1., 2., 3., 4., 1., 1., 1., 1., 1.],
        [5., 6., 7., 8., 9., 1., 1., 1., 1., 1.]]) torch.Size([2, 10])

3、数据类型转换

法一

 x = torch.rand((2,2),dtype = torch.float32) print(x.dtype) x = x.double() print(x.dtype) x = x.int() print(x)

输出:

torch.float32
torch.float64
tensor([[0, 0],
        [0, 0]], dtype=torch.int32)

法二

 x = torch.LongTensor((2,2)) print(x.dtype) x = x.type(torch.fl<div style="color:transparent">来源gaodai.ma#com搞##代!^码@网</div>oat32) print(x.dtype)

输出:

torch.int64
torch.float32

4、矩阵计算

 x = torch.arange(0,4,1).reshape(2,-1) print(x) print(x * x )#直接相乘 print(torch.mm(x,x))#矩阵乘法 print(x + 1)#广播 print(x.numpy())#转换成numpy

输出:

tensor([[0, 1],
        [2, 3]])
tensor([[0, 1],
        [4, 9]])
tensor([[ 2,  3],
        [ 6, 11]])
tensor([[1, 2],
        [3, 4]])
[[0 1]
 [2 3]]

5、维度变化

主要是对维度大小为1的升降维操作。

 torch.squeeze(input)#去掉维度为1的维数 torch.unsqueeze(input,dim)#指定位置增加一维

以上就是pytorch–之halfTensor的使用详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:pytorch–之halfTensor的使用详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址