CV&感知算法面试常见手撕代码题目汇总(二)【附参考实现代码】
在如今互联网大厂面试环节中,现场手撕代码已经成为了每位面试者必须要经历的一关。目前85%以上的互联网公司都将面试者的现场编程能力作为能否拿到Offer的核心评价指标。如果可以在规定时间内流畅、顺利完成面试官给出题目的候选人,拿到高质量面评的概率要比其他人高出很多。
本文作为《一站式智驾感知算法求职宝典》专栏中CV&感知算法面试常见手撕代码题目汇总系列的第二篇文章,本篇内容包含:LN归一化层实现、最大池化层实现、平均池化层实现、Transformer中的多头注意力机制实现四道算法手撕代码题目,并给出了参考实现代码。
CV&感知算法面试常见手撕代码题目汇总系列将会持续为大家收录和整理互联网大厂面试中的高频手撕算法题目,并且给出参考实现代码,便于同学们实习和求职前复习,从而在面试手撕代码环节更加游刃有余!
《一站式智驾感知算法求职宝典》专栏包含诸多高质量求职内容系列,并且包含
- 如何制作一份高质量个人简历保姆级教程
- 如何包装论文成果&科研项目&实习工作话术
- 十五家自动驾驶感知算法面经(附参考答案)
- 互联网大厂在线笔试ACM模式常见输入输出类型题目汇总(附Python和C++两种语言参考答案)
- CV&感知算法面试常见手撕代码题目汇总
无论你是即将开始秋招的应届毕业生,还是打算找实习的算法小白,《一站式智驾感知算法求职宝典》都将是你求职路上的得力助手!
一、LN归一化层实现
题目要求:实现Layer Normalization层
import torch import torch.nn as nn class LnLayer(nn.Module): def __init__(self, normalized_shape, elementwise_affine=True): super(LnLayer, self).__init__() self.normalized_shape = normalized_shape self.elementwise_affine = elementwise_affine self.eps = 1e-5 if self.elementwise_affine is True: self.gamma = nn.Parameter(torch.ones(self.normalized_shape), requires_grad=True) self.beta = nn.Parameter(torch.zeros(self.normalized_shape), requires_grad=True) def forward(self, x): x_mean = torch.mean(x, dim=(1, 2, 3), keepdims=True) x_var = torch.mean((x - x_mean) ** 2, dim=(1, 2, 3), keepdim=True) x_hat = (x - x_mean) / torch.sqrt(x_var + self.eps) if self.elementwise_affine is True: x_hat = self.gamma * x_hat + self.beta return x_hat if __name__ == "__main__": bs, c, h, w = 2, 2, 2, 3 torch.manual_seed(0) tensor = torch.randn((bs, c, h, w)) # custom LayerNorm ln = LnLayer((tensor.shape[1:]), elementwise_affine=True) print(f"custom output: \n{ln(tensor)}") # official LayerNorm layernorm = nn.LayerNorm(tensor.shape[1:], elementwise_affine=True) print(f"official output: \n{layernorm(tensor)}")
二、最大池化层实现
题目要求:不利用现有的库,实现卷积神经网络中的最大池化层
import torch class MaxPool2d: def __init__(self, kernel_size=2, stride=2): self.kernel_size = kernel_size self.stride = stride def forward(self, x): batch_size, channels, height, width = x.shape out_height = (height - self.kernel_size) // self.stride + 1 out_width = (width - self.kernel_size) // self.stride + 1 output = torch.zeros((batch_size, channels, out_height, out_width)) for b in range(batch_size): for c in range(channels): for i in range(out_height): for j in range(out_width): h_start = i *
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
作为24届上岸自动驾驶感知算法的学长,将自己在秋招中的面试经验和心得体会总结成《一站式智驾感知算法求职宝典》,宝典包含【求职简历如何准备】、【论文/实习/科研项目经历如何包装】、【Leetcode算法刷题思路】、【十五家智驾感知算法面经汇总(附参考答案)】、【CV&感知算法面试常见代码题目汇总(附参考代码)】、【互联网大厂笔试ACM模式输入输出类型题目汇总】等多个板块,祝你拿下心仪Offer!