一、Pytorch Tensor的通道排序:

                                              [batch、channel、height、width]

例如,32x32的彩色图片的通道排序为[3,32,32]。batch是指一批图片的个数,我们这里不指定。

二、torch.nn.Conv2d()函数详解


torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)


pytorch 二维Tensor取某一列元素_方差


卷积计算输出图片维度的公式

        H(output)=(H(input)−F+2P)/S+1

        W(output)=(W(input)−F+2P)/S+1

        C(output)=K,K是卷积核的个数,输出图片通道的个数=卷积核的个数。

 三、torch.nn.MaxPool2d参数详解

class torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)

 MaxPool2d 参数介绍 

  • kernel_size :表示做最大池化的窗口大小,可以是单个值,也可以是tuple元组
  • stride :步长,可以是单个值,也可以是tuple元组,如果未指定值就是池化核的大小
  • padding :填充,可以是单个值,也可以是tuple元组
  • dilation :控制窗口中元素步幅
  • return_indices :布尔类型,返回最大值位置索引
  • ceil_mode :布尔类型,为True,用向上取整的方法,计算输出形状;默认是向下取整

 池化计算输出图片维度的公式

    new_height = (input_height - filter_height)/S + 1
    new_width = (input_width - filter_width)/S + 1

    池化不改变图像的通道数。

四、transforms.ToTensor()的使用

ToTensor的作用是将导入的图片转换为Tensor的格式,导入的图片为PIL image 或者 numpy.nadrry格式的图片,其shape为(HxWxC)数值范围在[0,255],转换之后shape为(CxHxw),数值范围在[0,1].

五、transforms.Normalize()的使用

其作用是将图片在每个通道上做标准化处理,即将每个通道上的特征减去均值,再除以方差。

归一化的作用就是将需要处理的数据,经过一定的处理方法(算法),将其数值限制在一定范围内。在深度学习图像处理中,归一化处理之后,可以使数据更好的响应激活函数,提高数据的表现力,减少梯度爆炸和梯度消失的出现。常见的归一化处理是将数据处理为均值是0,方差是1的高斯分布,而transforms.Normalize()就可以实现这样的功能。

简单来说就是将数据按通道进行计算,将每一个通道是数据计算出其方差与均值,然后再将其每一个通道内的每一个数据减去均值,再除以方差,得到归一化后的结果。

六、DataLoader的使用

pytorch中加载数据的顺序是:

  • 创建一个dataset对象
  • 创建一个dataloader对象
  • 循环dataloader对象,将data,label拿到模型中去训练

DataLoader主要是用来装载数据,就是给定已知的数据集,把数据集装载进DataLoaer,然后送入深度学习网络进行训练。

dataset = Mydata()
dataloader = DataLoader(dataset, batch_size = 2, shuffle=True,collate_fn = mycollate)

这里假设已经定义了Mydata类。

参数:

  • dataset:传入的数据
  • shuffle = True:是否打乱数据
  • collate_fn:使用这个参数可以自己操作每个batch的数据

七、iter的使用

在python中,iter()函数的功能是:接受一个可迭代对象,将其转换成一个迭代器。

a=[1,2,3]
a_iter=iter(a)
print(a_iter)
print(next(a_iter))
print(next(a_iter))

输出的结果为:

pytorch 二维Tensor取某一列元素_方差_02

八、标准化和反标准化

#-----------------------------------------#
# 均值方差标准化
# 使用距离来度量相似性
# 避免了不同量纲的选取对距离计算产生的巨大影响
def ZscoreNormalization(data, mean, std):
    data= (data - mean) / std
    return data



# 均值方差反标准化
def UnscoreNormalization(data, mean, std):
    data= data* std + mean
    return data
#----------------------------------------#

九、Numpy和Tensor的互相转化

Tensor转NumPy

a = torch.ones(5)
b = a.numpy()
print(a)
print(b)

         输出结果为:

tensor([1., 1., 1., 1., 1.])
[1. 1. 1. 1. 1.]

 NumPy数组转 Tensor

a = numpy.ones(5)
b = torch.tensor(a)
print(a)
print(b)

        输出结果为:

[1. 1. 1. 1. 1.]
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)

十、with的用法

with是一种上下文管理协议,可以很好的处理上下文环境产生的异常。

我们看以下代码:

file = open("/tmp/foo.txt")
data = file.read()
file.close()

这里有两个问题:

一是可能忘记关闭文件; 
二是文件读取数据发生异常,没有进行任何处理。

而用with可以解决这些问题,代码如下:

with open("/tmp/foo.txt") as file:
    data = file.read()

十一、Pytorch中.item()的用法

.item()用于在只包含一个元素的tensor中提取值,注意是只包含一个元素,否则的话使用.tolist()

x = torch.tensor([1])
print(x.item())
y = torch.tensor([2,3,4,5])
print(y.tolist())


# 输出结果
1
[2, 3, 4, 5]