PyTorch中常用的一些函数
主要用于记录一些比较常用的函数,便于查找。未记录的可查看PYTORCH TUTORIALS,PyTorch中文文档
torch.unsqueeze
- 主要用于在某一位置添加一个维度
复制x = torch.tensor([1, 2, 3, 4]) torch.unsqueeze(x, 0) torch.unsqueeze(x, 1)
- 比如上面两个例子,是分别增加了一个行的维度和一个列的维度,第一个
tensor([[ 1, 2, 3, 4]])
,第二个为tensor([[ 1],[ 2], [ 3],[ 4]])
torch.transpose
- 主要用于交换两个位置的形式,比如transpose(0,1)相当于对于个二维矩阵转置。
复制>>> x = torch.randn(2, 3) >>> x tensor([[ 1.0028, -0.9893, 0.5809], [-0.1669, 0.7299, 0.4942]]) >>> torch.transpose(x, 0, 1) tensor([[ 1.0028, -0.1669], [-0.9893, 0.7299], [ 0.5809, 0.4942]])
*同理对于一个三维矩阵,transpose(0,2)相当于对0和2位置的内容进行转置。
对上面两个以一个例子进行学习:
复制pe=torch.zeros(12,512) print(pe.shape) position =torch.arange(0,max_len,dtype=torch.float).unsqueeze(1) print(position.shape) print(pe.unsqueeze(1).shape) pe=pe.unsqueeze(0) print(pe.shape) pe=pe.transpose(0,2) print(pe.shape)
最后对应的输出如下:
复制torch.Size([12, 512]) torch.Size([12, 1]) torch.Size([12, 1, 512]) torch.Size([1, 12, 512]) torch.Size([512, 12, 1])
torch.nn.Linear
nn.Linear()是用于设置网络中的全连接层的,需要注意在二维图像处理的任务中,全连接层的输入与输出一般都设置为二维张量,形状通常为[batch_size, size],不同于卷积层要求输入输出是四维张量。其用法与形参说明如下:
* in_features指的是输入的二维张量的大小,即输入的[batch_size, size]中的size。
* out_features指的是输出的二维张量的大小,即输出的二维张量的形状为[batch_size,output_size],当然,它也代表了该全连接层的神经元个数。
* 从输入输出的张量的shape角度来理解,相当于一个输入为[batch_size, in_features]的张量变换成了[batch_size, out_features]的输出张量。
实例如下:
复制import torch as t from torch import nn # in_features由输入张量的形状决定,out_features则决定了输出张量的形状 connected_layer = nn.Linear(in_features = 64*64*3, out_features = 1) # 假定输入的图像形状为[64,64,3] input = t.randn(1,64,64,3) # 将四维张量转换为二维张量之后,才能作为全连接层的输入 input = input.view(1,64*64*3) print(input.shape) output = connected_layer(input) # 调用全连接层 print(output.shape)
结果为input shape is %s torch.Size([1, 12288])
, output shape is %s torch.Size([1, 1])
。
torch.tensor.repeat
- 抓要用来对一个矩阵整体进行复制,比如对于x.repeat(2,1),将x横着重复两次,纵着重复两次。
复制>>> x = torch.tensor([1, 2, 3]) >>> x.repeat(4, 2) tensor([[ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3], [ 1, 2, 3, 1, 2, 3]]) >>> x.repeat(4, 2, 1).size() torch.Size([4, 2, 3])
torch.tensorview
- 主要用于改变张量的形状
复制>>> x = torch.randn(4, 4) >>> x.size() torch.Size([4, 4]) >>> y = x.view(16) >>> y.size() torch.Size([16]) >>> z = x.view(-1, 8) # the size -1 is inferred from other dimensions >>> z.size() torch.Size([2, 8])
- 但是要注意于transpose相比,view不会改变张量在内存中的存储顺序而仅改变形状,transpose转置会同时改变两者
复制>>> a = torch.randn(1, 2, 3, 4) >>> a.size() torch.Size([1, 2, 3, 4]) >>> b = a.transpose(1, 2) # Swaps 2nd and 3rd dimension >>> b.size() torch.Size([1, 3, 2, 4]) >>> c = a.view(1, 3, 2, 4) # Does not change tensor layout in memory >>> c.size() torch.Size([1, 3, 2, 4]) >>> torch.equal(b, c) False
上面中,a,b,c分别的形式如下:
复制-------a:--------- tensor([[[[ 1.3258, -0.7289, -1.5796, 0.1997], [-1.4013, -0.7111, 0.3893, 0.0850], [-1.8743, -0.6299, -0.0428, -1.5769]], [[-0.0670, 0.5076, 0.2844, -0.4623], [-0.6529, 1.0558, 0.8000, 0.8263], [ 0.5389, -0.8800, -1.4782, -1.7605]]]]) -------c:--------- tensor([[[[ 1.3258, -0.7289, -1.5796, 0.1997], [-1.4013, -0.7111, 0.3893, 0.0850]], [[-1.8743, -0.6299, -0.0428, -1.5769], [-0.0670, 0.5076, 0.2844, -0.4623]], [[-0.6529, 1.0558, 0.8000, 0.8263], [ 0.5389, -0.8800, -1.4782, -1.7605]]]]) -------b:--------- tensor([[[[ 1.3258, -0.7289, -1.5796, 0.1997], [-0.0670, 0.5076, 0.2844, -0.4623]], [[-1.4013, -0.7111, 0.3893, 0.0850], [-0.6529, 1.0558, 0.8000, 0.8263]], [[-1.8743, -0.6299, -0.0428, -1.5769], [ 0.5389, -0.8800, -1.4782, -1.7605]]]])
torch.cat(tensors, dim=0, *, out=None)
- 用来连接两个张量
- tensors--任何相同类型的张量的Python序列。提供的非空张象必须具有相同的形状。
- dim (int, optional)--连接张量的维度
复制>>> x = torch.randn(2, 3) >>> x tensor([[ 0.6580, -1.0969, -0.4614], [-0.1034, -0.5790, 0.1497]]) >>> torch.cat((x, x, x), 0) tensor([[ 0.6580, -1.0969, -0.4614], [-0.1034, -0.5790, 0.1497], [ 0.6580, -1.0969, -0.4614], [-0.1034, -0.5790, 0.1497], [ 0.6580, -1.0969, -0.4614], [-0.1034, -0.5790, 0.1497]]) >>> torch.cat((x, x, x), 1) tensor([[ 0.6580, -1.0969, -0.4614, 0.6580, -1.0969, -0.4614, 0.6580, -1.0969, -0.4614], [-0.1034, -0.5790, 0.1497, -0.1034, -0.5790, 0.1497, -0.1034, -0.5790, 0.1497]]) >>> torch.cat((x,x),-1) tensor([[-0.1049, -1.2885, 0.2667, -0.1049, -1.2885, 0.2667], [ 1.2355, 0.4063, -0.0956, 1.2355, 0.4063, -0.0956]])
torch.squeeze(input, dim=None, *, out=None)
- 用来对张量某一维度进行降维,返回一个已移除大小为1的输入的所有维度的张量。
- input (Tensor) – the input tensor.
- dim (int, optional) – if given, the input will be squeezed only in this dimension
- 返回的张量与输入张量共享存储空间,因此更改一个张量的内容将更改另一个张量的内容。
- 如果张量的批次维度( batch dimension)大小为1,则挤压(输入)也会删除批次维度,这可能会导致意外错误。
复制>>> x = torch.zeros(2, 1, 2, 1, 2) >>> x.size() torch.Size([2, 1, 2, 1, 2]) >>> y = torch.squeeze(x) >>> y.size() torch.Size([2, 2, 2]) >>> y = torch.squeeze(x, 0) >>> y.size() torch.Size([2, 1, 2, 1, 2]) >>> y = torch.squeeze(x, 1) >>> y.size() torch.Size([2, 2, 1, 2])
- 从上面要注意,第一次消除0维度上的,但是维度值不是1而是2,所以不消除。而对1位置上的,恰好为1所以可以消除。
torch.dtype
下面给出中文的翻译版本,原版请点击标题链接.
本文来自博客园,作者:xingye_z,转载请注明原文链接:https://www.cnblogs.com/xyzhrrr/p/15857292.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人