1、在原地即不使用任何额外的空间复杂度交换两个数。
1.相加寄存:a=a+b b=a-b a=a-b
2.位运算:b=a^b; a=a^b; b=a^b
2、模型的方差和偏差是什么,怎么减少bias和var。
偏差:描述的是预测值(估计值)的期望与真实值之间的差距。偏差越大,越偏离真实数据.
方差:描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散。
Baging减少方差,boosting减少偏差。
3、BN,GN,IN,LN的关系。
上边这张图显示了四种标准化的方向,其中C轴表示通道,N轴表示Batch中的样本序号,H、W轴可以认为是图像样本中的宽和高。
Batch Normalization会将一个batch中所有样本的所有feature map按feature map的序号划分为N(N=feature map)组,然后对这N组内的所有像素点进行N次标准化;
Layer Normalization 是对一个样本中的所有数据进行标准化;
Instance Normalization是对一个样本中的每一个通道进行单独的标准化操作;
Group Normalization将一个样本的的通道划分为多个group,然后在对每一个group进行标准化。
4、解决梯度消失的方法有哪些?
梯度修剪:grad_clip
用ReLU、Leaky-ReLU、P-ReLU、R-ReLU、Maxout等替代sigmoid函数。
用Batch Normalization。
LSTM的结构设计也可以改善RNN中的梯度消失问题。
残差网络:Resnet
5、TensorRT的推理加速的原理是什么?
TensorRT支持INT8和FP16的计算,通过在减少计算量和保持精度之间达到一个理想的trade-off,达到加速推断的目的。
TensorRT对于网络结构进行了重构和优化。主要体现在以下四个方面:
第一是tensorRT通过解析网络模型将网络中无用的输出层消除以减小计算。
第二是对于网络结构的垂直整合,即将目前主流神经网络的conv、BN、Relu三个层融合为了一个层。
第三是对于网络的水平组合,水平组合是指将输入为相同张量和执行相同操作的层融合一起。
第四是对于concat层,将contact层的输入直接送入下面的操作中,不用单独进行concat后在输入计算,相当于减少了一次传输吞吐。
6、介绍下Focal loss。
Focal loss是目标检测中解决正负样本严重不平衡的方法,在标准交叉熵损失基础上修改得到的。这个函数可以通过减少易分类样本的权重,使得模型在训练时更专注于稀疏的难分类的样本;防止大量易分类负样本在loss中占主导地位。
7、解释一下归并排序吧。
归并排序的核心思想是分治法,将已有序的子序列合并,得到完全有序的序列。
基本过程:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列,再两两归并,最终得到一个长度为n的有序序列为止,这称为2路归并排序。
代码示例如下:
def merge_sort(arr): if len(arr)==1: return arr mid = len(arr)//2 left = arr[:mid] right = arr[mid:] return marge_sort(merge_sort(left),merge_sort(right)) def marge_sort(left,right): result = [] while len(left)>0 and len(right)>0: if left[0] < right[0]: result.append(left.pop(0)) else: result.append(right.pop(0)) result+=left result+=right return result arr = [2,36,32,54,89,98,65,12,74] print(merge_sort(arr))