2021年9月,顺丰科技视觉算法工程师面试题8道

·  阅读 96

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情

七月在线 学员分享的面试题,我这边做了解析,分享出来供大家参考,欢迎交流。

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))
复制代码

收藏成功!
已添加到「」, 点击更改