pytorch如何增加维度_刷deeplizard(PyTorch 版)深度学习视频系列-episode22
我们把单个样本图像张量放入一个大小为1的批次当 (batchsize,in_channels,height,width)=(批量大小,输入通道数,高,宽)函数:torch.unsqueeze(tensor, dim)unsqueeze()函数的功能是在tensor的某个维度上添加一个维数为1的维度,这个功能用view()函数也可以实现。这一功能尤其在神经网络输入单个样本时很有用,由...
我们把单个样本图像张量放入一个大小为1的批次当 (batchsize,in_channels,height,width)=(批量大小,输入通道数,高,宽)
函数:torch.unsqueeze(tensor, dim)
unsqueeze()函数的功能是在tensor的某个维度上添加一个维数为1的维度,这个功能用view()函数也可以实现。这一功能尤其在神经网络输入单个样本时很有用,由于pytorch神经网络要求的输入都是mini-batch型的,维度为[batch_size, channels, w, h],而一个样本的维度为[c, w, h],此时用unsqueeze()增加一个维度变为[1, c, w, h]就很方便了。
这个argmax()函数什么意思?怎么用?为什么里面用dim=1,dim=1是什么意思?
argmax函数:torch.argmax(input, dim=None, keepdim=False)返回指定维度最大值的序号,dim给定的定义是:the demention to reduce.也就是把dim这个维度的,变成这个维度的最大值的index。
dim的不同值表示不同维度。特别的在dim=0表示二维中的列,dim=1在二维矩阵中表示行。广泛的来说,我们不管一个矩阵是几维的,比如一个矩阵维度如下:(d0,d1,...,dn−1) ,那么dim=0就表示对应到d0 也就是第一个维度,dim=1表示对应到也就是第二个维度,一次类推。
import torch
a=torch.tensor(
[
[1, 5, 5, 2],
[9, -6, 2, 8],
[-3, 7, -9, 1]
])
b=torch.argmax(a,dim=0)#选取每列最大行标,9在这一列的位置是1,第二列最大是7位置是2,后面依次类推。
print(b)
print(a.shape)
结果:
1.tensor([1, 2, 0, 1])
2.torch.Size([3, 4])
使用pytorch框架进行神经网络训练时,涉及到分类问题,就需要使用softmax函数,这里以二分类为例,介绍nn.Softmax()函数中,参数的含义。
1. 新建一个2x2大小的张量,一行理解成一个样本经过前面网络计算后的输出(1x2),则batch_size是2。
import numpy as np
import torch
import torch.nn as nn
a = np.array([[1.5, 6.7],[6.8, 3.4]])
b = torch.from_numpy(a)
2. 下面调用nn.Softmax(dim),dim分别为0,1,看看结果是什么样子
f = nn.Softmax(dim = 0)
c = f(b)
结果: tensor([[0.0050, 0.9644], [0.9950, 0.0356]], dtype=torch.float64)
可以发现,是每一列和为1.
f = nn.Softmax(dim = 1)
结果:tensor([[0.0055, 0.9945], [0.9677, 0.0323]], dtype=torch.float64)
可以发现是每一行和为1
简单来说:当nn.Softmax的输入是一个二维张量时,其参数dim = 0,是让列之和为1;dim = 1,是让行之和为1。
从上图可以看得出来,由于权重的不一样,即使同一个模型,预测结果也是不一样的。
更多推荐
所有评论(0)