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回调函数用法实例分析
May 09 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
python正则实现提取电话功能
Feb 24 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
python实现日志按天分割
Jul 22 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
python实现字符串和数字拼接
Mar 02 Python
python实现将中文日期转换为数字日期
Jul 14 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设计聊天室步步通
2006/10/09 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
laravel 数据验证规则详解
2019/10/23 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
JavaScript 嵌套函数指向this对象错误的解决方法
2010/03/15 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
python实现巡检系统(solaris)示例
2014/04/02 Python
Win10下Python环境搭建与配置教程
2016/11/18 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
python opencv之分水岭算法示例
2018/02/24 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
python读取和保存图片5种方法对比
2018/09/12 Python
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript