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下的XSLT API进行web开发的简单教程
Apr 15 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
python 剪切移动文件的实现代码
Aug 02 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
python生成n个元素的全组合方法
Nov 13 Python
对python实现二维函数高次拟合的示例详解
Dec 29 Python
详解如何设置Python环境变量?
May 13 Python
Python安装与卸载流程详细步骤(图解)
Feb 20 Python
python 多线程死锁问题的解决方案
Aug 25 Python
python批量修改文件名的示例
Sep 27 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
Python 键盘事件详解
Nov 11 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文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
JS实现放大镜效果
2020/09/21 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
adidas泰国官网:adidas TH
2020/07/11 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
即兴演讲稿
2014/01/04 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
甘南现象心得体会
2014/09/11 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
mysql部分操作
2021/04/05 MySQL
Pyhton模块和包相关知识总结
2021/05/12 Python
Python 文字识别
2022/05/11 Python