【Pytorch学习笔记(二)】张量的创建(补充)

一、知识回顾

我们在博客《张量的创建与访问》中已经讨论了一些张量的创建方法如torch.CharTensor()、torch.FloatTensor()以及torch.zeros()等张量创建方法,但由于其仅仅介绍了cpu版本torch下张量的创建方法和只有具体数据类型张量,本节内容旨在补充gpu版本torch下张量的创建以及更一般的张量的创建方法。

二、torch.Tensor()与torch.tensor()

pytorch中可用torch.Tensor()和torch.tensor()来创建一般的张量,二者的区别在于前者是一个 ,代表PyTorch底层的张量操作和方法;后者是一个函数 ,用于创建张量对象[1],torch.Tensor()传入的参数可以是具体的张量数据,也可以是张量的shape;torch.tensor()传入的数据只能是具体的张量。

复制代码
#创建一个张量a和张量b(分别用torch.Tensor()与torch.tensor())
ta = torch.Tensor(3, 4)
tb = torch.tensor([[1, 2], [3, 4]])
#分别输出tb,ta并查看其数据类型
print(f"ta的数据类型是{ta.dtype}\n ta张量为:{ta}")
print(f"tb的数据类型是{tb.dtype}\n ta张量为:{tb}")

上述代码的运行结果为:

由此可见torch.Tensor(shape)会默认创建一个32位浮点数据类型的张量,而torch.tensor()会依据输入的数据来自动生成数据类型。

三、初始化一个张量方法(部分)[2]

(一)直接传入具体张量数据

本文第二项中提到的初始化张量方法即为直接传入具体张量数据的方法, 此外,torch.tensor()还支持将numpy数据和其它tensor数据转换为张量,本文将逐一介绍。

(二)将numpy数组转换为张量

具体方法如下:

复制代码
#创建一个numpy数组
np_array = np.array([[1, 2], [3, 4]])
#将numpy数组转换为张量
tc = torch.from_numpy(np_array)

(三)将其它张量转换为特定张量

pytorch可以将张量a转换为全零、全一或随机张量,具体代码法如下

复制代码
#创建一个张量a和张量b
ta = torch.tensor([[1, 2], [3, 4]])
tb = torch.Tensor(3, 4)
#将张量a转换为全零或全一张量,将张量b转化为随机张量
tzero = torch.zeros_like(ta)
tone = torch.ones_like(ta)
trandn = torch.randn_like(tb)
print(f"转化过后的张量为\n{tzero}\n{tone}\n{trandn}")

上述代码运行结果为:

值得注意的是: zeros_like()和ones_like()方法可以转化Tensor()类和tensor()方法初始化的张量,而randn_like()方法只能转化Tensor()类初始化的张量。

四、创建gpu版本的张量与tensor()方法详解

(一)创建gpu版本的张量

《张量的创建与访问》中已经介绍了cpu版本的不同数据类型的张量的创建,gpu版本的张量创建方法与之类似:

复制代码
ta  = torch.cuda.CharTensor([[1, 2], [3, 4]])
print(f"gpu版本的张量\n{ta}")

(二)tensor()方法详解

前面我们已经提到tensor()方法本质是是一个函数,它的可传入参数为tensor(data, dtype=*, device='cuda/cpu'),其中data即为需要传入的数据,dtype为想要生成的张量中的元素的数据类型,device则指定是用cpu还是gpu计算。

当我们想初始化一个gpu版本的元素数据类型为float的张量时,我们就可以用如下代码实现:

复制代码
data = [[1.1, 2.4], [3.3, 5.3]]
ta = torch.tensor(data, dtype=float, device='cuda')
print(ta)
相关推荐
YJlio1 分钟前
Sysinternals 学习笔记(15.0):系统信息工具总览——RAMMap、RU、CoreInfo 等一网打尽
开发语言·笔记·python·学习·django·pdf·硬件架构
Jim-2ha03 分钟前
【数学题】包含⚪圆圈的三角形一共有多少个
学习·几何学
孙严Pay15 分钟前
网关支付:在线交易的安全核心枢纽
笔记·科技·计算机网络·其他·微信
代码游侠16 分钟前
应用——Linux Framebuffer 图形库显示
linux·运维·服务器·数据库·笔记·算法
m0_6265352017 分钟前
下班之后学习一会儿英语
学习
All The Way North-20 分钟前
池化层全解析:MaxPool vs AvgPool、参数详解、避坑指南与PyTorch实现
pytorch·深度学习·cnn·pooling·池化层·maxpool2d
laplace012322 分钟前
Part 1. 大模型RAG入门基础架构介绍
笔记·语言模型·langchain·rag
【上下求索】22 分钟前
学习笔记097——Ubuntu系统中如何通过service服务的方式启动 jar 包?
java·笔记·学习·ubuntu
Nan_Shu_61426 分钟前
学习:Redis (1)
数据库·redis·学习
智慧化智能化数字化方案27 分钟前
【精品资料鉴赏】财务数智化智能化建设学习
人工智能·学习·财务数字化·财务数智化·财务一体化·财务共享平台·财务成熟度评估模型