当前位置: 首页 > news >正文

AI算法工程师-非leetcode题目总结

AI算法工程师-非leetcode题目总结

  • 除了Leetcode你还需要这些
    • 实现nms
    • 旋转矩形IOU
    • 手动实现BN
    • 手动实现CONV
    • 实现CrossEntropyLoss

除了Leetcode你还需要这些

希望大家留言,我可以进行补充。持续更新~~~

实现nms


import numpy as np
def nms(dets, threshold):x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]score = dets[:, 4]area = (x2 - x1 +1)* (y2-y1+1)keep = []order = score.argsort()[::-1]while len(order) >= 1:i = order[0]keep.append(i)xx1  = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])w = np.maximum(xx2-xx1 +1, 0)h = np.maximum(yy2-yy1+1, 0)inter = w * hiou = inter / (area[i] + area[order[1:]] - inter)idx = np.where(iou <= threshold)[0]order = order[idx+1]return keepdets = np.array([[10, 10, 50, 50, 0.9] , [20, 20, 50, 50, 0.8] ,[50, 50, 100, 100, 0.7] ])
print(nms(dets, 0.5))

旋转矩形IOU


import numpy as np
import cv2# 中心点 矩形的w h, 旋转的theta(角度,不是弧度)
def iou_rotate_calculate(boxes1, boxes2):area1 = boxes1[:, 2] * boxes1[:, 3]area2 = boxes2[:, 2] * boxes2[:, 3]ious = []for i, box1 in enumerate(boxes1):temp_ious = []r1 = ((box1[0], box1[1]), (box1[2], box1[3]), box1[4])for j, box2 in enumerate(boxes2):r2 = ((box2[0], box2[1]), (box2[2], box2[3]), box2[4])int_pts = cv2.rotatedRectangleIntersection(r1, r2)[1]if int_pts is not None:order_pts = cv2.convexHull(int_pts, returnPoints=True)int_area = cv2.contourArea(order_pts)inter = int_area * 1.0 / (area1[i] + area2[j] - int_area)temp_ious.append(inter)else:temp_ious.append(0.0)ious.append(temp_ious)return np.array(ious, dtype=np.float32)

手动实现BN

y = x − m e a n / v a r + e − 6 , . y = x - mean /var+e^-6,. y=xmean/var+e6,.
BN在训练的过程中和测试的过程中应该如何设置:
训练时的数据量大,分布更加稳定;eval数据量有限不建议大规模更改mean和var;
eval: trainning=False, track_running_stats=True。这个是期望中的测试阶段的设置,此时BN会用之前训练好的模型中的(假设已经保存下了)running_mean和running_var并且不会对其进行更新。一般来说,只需要设置model.eval()其中model中含有BN层,即可实现这个功能。
train: trainning=True, track_running_stats=True。这个是期望中的训练阶段的设置,此时BN将会跟踪整个训练过程中batch的统计特性。


import numpy as np
class BN:def __init__(self, momentum, eps, num_features):"""初始化参数值:param momentum: 追踪样本整体均值和方差的动量:param eps: 防止数值计算错误:param num_features: 特征数量"""# 对每个batch的mean和var进行追踪统计self._running_mean = 0self._running_var = 1# 更新self._running_xxx时的动量self._momentum = momentum# 防止分母计算为0self._eps = eps# 对应论文中需要更新的beta和gamma,采用pytorch文档中的初始化值self._beta = np.zeros(shape=(num_features, ))self._gamma = np.ones(shape=(num_features, ))def batch_norm(self, x):"""BN向传播:param x: 数据:return: BN输出"""x_mean = x.mean(axis=0)x_var = x.var(axis=0)# 对应running_mean的更新公式self._running_mean = (1-self._momentum)*x_mean + self._momentum*self._running_meanself._running_var = (1-self._momentum)*x_var + self._momentum*self._running_var# 对应论文中计算BN的公式x_hat = (x-x_mean)/np.sqrt(x_var+self._eps)y = self._gamma*x_hat + self._betareturn y

手动实现CONV

使用了简化版本,类实现的太多了,背不上;

import numpy as npdef conv2d_numpy(input_data, kernel, stride=1, padding=0):# 获取输入数据的尺寸input_height, input_width = input_data.shape# 获取卷积核的尺寸kernel_height, kernel_width = kernel.shape# 计算输出图像的尺寸output_height = (input_height - kernel_height + 2 * padding) // stride + 1output_width = (input_width - kernel_width + 2 * padding) // stride + 1# 初始化输出图像output_data = np.zeros((output_height, output_width))# 填充输入数据(根据填充数量添加额外的行和列)if padding > 0:input_data = np.pad(input_data, ((padding, padding), (padding, padding)), mode='constant')# 执行卷积操作for i in range(0, input_height - kernel_height + 1, stride):for j in range(0, input_width - kernel_width + 1, stride):output_data[i // stride, j // stride] = np.sum(input_data[i:i + kernel_height, j:j + kernel_width] * kernel)return output_data# 创建一个示例的二维图片数据(4x4 像素)
image = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]], dtype=np.float32)# 定义一个卷积核(滤波器)
kernel = np.array([[1, 1],[0, -1]], dtype=np.float32)# 执行自定义的卷积操作
result = conv2d_numpy(image, kernel, stride=1, padding=0)# 打印卷积结果
print(result)

实现CrossEntropyLoss

import torchdef my_cross_entropy(input, target, reduction="mean"):# input.shape: torch.size([-1, class])# target.shape: torch.size([-1])# reduction = "mean" or "sum"# input是模型输出的结果,与target求loss# target的长度和input第一维的长度一致# target的元素值为目标class# reduction默认为mean,即对loss求均值# 还有另一种为sum,对loss求和# 这里对input所有元素求expexp = torch.exp(input)# 根据target的索引,在exp第一维取出元素值,这是softmax的分子tmp1 = exp.gather(1, target.unsqueeze(-1)).squeeze()# 在exp第一维求和,这是softmax的分母tmp2 = exp.sum(1)# softmax公式:ei / sum(ej)softmax = tmp1 / tmp2# cross-entropy公式: -yi * log(pi)# 因为target的yi为1,其余为0,所以在tmp1直接把目标拿出来,# 公式中的pi就是softmax的结果log = -torch.log(softmax)# 官方实现中,reduction有mean/sum及none# 只是对交叉熵后处理的差别if reduction == "mean": return log.mean()else: return log.sum()my_cross_entropy([1, 0], [1,1])

相关文章:

AI算法工程师-非leetcode题目总结

AI算法工程师-非leetcode题目总结 除了Leetcode你还需要这些实现nms旋转矩形IOU手动实现BN手动实现CONV实现CrossEntropyLoss 除了Leetcode你还需要这些 希望大家留言&#xff0c;我可以进行补充。持续更新~~~ 实现nms import numpy as np def nms(dets, threshold):x1 dets…...

2.6:冒泡、简选、直插、快排,递归,宏

1.冒泡排序、简单选择排序、直接插入排序、快速排序(升序) 程序代码&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 void Bubble(int arr[],int len);5 void simple_sort(int arr[],int len);6 void insert_sort(int arr[],in…...

FastDFS安装并整合Openresty

FastDFS安装并整合Openresty 一、安装环境准备【CentOS7.9】二、FastDFS--tracker安装2.1.下载fastdfs2.2.FastDFS安装环境2.3.安装FastDFS依赖libevent库2.4.安装libfastcommon2.5.安装 libserverframe 网络框架2.6.tracker编译安装2.7.安装之后文件目录介绍2.8.错误处理2.9.配…...

93 log4j-slf4j-impl 搭配上 log4j-to-slf4j 导致的 StackOverflow

前言 呵呵 最近想要 做一个 mongo 低版本的客户端读取高版本的服务端传递过来的数据造成的一个错误的时候, 出现了这样的问题 引入了 mongo-java-driver 之后, 使用相关 api 的时候会触发 com.mongo.internal.connection.BaseCluser 的初始化, 其依赖的 Loggers 间接的依赖…...

客户端会话技术-Cookie

一、会话技术 1.1 概述 会话&#xff1a;一次会话中包含多次**请求和响应** 一次会话&#xff1a;浏览器第一次给服务器资源发送请求&#xff0c;此时会话建立&#xff0c;直到有一方断开为止 会话的功能&#xff1a;在一次会话的范围内的多次请求间&#xff0c;共享数据 …...

rsa加密登录解决方案

1.问题 账密登录方式中用户输入密码后&#xff0c;把账号、密码通过http传输到后端进行校验&#xff0c;然而密码属于敏感信息&#xff0c;不能以明文传输&#xff0c;否则容易被拦截窃取&#xff0c;因此需要考虑如何安全传输密码 2.解决方案 使用rsa加密方式&#xff0c;r…...

速盾:海外服务器用了cdn还是卡怎么办

海外服务器使用CDN卡顿问题的解决办法 在如今互联网高速发展的时代&#xff0c;海外服务器成为了许多企业和个人用户的首选&#xff0c;因为它能够提供更高的带宽和更稳定的网络连接。然而&#xff0c;尽管海外服务器在网络性能方面表现出色&#xff0c;但在使用过程中仍然可能…...

[python-opencv] PNG 裁切物体

拿到一组图PNG的图&#xff0c;边缘有点太宽了&#xff0c;需要裁切一下&#xff0c;为了这个需求&#xff0c;简单复习一下基本语法。 1. 读取PNG的4个通道 image cv.imread(image_path, cv.IMREAD_UNCHANGED) 附参数说明&#xff1a; IMREAD_UNCHANGED -1 返…...

机器学习——有监督学习和无监督学习

有监督学习 简单来说&#xff0c;就是人教会计算机学会做一件事。 给算法一个数据集&#xff0c;其中数据集中包含了正确答案&#xff0c;根据这个数据集&#xff0c;可以对额外的数据希望得到一个正确判断&#xff08;详见下面的例子&#xff09; 回归问题 例如现在有一个…...

MySQL单主模式部署组复制集群

前言 本篇文章介绍MySQL8.0.27版本的组复制详细搭建过程&#xff0c;教你如何快速搭建一个三节点的单主模式组复制集群。 实际上&#xff0c;MySQL组复制是MySQL的一个插件 group_replication.so&#xff0c;组中的每个成员都需要配置并安装该插件&#xff0c;配置和安装过程…...

【大厂AI课学习笔记】【1.5 AI技术领域】(10)对话系统

对话系统&#xff0c;Dialogue System&#xff0c;也称为会话代理。是一种模拟人类与人交谈的计算机系统&#xff0c;旨在可以与人类形成连贯通顺的对话&#xff0c;通信方式主要有语音/文本/图片&#xff0c;当然也可以手势/触觉等其他方式 一般我们将对话系统&#xff0c;分…...

【ARM 嵌入式 编译系列 2.7 -- GCC 编译优化参数详细介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 GCC 编译优化概述常用优化等级-O1 打开的优化选项-O2 打开的优化选项-O3 打开的优化选项-Os 打开的优化选项优化技术使用优化选项的注意事项GCC 编译优化概述 GCC(GNU Compiler Collection)包含了用于C、C++、Objective-C、Fort…...

《剑指 Offer》专项突破版 - 面试题 38、39 和 40 : 通过三道面试题详解单调栈(C++ 实现)

目录 面试题 38 : 每日温度 面试题 39 : 直方图最大矩形面积 方法一、暴力求解 方法二、递归求解 方法三、单调栈法 面试题 40 : 矩阵中的最大矩形 面试题 38 : 每日温度 题目&#xff1a; 输入一个数组&#xff0c;它的每个数字是某天的温度。请计算每天需要等几天才会…...

动态规划C语言

#include <stdio.h> #include <stdlib.h> //0-1背包问题是一种经典的组合优化问题&#xff0c; //问题描述为&#xff1a;有一个给定容量的背包和一组具有不同价值和重量的物品&#xff0c;如何选择物品放入背包中&#xff0c;以使得背包中物品的总价值最大化&…...

基于微信小程序的校园二手交易平台

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

K8S系列文章之 [使用 Alpine 搭建 k3s]

官方文档&#xff1a;K3s - 轻量级 Kubernetes | K3s 官方描述&#xff0c;可运行在 systemd 或者 openrc 环境上&#xff0c;那就往精简方向走&#xff0c;使用 alpine 做系统。与 RHEL、Debian 的区别&#xff0c;主要在防火墙侧&#xff1b;其他基础配置需求类似&#xff0…...

计算机视觉 | OpenCV 实现手势虚拟控制亮度和音量

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在当今科技飞速发展的时代&#xff0c;我们身边充斥着各种智能设备&#xff0c;然而&#xff0c;如何更便捷地与这些设备进行交互却是一个不断被探索的课题。本文将主要介绍一个基于 OpenCV 的手势识别项目&#xff0c;通过手势…...

python28-Python的运算符之三目运算符

Python可通过if语句来实现三目运算符的功能&#xff0c;因此可以近似地把这种if语句当成三目运算符。作为三目运算符的f语句的语法格式如下 True_statements if expression else False_statements 三目运算符的规则是:先对逻辑表达式expression求值&#xff0c;如果逻辑表达式…...

高德 API 10009

问题 笔者使用高德地图所提供的API接口&#xff0c;访问接口报错 {"info":"USERKEY_PLAT_NOMATCH","infocode":"10009","status":"0","sec_code_debug":"d41d8cd98f00b204e9800998ecf8427e"…...

Go 语言中如何大小端字节序?int 转 byte 是如何进行的?

嗨&#xff0c;大家好&#xff01;我是波罗学。 本文是系列文章 Go 技巧第十五篇&#xff0c;系列文章查看&#xff1a;Go 语言技巧。 我们先看这样一个问题&#xff1a;“Go 语言中&#xff0c;将 byte 转换为 int 时是否涉及字节序&#xff08;endianness&#xff09;&#x…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...