深度学习基础知识

到了浙大读博才刚开始学习深度学习,所以现在是个蠢蠢(纯纯)的小白,这篇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

  

你可能感兴趣的:(深度学习基础知识)