我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Pytorch 实现变量类型转换

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Pytorch 实现变量类型转换

Pytorch的数据类型为各式各样的Tensor,Tensor可以理解为高维矩阵。

与Numpy中的Array类似。Pytorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU上的Tensor加cuda()函数得到。通过使用Type函数可以查看变量类型。

一般系统默认是torch.FloatTensor类型。

例如data = torch.Tensor(2,3)是一个2*3的张量,类型为FloatTensor; data.cuda()就转换为GPU的张量类型,torch.cuda.FloatTensor类型。

下面简单介绍一下Pytorch中变量之间的相互转换

(1)CPU或GPU张量之间的转换

一般只要在Tensor后加long(), int(), double(),float(),byte()等函数就能将Tensor进行类型转换;

例如:Torch.LongTensor--->Torch.FloatTensor, 直接使用data.float()即可

还可以使用type()函数,data为Tensor数据类型,data.type()为给出data的类型,如果使用data.type(torch.FloatTensor)则强制转换为torch.FloatTensor类型张量。

当你不知道要转换为什么类型时,但需要求a1,a2两个张量的乘积,可以使用a1.type_as(a2)将a1转换为a2同类型。

(2)CPU张量 ----> GPU张量, 使用data.cuda()

(3)GPU张量 ----> CPU张量 使用data.cpu()

(4)Variable变量转换成普通的Tensor,其实可以理解Variable为一个Wrapper,里头的data就是Tensor. 如果Var是Variable变量,使用Var.data获得Tensor变量

(5)Tensor与Numpy Array之间的转换

Tensor---->Numpy 可以使用 data.numpy(),data为Tensor变量

Numpy ----> Tensor 可以使用torch.from_numpy(data),data为numpy变量

补充:Numpy/Pytorch之数据类型与强制类型转换

1.数据类型简介

Numpy

NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型。

序号 数据类型及描述
1. bool_存储为一个字节的布尔值(真或假)
2. int_默认整数,相当于 C 的long,通常为int32或int64
3. intc相当于 C 的int,通常为int32或int64
4. intp用于索引的整数,相当于 C 的size_t,通常为int32或int64
5. int8字节(-128 ~ 127)
6. int1616 位整数(-32768 ~ 32767)
7. int3232 位整数(-2147483648 ~ 2147483647)
8. int6464 位整数(-9223372036854775808 ~ 9223372036854775807)
9. uint88 位无符号整数(0 ~ 255)
10. uint1616 位无符号整数(0 ~ 65535)
11. uint3232 位无符号整数(0 ~ 4294967295)
12. uint6464 位无符号整数(0 ~ 18446744073709551615)
13. float_float64的简写
14. float16半精度浮点:符号位,5 位指数,10 位尾数
15. float32单精度浮点:符号位,8 位指数,23 位尾数
16. float64双精度浮点:符号位,11 位指数,52 位尾数
17. complex_complex128的简写
18. complex64复数,由两个 32 位浮点表示(实部和虚部)
19.

complex128复数,由两个 64 位浮点表示(实部和虚部)

直接使用类型名很可能会报错,正确的使用方式是np.调用,eg, np.uint8

Pytorch

Torch定义了七种CPU张量类型和八种GPU张量类型,这里我们就只讲解一下CPU中的,其实GPU中只是中间加一个cuda即可,如torch.cuda.FloatTensor:

torch.FloatTensor(2,3) 构建一个2*3 Float类型的张量

torch.DoubleTensor(2,3) 构建一个2*3 Double类型的张量

torch.ByteTensor(2,3) 构建一个2*3 Byte类型的张量

torch.CharTensor(2,3) 构建一个2*3 Char类型的张量

torch.ShortTensor(2,3) 构建一个2*3 Short类型的张量

torch.IntTensor(2,3) 构建一个2*3 Int类型的张量

torch.LongTensor(2,3) 构建一个2*3 Long类型的张量

同样,直接使用类型名很可能会报错,正确的使用方式是torch.调用,eg,torch.FloatTensor()

2.Python的type()函数

type函数可以由变量调用,或者把变量作为参数传入。

返回的是该变量的类型,而非数据类型。


data = np.random.randint(0, 255, 300)
print(type(data))

输出

<class 'numpy.ndarray'>

3.Numpy/Pytorch的dtype属性

返回值为变量的数据类型


t_out = torch.Tensor(1,2,3)
print(t_out.dtype)

输出

torch.float32

t_out = torch.Tensor(1,2,3)

print(t_out.numpy().dtype)

输出

float32

4.Numpy中的类型转换

先聊聊我为什么会用到这个函数(不看跳过)

为了实施trochvision.transforms.ToPILImage()函数

于是我想从numpy的ndarray类型转成PILImage类型

我做了以下尝试


data = np.random.randint(0, 255, 300)
n_out = data.reshape(10,10,3)
print(n_out.dtype)
img = transforms.ToPILImage()(n_out)
img.show()

但是很遗憾,报错了

raise TypeError('Input type {} is not supported'.format(npimg.dtype))

TypeError: Input type int32 is not supported

因为要将ndarray转成PILImage要求ndarray是uint8类型的。

于是我认输了。。。

使用了


n_out = np.linspace(0,255,300,dtype=np.uint8)
n_out = n_out.reshape(10,10,3)
print(n_out.dtype)
img = torchvision.transforms.ToPILImage()(n_out)
img.show()

得到了输出

uint8

嗯,显示了一张图片

但是呢,就很憋屈,和想要的随机数效果不一样。

于是我用了astype函数

astype()函数

由变量调用,但是直接调用不会改变原变量的数据类型,是返回值是改变类型后的新变量,所以要赋值回去。


n_out = n_out.astype(np.uint8)

#初始化随机数种子
np.random.seed(0)
 
data = np.random.randint(0, 255, 300)
print(data.dtype)
n_out = data.reshape(10,10,3)
 
#强制类型转换
n_out = n_out.astype(np.uint8)
print(n_out.dtype)
 
img = transforms.ToPILImage()(n_out)
img.show()

输出

int32

uint8

5.Pytorch中的类型转换

pytorch中没有astype函数,正确的转换方法是

Way1 : 变量直接调用类型


tensor = torch.Tensor(3, 5)

torch.long() 将tensor投射为long类型


newtensor = tensor.long()

torch.half()将tensor投射为半精度浮点类型


newtensor = tensor.half()

torch.int()将该tensor投射为int类型


newtensor = tensor.int()

torch.double()将该tensor投射为double类型


newtensor = tensor.double()

torch.float()将该tensor投射为float类型


newtensor = tensor.float()

torch.char()将该tensor投射为char类型


newtensor = tensor.char()

torch.byte()将该tensor投射为byte类型


newtensor = tensor.byte()

torch.short()将该tensor投射为short类型


newtensor = tensor.short()

同样,和numpy中的astype函数一样,是返回值才是改变类型后的结果,调用的变量类型不变

Way2 : 变量调用pytorch中的type函数

type(new_type=None, async=False)如果未提供new_type,则返回类型,否则将此对象转换为指定的类型。 如果已经是正确的类型,则不会执行且返回原对象。

用法如下:


self = torch.LongTensor(3, 5)
# 转换为其他类型
print self.type(torch.FloatTensor)

Way3 : 变量调用pytorch中的type_as函数

如果张量已经是正确的类型,则不会执行操作。具体操作方法如下:


self = torch.Tensor(3, 5)
tesnor = torch.IntTensor(2,3)
print self.type_as(tesnor)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Pytorch 实现变量类型转换

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python变量类型怎么转换

python 变量类型转换可以通过内置函数实现:获取原始类型:使用 type() 函数获取变量的原始类型。选择目标类型:确定要转换成的目标类型(如 int、float、str)。使用内置函数转换:使用内置函数(int()、float()、s
python变量类型怎么转换
2024-05-22

javascript默认变量类型转换

JavaScript是一种解释性语言,它有一个很特别的特点,在使用变量时不需要预先指定数据类型。这意味着可以将任何类型的值赋给变量,包括数字、字符串、布尔值等,而无需担心编译器或解释器的类型检查。这个特点使得JavaScript非常灵活和易于使用。然而,这种灵活性也可能会在某些情况下导致一些问题,这些问题通常是与变量类型转换有关。在JavaScript中,变量的类型不是固定的,
2023-05-22

php变量类型如何转换

在PHP中,可以使用一些内置函数来进行变量类型转换。以下是一些常用的方法:强制转换:使用(type)或settype()函数。例如,将一个变量转换为整数类型:$var = '123';$intVar = (int)$var; // 使用(
php变量类型如何转换
2024-02-29

变量类型转换在Oracle中的实践

在Oracle数据库中,变量类型转换主要涉及到以下几种情况:隐式类型转换:当两个不同类型的值进行运算时,Oracle会自动将其中一个值的类型转换为另一个值的类型。例如,当你将一个整数与一个浮点数相加时,整数会被隐式地转换为浮点数。显式类型转
变量类型转换在Oracle中的实践
2024-08-28

Python变量类型的强制转换

当我们需要对数据的类型转换时,只需要将数据类型作为函数名即可。下面给出的函数可以执行数据类型之间的转换,函数返回一个新的对象,表示转换的值函数描述int(x [,base])将x转换为一个整数long(x [,base] )将x转换为一个长
2023-01-31

C#中怎么转换变量类型

这篇文章将为大家详细讲解有关C#中怎么转换变量类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.变量 变量是指在程序的运行过程中随时可以发生变化的量。语法:数据类型 变量名;例如:str
2023-06-17

Java中变量类型转换有哪些

这篇文章主要介绍Java中变量类型转换有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!public cla
2023-06-02

java如何实现类型转换与强制类型转换

这篇文章主要介绍了java如何实现类型转换与强制类型转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java类型转换与强制类型转换如果你以前有编程经验,那么你已经知道把一种
2023-06-03

Pytorch数据类型与转换(torch.tensor,torch.FloatTensor)

这篇文章主要介绍了Pytorch数据类型转换(torch.tensor,torch.FloatTensor),之前遇到转为tensor转化为浮点型的问题,今天整理下,我只讲几个我常用的,对Pytorch数据类型转换相关知识感兴趣的朋友一起看看吧
2023-02-21

JavaScript变量类型有哪些及变量间的转换方法

这篇文章主要介绍“JavaScript变量类型有哪些及变量间的转换方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript变量类型有哪些及变量间的转换方法”文章能帮助大家解决问题。1.
2023-06-29

JAVA中变量类型间如何相互转换

这篇文章主要为大家展示了“JAVA中变量类型间如何相互转换”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA中变量类型间如何相互转换”这篇文章吧。Java的数据类型分为三大类,即布尔型、字符
2023-06-03

Oracle变量与数据类型的自动转换

在Oracle数据库中,变量与数据类型的自动转换是根据一定的规则进行的,这些规则可能会导致一些不可预测的结果,特别是在日期类型的处理过程中。以下是关于Oracle变量与数据类型的自动转换的相关信息:Oracle自动类型转换规则数值类型:当
Oracle变量与数据类型的自动转换
2024-08-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录