赞
踩
面试被问到的问题
Q:两个有序数组合并的算法怎么写 A: def merge_sorted_arrays(arr1, arr2): result = [] i, j = 0, 0
- while i < len(arr1) and j < len(arr2):
- if arr1[i] < arr2[j]:
- result.append(arr1[i])
- i += 1
- else:
- result.append(arr2[j])
- j += 1
-
- # 将剩余的元素加入结果数组
- result.extend(arr1[i:])
- result.extend(arr2[j:])
-
- return result
#示例 arr1 = [1, 3, 5, 7] arr2 = [2, 4, 6, 8]
merged_array = merge_sorted_arrays(arr1, arr2) print(merged_array)
Q:时间复杂度是多少
A: 在上面的合并有序数组的算法中,我们使用两个指针 i
和 j
分别遍历两个输入数组。在每一步迭代中,我们将当前指针位置较小的元素添加到结果数组,并将相应的指针向前移动。因为每个元素只会被访问一次,所以时间复杂度是 O(m + n),其中 m 和 n 分别是两个输入数组的长度。具体来说,我们在最坏的情况下对两个数组的所有元素进行了一次比较和一次添加操作。因此,该算法的时间复杂度是线性的,与输入数组的规模成线性关系。
Q: 说一下CBAM注意力机制是怎么计算的
A: 通道注意力模块(Channel Attention Module): 通道注意力模块旨在捕捉通道间的相关性,以便对每个通道进行加权。计算过程如下: a. 全局平均池化(Global Average Pooling): 对输入特征图在空间维度上进行全局平均池化,得到每个通道的平均值。 b. 全连接层(Fully Connected Layer): 将全局平均池化得到的特征进行全连接操作,以学习通道间的权重关系。 c. 激活函数: 通常会使用激活函数(如ReLU)来增加模型的非线性表示能力。 d. 全连接层: 再次使用全连接层,将学习到的权重映射到原始通道的维度上。 e. Sigmoid激活函数: 最后使用Sigmoid激活函数将输出限制在0到1之间,得到通道注意力权重。 空间注意力模块(Spatial Attention Module): 空间注意力模块旨在捕捉特征图不同区域之间的重要性,以便对不同区域进行加权。计算过程如下: a. 空间平均池化(Spatial Average Pooling): 对输入特征图在通道维度上进行全局平均池化,得到每个空间位置的平均值。 b. 全连接层: 将空间平均池化得到的特征进行全连接操作,以学习空间位置间的权重关系。 c. 激活函数: 通常会使用激活函数(如ReLU)。 d. 全连接层: 再次使用全连接层,将学习到的权重映射到原始空间维度上。 e. Sigmoid激活函数: 最后使用Sigmoid激活函数将输出限制在0到1之间,得到空间注意力权重。 整合注意力权重: 将通道注意力权重和空间注意力权重按元素相乘,得到最终的注意力权重。这个权重可以应用到原始的特征图上,从而增强模型对重要特征的关注。
Q: 熟悉哪些激活函数?
A: Sigmoid、ReLU等
Q: Sigmoid的取值范围是多少
A: 0-1 Q: Sigmoid有哪些不足?
A: 梯度容易消失
Q:为什么梯度容易消失
Q: YOLOv5的损失函数怎么计算的?有哪三类?
A: 位置损失(Localization Loss) 位置损失衡量了模型对目标边界框的位置预测与真实位置之间的差异。YOLOv5使用均方差损失(Mean Squared Error,MSE)来计算位置损失。 置信度损失(Confidence Loss) 置信度损失用于衡量模型对目标是否存在的预测与真实情况之间的差异。它包括目标存在的置信度和目标不存在的背景置信度。YOLOv5使用二元交叉熵损失(Binary Cross Entropy,BCE)来计算置信度损失。 类别损失(Class Loss) 类别损失用于衡量模型对目标类别的预测与真实类别之间的差异。YOLOv5使用交叉熵损失来计算类别损失。
Q: 讲一下IOU,CIOU,GIOU等一些损失函数的区别
A: notability上的笔记里面有怎么计算的过程
Q:数据增强是否了解过?讲一下数据增强都有哪些方法?
A:数据增强有翻转,裁剪和mosaic。在YOLOv5中,"mosaic" 是一种数据增强技术,通过将四张不同的训练图片随机切割并重新拼接成一张新的图片,模型能够学到目标在多样化环境中的外观特征,从而提高其对复杂场景的适应能力。这种训练时的技术有助于改善神经网络在目标检测任务中的性能,增强模型的鲁棒性和泛化能力。
Q:说一下卷积的过程
A:
Q:激活函数的作用 A: 激活函数是神经网络中的一种关键组件,其作用主要体现在以下几个方面:
引入非线性性: 激活函数引入非线性变换,使得神经网络可以学习和表示更加复杂的函数关系。如果没有激活函数,多个线性层的组合仍然只会产生线性变换,限制了网络的表达能力。
特征映射: 激活函数将输入信号映射到输出,并且通过非线性变换,有助于网络学习提取输入数据中的不同特征。这有助于模型学习更加抽象和复杂的表示,使得网络可以更好地捕捉数据的特征。
激活程度控制: 激活函数可以控制神经元的激活程度,即确定神经元是否应该被激活。这对于网络的稀疏性和稳定性至关重要,可以提高网络的泛化能力。
解决梯度消失问题: 在深层网络中,使用非线性激活函数可以避免梯度消失问题。线性变换的叠加会导致梯度在反向传播中逐渐减小,使得底层网络参数很难更新。非线性激活函数有助于传播梯度并促使网络更好地学习数据的复杂结构。
增强模型表达能力: 选择合适的激活函数可以增强模型的表达能力,使其更适合解决特定类型的问题。例如,Sigmoid 激活函数通常用于二分类问题,而ReLU(Rectified Linear Unit)等激活函数则在深度学习中得到广泛应用。
一些常见的激活函数包括 Sigmoid、Hyperbolic Tangent (Tanh)、ReLU 等,每种激活函数都有其独特的性质和适用场景。选择合适的激活函数取决于具体的任务和网络结构。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。