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 xml解析实例详解
Nov 14 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
python自定义函数def的应用详解
Jun 03 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
Python进行特征提取的示例代码
Oct 15 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 Python
如何利用pygame实现打飞机小游戏
May 30 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+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
了解一点js的Eval函数
2012/07/26 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
JQuery基础语法小结
2015/02/27 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
vue-cli2 构建速度优化的实现方法
2019/01/08 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python 面试中 8 个必考问题
2018/11/16 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
Django REST framwork的权限验证实例
2020/04/02 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
oracle重置序列从0开始递增1
2022/02/28 Oracle
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android