疑问解答
1. model.train()和model.eval()什么作用?
model.train()的作用是启用 Batch Normalization 和 Dropout。 model.train()是保证BN层能够用到每一批数据的均值和方差。对于Dropout,model.train()是随机取一部分网络连接来训练更新参数。
model.eval()的作用是不启用 Batch Normalization 和 Dropout。 训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有BN层和Dropout所带来的的性质。
2. Conv2d参数?卷积核的意义?池化的意义?
nn.Conv2d (self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True))
1. 卷积核(convolutional kernel):可以看作对某个局部的加权求和;它是对应局部感知,它的原理是在观察某个物体时我们既不能观察每个像素也不能一次观察整体,而是先从局部开始认识,这就对应了卷积。卷积核的大小一般有1x1,3x3和5x5的尺寸(一般是奇数x奇数)。
卷积核的个数就对应输出的通道数(channels),这里需要说明的是对于输入的每个通道,输出每个通道上的卷积核是不一样的。比如输入是28x28x192(WxDxK,K代表通道数),然后在3x3的卷积核,卷积通道数为128,那么卷积的参数有3x3x192x128,其中前两个对应的每个卷积里面的参数,后两个对应的卷积总的个数(一般理解为,卷积核的权值共享只在每个单独通道上有效,至于通道与通道间的对应的卷积核是独立不共享的,所以这里是192x128)。
2. 池化(pooling):卷积特征往往对应某个局部的特征。要得到global的特征需要将全局的特征执行一个aggregation(聚合)。池化就是这样一个操作,对于每个卷积通道,将更大尺寸(甚至是global)上的卷积特征进行pooling就可以得到更有全局性的特征。这里的pooling当然就对应了cross region。
3. 权重如何初始化?
为什么初始化很重要
不正确初始化的权重会导致梯度消失或爆炸问题,从而对训练过程产生负面影响。
对于梯度消失问题,权重更新很小,导致收敛速度变慢——这使得损失函数的优化变慢,在最坏的情况下,可能会阻止网络完全收敛。相反,使用过大的权重进行初始化可能会导致在前向传播或反向传播过程中梯度值爆炸。
一般采用何凯明初始化,torch.nn的linear,conv函数在init时已经内置了kaiming初始化,无需关系。
另外,可以用预训练模型的权重做初始化。冻结深层网络参数,只对浅层做更新,效果也很好
4. Dataloader的构造?
DataLoader包括两个子模块,Sampler模块,主要是生成索引index,DataSet模块,主要是根据索引读取数据。Dataset 类是一个抽象类,它可以用来表示数据集。我们通过继承 Dataset 类来自定义数据集的格式、大小和其它属性,后面就可以供 DataLoader 类直接使用。
在实际项目中,如果数据量很大,考虑到内存有限、I/O 速度等问题,在训练过程中不可能一次性的将所有数据全部加载到内存中,也不能只用一个进程去加载,所以就需要多进程、迭代加载,而 DataLoader 就是基于这些需要被设计出来的。DataLoader 是一个迭代器,最基本的使用方法就是传入一个 Dataset 对象,它会根据参数 batch_size 的值生成一个 batch 的数据,节省内存的同时,它还可以实现多进程、数据打乱等处理。
5. 不同任务loss衡量函数的选取?
回归损失一般采用MSE
分类任务常用交叉熵
loss函数选取与设置往往随着任务场景和先验知识而发生变动
Q1:归纳偏置 inductive bias(为什么我的网络可以学习到图像信息)
先验假设:卷积层的参数共享,使得网络可以学习到图像的局部特征,而不是整体特征。 深度神经网络:层次化处理信息,使得网络可以学习到图像的抽象特征。 卷积神经网络CNN:信息具有空间局部性 反馈神经网络RNN:信息具有时序性,强调顺序的重要性 图神经网络GNN:认为图中心节点与周围节点的相邻关系可以决定信息流动
Q2: 先验知识注入深度学习过程
- 网络结构就是先验知识
- 网络权重是先验,imagnet预训练权重baseline model(固定上层模型权重,只改变全连接层参数做更新)
- 数据增强注入先验知识
- 训练过程中的正则化(惩罚项)L1,L2,
Q3:如何对baseline model做优化,使其性能增长
见 探究.md