作者:S_o_m_n_u_211 | 来源:互联网 | 2023-09-04 22:44
60000个训练数据,10000个测试数据,每张图片大小28*28。1.torch.nn.Dropout2dtorch.nn.Dropout2d(p0.5,inplaceFalse
60000个训练数据,10000个测试数据,每张图片大小28*28。
1. torch.nn.Dropout2d
torch.nn.Dropout2d(p = 0.5, inplace = False)
# p表示将元素置0的概率,inplace若设置为True,会在原地执行操作。
随机将输入张量中整个通道设置为0。对于每次前向调用,被置0的通道都是随机的。
如果特征图中相邻像素是强相关的,nn.Dropout2d()可以提高特征图之间的独立程度。
2. model.train() / model.eval()
使用PyTorch进行训练和测试时要把实例化的model指定train/eval,eval()时,框架会自动把BN和DropOut固定住,不会取平均,而是用训练好的值,不然的话,一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大。
3. 随机种子
一个随机种子就能重现随机生成的序列。就是每次运行生成的随机序列都一样。
torch.manual_seed(args.seed) #为CPU设置种子用于生成随机数torch.cuda.manual_seed(args.seed)#为当前GPU设置随机种子torch.cuda.manual_seed_all() #为所有的GPU设置种子。
关于随机种子random.seed()测试 pytorch完全设置随机种子
4. argparse
python argparse用法总结
3 和 4 的这两个连接,建议亲自写写代码做下测试,对seed()和argparse会理解得更透彻,我一开始光看根本没明白。
5. torch.nn.functional.avg_pool2d()
torch.nn.functional.avg_pool2d(input, kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True)
#参数说明
# input – 输入的张量
# kernel_size – 池化区域的大小,可以是单个数字或者元组
# stride – 池化操作的步长,可以是单个数字或者元组。默认等于核的大小!
# padding – 在输入上隐式的零填充,可以是单个数字或者一个元组,默认: 0
# ceil_mode – 定义空间输出形状的操作
# count_include_pad – 除以原始非填充图像内的元素数量
主要想说明这些池化类的函数,stride默认都为核的大小。
6. F.nll_loss(output, target, reduction = ‘sum’)
参数reduction=’sum’的意思是求batch loss的总和,没有这个参数则求的是batch loss的平均值。
和torch.nn.functional – PyTorch中文文档中给出的损失函数的size_average作用一样。
7. torch.max
torch.max(input, dim) 返回输入张量给定维度上每行的最大值,并同时返回每个最大值的位置索引。
output = model(data) #output.shape = torch.Size([1000,10])
a = output.max(1)
#a得到最大值及索引,a[0]为最大值,a[1]为最大值的索引, a[0].shape = torch.Size([1000])
b = output.max(1,keepdim = True)
#参数keepdim = 'True' 使得b的维度与ouput一致,因此,b[0].shape = torch.Size([1000.1])
pred = output.max(1, keepdim = True)[1] #获取索引,也就是属于哪个数字