
x' = (x-min(x)) / (max(x)-min(x)),其中 max 是样本数据的最大值,min是样本数据的最小值适用于数值比较集中的情况,可使用经验值常量来来代替max,minx'=(x-μ) / σ,其中μ为所有样本的均值,σ为所有样本的标准差经过处理后符合标准正态分布,即均值为0,标准差为1y = 1-e^(-x),在x∈[0,6]变化较明显,用在数据分化比较大的场景
空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。
空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。

可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样,通过调整扩张率得到不同的感受野不大小:
在构建模型的过程中,通常会划分训练集、测试集。
当模型在训练集上精度很高,在测试集上精度很差时,模型过拟合;
当模型在训练集和测试集上精度都很差时,模型欠拟合。
预防过拟合策略:
主要有三大类:
在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样,它的实现一般有三种方式:
下采样层有两个作用,一是减少计算量,防止过拟合;二是增大感受野,使得后面的卷积核能够学到更加全局的信息。
下采样的方式主要有两种:
参数量指的是网络中可学习变量的数量,包括卷积核的权重weights,批归一化(BN)的缩放系数γ,偏移系数β,有些没有BN 的层可能有偏置bias,这些都是可学习的参数,即在模型训练开始前被赋予初值,在训练过程根据链式法则不断迭代更新,整个模型的参数量主要是由卷积核的权重weights的数量决定,参数量越大,则该结构对平台运行的内存要求越高。
参数量的计算方式:
Kh x Kw x Cin x Cout (Conv卷积网络)Cin x Cout (FC全连接网络) 深度可分离卷积将传统的卷积分两步进行,分别是 depthwise和 pointwise。首先按照通道进行计算按位相乘的计算,深度可分离卷积中的卷积核都是单通道的,输出不能改变featuremap 的通道数,此时通道数不变;然后依然得到将第一步的结果,使用1*1的卷积核进行传统的卷积运算,此时通道数可以进行改变。

计算量的前后对比:
Kh x Kw x Cin x Cout x H × w
变成了
Kh x Kw x Cin x H x W + 1×1 x Cin x Cout x Hx w
Addition和 Concatenate分支操作统称为shortcut,Addition是在 ResNet中提出,两个相同维度的feature map相同位置点的值直接相加,得到新的相同维度feature map,这个操作可以融合之前的特征,增加信息的表达,Concatenate操作是在Inception中首次使用,被DenseNet发扬光大,和 addition不同的是,它只要求两个feature map的HW相同,通道数可以不同,然后两个feature map在通道上直接拼接,得到一个更大的feature map,它保留了一些原始的特征,增加了特征的数量,使得有效的信息流继续向后传递。

激活函数(又叫激励函数,后面就全部统称为激活函数)是模型整个结构中的非线性扭曲力,神经网络的每层都会有一个激活函数。
常用的激活函数: Sigmoid 函数、tanh函数、Relu 函数、Leaky ReLU函数(PReLU) 、ELU(Exponential Linear Units)函数、MaxOut函数。
不能,因为初始化权重是0,每次传入的不同数据得到的结果是相同的,网络无法更新。
权重初始化的目的是在深度神经网络中前向传递时,阻止网络层的激活函数输出爆炸(无穷大)或者消失(O)。
如果网络层的输出爆炸或者消失,损失函数的梯度也会变得很大或者很小,无法有效后向传递,使得神经网络需要更长的时间才能收敛甚至无法收敛。
初始化方法有: Xavier初始化、Kaiming 初始化、随机初始化。
原因:激活函数的选择。
梯度消失:令bias=O,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较小时,则权重参数呈指数级减小。
梯度爆炸:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较大时,则权重参数呈指数级增长。
一般来说,在合理的范围之内,越大的 batch size 使下降方向越准确,震荡越小;batch size 如果过大,则可能会出现内存爆表和局部最优的情况。小的 bath size 引入的随机性更大, 难以达到收敛,极少数情况下可能会效果变好。
TensorFlow 与 PyTorch 编程方式不同
PyTorch:命令式编程;TensorFlow:符号式编程
图的创建及调试不同
pytorch 图结构的创建是动态的,即图是运行时创建;更易调试 pytorch 代码,调试 pytorch代码就像调试 python 代码一样,可以利用 pdp 在任何地方设置断点灵活性、设备管理不同
tensorflow 图结构的创建是静态的,即图首先被"编译",然后在运行;不易调试要么从会话请求检查变量,要么学习使用 tfdbg 调试器
pooling 比 max pooling 更合适?
warm up在刚刚开始训练时以很小的学习率进行训练,使得网络熟悉数据,随着训练的进行学习率慢慢变大,到了一定程度,以设置的初始学习率进行训练,接着过了一些inter 后,学习率再慢慢变小;
学习率变化:上升——平稳——下降
并不能说明这个模型无效,导致模型不收敛的原因可能有:
GAN 用一个生成模型和一个判别模型,判别模型用于判断给定的图片是不是真实的图片, 生成模型自己生成一张图片和想要的图片很像,开始时两个模型都没有训练,然后两个模型一起进行对抗训练,生成模型产生图片去欺骗判别模型,判别模型去判别真假,最终两个模型在训练过程中,能力越来越强最终达到稳态。
减少处理高维输入数据的计算负担,结构化的选取输入的子集,从而降低数据的维度。让系统更加容易的找到输入的数据中与当前输出信息相关的有用信息,从而提高输出的质量。
帮助类似于 decoder 这样的模型框架更好的学到多种内容模态之间的相互关系。
从数据上提升性能:
收集更多的数据,对数据做缩放和变换,特征组合和重新定义问题。
从算法调优上提升性能:
用可靠的模型诊断工具对模型进行诊断,权重的初始化,用小的随机数初始化权重。
对学习率进行调节:
尝试选择合适的激活函数,调整网络的拓扑结构,调节batch 和epoch 的大小,添加正则化的方法,尝试使用其它的优化方法,使用early stopping