到了浙大读博才刚开始学习深度学习,所以现在是个蠢蠢(纯纯)的小白,这篇blog用来记录学习过程中使用到的工具和简单知识吧
DL工具类:
1、ImageNet: 这里有一篇很好的知乎回答,能够有效解决问题。需要注意:1、先注册才能下载图片;2、注册必须使用.edu后缀的邮件;3、点击下载图片以后,先要提交申请,并不是即时下载。
Pytorch 语法篇:
1、pytorch生成随机数:
1)均匀分布: torch.rand(*size, out = None) 返回一个张量
包含区间(0, 1)的均匀分布中抽取的一组随机数。张量形状由参数size决定
2)标准正态分布:torch.randn(*sizes,out = None)返回一个张量
包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量形状由参数size决定
3)离散正态分布: torch.normal(means, std, out = None)返回一个张量
返回一个张量,包含了从指定均值means和标准差std的离散正态分布中抽取的一组随机数。
标准差std是一个张量,包含每个输出元素相关的正态分布标准差。
例子:torch.normal(mean=0.5, std=torch.arange(1, 6))
-0.1505
-1.2949
-4.4880
-0.5697
-0.8996
[torch.FloatTensor of size 5]
4) 线性间距向量:torch.linspace(start, end, steps=100, out=None)返回一个张量
包含在start和end之间均匀间隔的step个点
2、训练样本数,样本通道数,单通道高和宽:
Pytorch中,torch.nn只支持小批量输入,而不支持单个样本。例如nn.Conv2d()接受4dTensor的输入与输出。这个4d tensor的size() = tensor([batchsize, channel, height, width]),下面对每一个值给出解释
batchsize:批大小(批尺寸),表示每一次训练的样本数目。
必要性:平衡内存效率与内存容量的关系
分类:全批次(一次将所有样本传入网络进行训练);mini batch(一个适当个数的训练样本数。选定一个batch的大小后,将会以batch的大小将数据输入深度学习的网络中,然后计算这个batch的所有样本的平均损失,即代价函数是所有样本的平均);
随机(batchsize = 1 的情况,暂时不懂20191214)
channel:单个训练样本的通道数
height: 单个样本的高
width: 单个样本的宽
3、Pytorch变换张量形状:
view(*args) → Tensor:返回一个有相同数据但大小不同的tensor。 调用:x = x.view(*shape)
1 >>> import torch 2 >>> x = torch.randn(1,2,3,4)# 生成4维张量tensor([batchsize, channel, height, width]) 3 >>> x 4 tensor([[[[-0.7298, -1.8570, 1.7195, 1.2817], 5 [-0.2610, -0.7315, -0.3917, 1.4104], 6 [-0.7941, 1.6163, 0.4595, 0.2690]], 7 8 [[-0.5323, -0.2535, -0.6921, 0.5795], 9 [ 1.4046, -0.5477, -1.4911, 1.2929], 10 [-0.4515, 1.0059, -0.9871, 0.6590]]]]) 11 >>> x = x.view(-1,2)#列数为2,行数计算出来 12 >>> x 13 tensor([[-0.7298, -1.8570], 14 [ 1.7195, 1.2817], 15 [-0.2610, -0.7315], 16 [-0.3917, 1.4104], 17 [-0.7941, 1.6163], 18 [ 0.4595, 0.2690], 19 [-0.5323, -0.2535], 20 [-0.6921, 0.5795], 21 [ 1.4046, -0.5477], 22 [-1.4911, 1.2929], 23 [-0.4515, 1.0059], 24 [-0.9871, 0.6590]]) 25 >>> x = torch.randn(1,2,3,4) 26 >>> x = x.view(2,-1)#行数为2,列数计算出来 27 >>> x 28 tensor([[ 0.9007, 1.8211, 0.9335, -1.4456, 0.0235, 0.6824, -0.0610, 0.6032, 29 0.2352, -1.3332, 0.3664, 1.1924], 30 [ 0.3642, 1.2124, 0.2298, -1.7909, -1.5619, -2.3198, -0.7123, -0.0062, 31 2.2308, -0.2013, 0.8443, 1.2638]]) 32 >>> x.view(-1)#只输入单个-1,输出一个行张量 33 tensor([ 0.9007, 1.8211, 0.9335, -1.4456, 0.0235, 0.6824, -0.0610, 0.6032, 34 0.2352, -1.3332, 0.3664, 1.1924, 0.3642, 1.2124, 0.2298, -1.7909, 35 -1.5619, -2.3198, -0.7123, -0.0062, 2.2308, -0.2013, 0.8443, 1.2638])
4、Epoch, Batch Size 和 Iteration
举个例子:将10kg的面粉使用面条加工机(每次只能处理2kg),加工成10kg的面条。首先得把10kg面粉分成5份2kg的面粉,然后放入机器加工,经过5次,可以将这10kg面粉首次加工成面条,但是现在的面条肯定不好吃,因为不劲道,于是把10kg面条又放进机器再加工一遍,还是每次只处理2kg,处理5次,现在感觉还行,但是不够完美;于是又重复了一遍:将10kg上次加工好的面条有放进机器,每次2kg,加工5次,最终成型了,完美了,结束了。那么到底重复加工几次呢?只有有经验的师傅才知道。
这就形象地说明:Epoch就是10斤面粉加工的次数(上面的3次);Batch Size就是每份的数量(上面的2kg),Iteration就是将10kg面粉加工完一次所使用的循环次数(上面的5次)。显然 1个epoch = BatchSize * Iteration