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交换变量
Sep 06 Python
使用python编写脚本获取手机当前应用apk的信息
Jul 21 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
dataframe设置两个条件取值的实例
Apr 12 Python
Python3.5 处理文本txt,删除不需要的行方法
Dec 10 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
numpy np.newaxis 的实用分享
Nov 30 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
Python替换NumPy数组中大于某个值的所有元素实例
Jun 08 Python
Django多数据库联用实现方法解析
Nov 12 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
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PDO::quote讲解
2019/01/29 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
python生成器与迭代器详解
2019/01/01 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
python文件及目录操作代码汇总
2020/07/08 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
3个CCIE对一个工程师的面试题
2012/05/06 面试题
2015年汽车销售员工作总结
2015/07/24 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL
Python 实现Mac 屏幕截图详解
2021/10/05 Python
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers