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!

全部评论

相关推荐

感觉现在还太早了 投了也没把握 还没做好开战的准备但是不知道会不会很多名额被占了 有没有人来说说
MMMJC:可以投来练面试水平,尤其是如果你暑期没怎么练过的话,以免正式批一开始因为缺乏经验白白错失机会,正式批一开始那一批是比较好进的,如果错失了很亏
点赞 评论 收藏
分享
投递长鑫存储等公司10个岗位
点赞 评论 收藏
分享
评论
7
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务