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 输出一个两行字符的变量
Feb 05 Python
linux下安装easy_install的方法
Feb 10 Python
零基础写python爬虫之抓取糗事百科代码分享
Nov 06 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
解析Python中的__getitem__专有方法
Jun 27 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
用Python设计一个经典小游戏
May 15 Python
django基于restframework的CBV封装详解
Aug 08 Python
Python 用三行代码提取PDF表格数据
Oct 13 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 Python
python request 模块详细介绍
Nov 10 Python
python UIAutomator2使用超详细教程
Feb 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
php简单操作mysql数据库的类
2015/04/16 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
jquery获取radio值实例
2014/10/16 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
python使用append合并两个数组的方法
2015/04/28 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
雏鹰争章活动总结
2014/05/09 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android