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脚本生成sitemap.xml的实现方法
Jan 31 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
对python添加模块路径的三种方法总结
Oct 16 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
Python requests模块实例用法
Feb 11 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
Python算法中的时间复杂度问题
Nov 19 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
为什么python比较流行
Jun 19 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
python中requests和https使用简单示例
2018/01/18 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
python如何调用字典的key
2020/05/25 Python
python爬虫如何解决图片验证码
2021/02/14 Python
学生党员思想汇报
2013/12/28 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
运动会广播稿100字
2014/09/14 职场文书
2014年终工作总结范本
2014/12/15 职场文书
考试没考好检讨书
2015/05/06 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
python实现简单倒计时功能
2021/04/21 Python
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫