千家信息网

Pytorch如何实现变量类型转换?

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了Pytorch如何实现变量类型转换?,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。pytorch变量类型是各种各样的
千家信息网最后更新 2026年11月01日Pytorch如何实现变量类型转换?

这篇文章主要介绍了Pytorch如何实现变量类型转换?,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

pytorch变量类型是各种各样的Tensor,Tensor可以理解为高维矩阵。pytorch变量类型转换实际上就是矩阵之间的转换,那么我们真没进行pytorch变量类型转换呢?请继续看下去:

与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))

输出

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)

感谢你能够认真阅读完这篇文章,希望小编分享的"Pytorch如何实现变量类型转换?"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

类型 变量 张量 函数 数据 整数 符号 浮点 输出 之间 篇文章 两个 尾数 指数 精度 强制 复数 字节 对象 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 哈尔滨大商圈互联网科技有限公司 河南云网互联网络科技有限公司 蓝思科技飞鸽互联网 互联网巨头科技公司 互联网最新的科技有限公司 高科技与互联网 火传媒上海互联网科技 央行互联网金融科技公司 字节跳动和互联网科技 移动互联网科技公司 浙南科技城互联网大厦建设工程 互联网金融科技元年 小米互联网科技园入驻 伍佰万互联网科技怎么赚钱 皮皮虾互联网科技有限公司 福州德业互联网科技 互联网科技收购价值 中国互联网公司的科技投入 高科技和互联网的现代国家 广州紫鲸互联网科技有限公司 科技赋能下的互联网金融 互联网高科技股票 互联网科技公司介绍 深圳前海聚择互联网科技有限公司 重庆威客帮互联网科技 金融科技与互联网金融相同和不同 贵州叶脉互联网科技有限公司所属行业 996高科技互联网公司 互联网营销推广黑科技
0