pytorch--之halfTensor的使用详解


Posted in Python onMay 24, 2021

pytorch--之halfTensor的使用详解

证明出错在dataloader里面

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

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

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

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

pytorch--之halfTensor的使用详解

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.float32)
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)#指定位置增加一维

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现简单的可逆加密程序实例
Mar 05 Python
python fabric实现远程部署
Jan 05 Python
pyshp创建shp点文件的方法
Dec 31 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
python实现学员管理系统
Feb 26 Python
Python 编程速成(推荐)
Apr 15 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
python操作gitlab API过程解析
Dec 27 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
python 读取、写入txt文件的示例
Sep 27 Python
pandas DataFrame.shift()函数的具体使用
May 24 #Python
教你怎么用python实现字符串转日期
May 24 #Python
pandas中DataFrame重置索引的几种方法
May 24 #Python
pandas取dataframe特定行列的实现方法
pytorch 如何使用amp进行混合精度训练
只需要这一行代码就能让python计算速度提高十倍
pytorch 如何使用float64训练
You might like
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
php格式化金额函数分享
2015/02/02 PHP
php获取错误信息的方法
2015/07/17 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
javascript来定义类的规范小结
2010/11/19 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
[56:20]LGD vs VP Supermajor 败者组决赛 BO3 第三场 6.10
2018/07/04 DOTA
python中adb有什么功能
2020/06/07 Python
助人为乐道德模范事迹材料
2014/08/16 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
婚前协议书范本两则
2014/10/16 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
小学生节水倡议书
2015/04/29 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript