- 博客(142)
- 收藏
- 关注

原创 超详细的YOLO系列算法全家桶--YOLOv1-YOLOv8
YOLOv1-YOLOv8的对比图先给大家呈上,本文介绍了从YOLOv1一直到YOLOv8的网络结构,以及各个版本之间的迭代,非常适合研究生们汇报PPT的制作和cv面试。
2024-01-25 01:04:43
7000
1

原创 机器学习笔记--机器学习基本概念(全面总结,通俗易懂)
什么是机器学习?本文主要介绍了机器学习中的常见概念,包括监督学习和无监督学习、半监督学习、弱监督学习、强化学习、欠拟合和过拟合、损失和优化的概念以及常用的激活函数等。
2024-01-22 19:13:26
6814

原创 机器学习笔记--监督学习和无监督学习全面总结(原理、示意图、代码)
本文为大家总结了监督学习和无监督学习中常用算法原理简单介绍,包括了代码的详细详解,是机器学习的入门学习,同时也是AI算法面试的重点问题。主要包括线性回归、逻辑回归、决策树、朴素贝叶斯、k近邻算法、SVM、PCA、K-Meams等。
2024-01-21 21:20:18
19120
4
原创 C++ 结构体、结构体指针与结构体指针数组详解
结构体:将不同类型的数据组合成一个新的数据类型结构体指针:指向结构体的指针,使用->操作符访问成员结构体指针数组:存储多个结构体指针的数组,适合管理大量结构体对象结构体指针和指针数组在管理大量数据时非常有用,可以减少数据复制的开销,提高程序效率。
2025-03-31 20:33:50
228
原创 C++的指针数组、数组指针和指针数组指针
类型例子本质常见用途指针数组数组(元素是指针)存多个字符串数组指针指针(指向数组)处理二维数组指针数组指针指针(指向指针数组)动态修改指针数组。
2025-03-31 20:25:04
382
原创 指针函数、函数指针和指针函数指针的全面总结
内存管理优先使用unique_ptrshared_ptr避免裸指针所有权传递回调机制// 传统(不推荐)// 现代(推荐)类型简化技巧// 复杂指针类型使用别名// C++11后更推荐成员函数处理// 传统成员函数指针// 现代替代方案维度传统形式现代C++替代方案优势比较返回值裸指针智能指针自动内存管理,异常安全回调函数指针更灵活,支持状态捕获可读性复杂声明类型别名+auto代码更清晰类型安全弱类型强类型系统编译期检查更严格扩展性仅支持普通函数。
2025-03-31 20:11:59
764
原创 C++的map详解
是 C++ 标准库中的一个关联容器,用于存储键值对(key-value pairs),并根据键(key)自动排序。它基于红黑树(一种平衡二叉搜索树)实现,具有高效的查找、插入和删除操作。以下是 的详细解释:定义:存储内容:排序:性能:
2025-03-22 10:00:00
348
原创 C++的pair详解
是 C++ 标准库中的一个模板类,用于将两个值组合成一个单一的对象。它通常用于需要返回两个值的函数,或者作为其他容器的元素类型(例如 的键值对)。以下是 的详细用法:定义:成员:用途:输出:2.2 使用 是一个辅助函数,用于创建 对象。输出:2.3 列表初始化(C++11 及以上)输出:3. 访问成员使用 和 访问 的两个值。输出:4. 修改成员可以直接修改 的 和 成员。输出:5. 比较操作 支持比较操作(, , , ,
2025-03-22 10:00:00
351
原创 C++的常用容器嵌套
在 C++ 中,数据结构之间的嵌套是非常常见的,尤其是在处理复杂数据时。这些嵌套方式可以根据实际需求灵活组合,用于处理复杂的数据结构。如果还有其他问题,请随时提问!
2025-03-21 21:02:56
886
原创 C++的深拷贝和浅拷贝
拷贝构造函数是C++中的一种特殊构造函数,用于创建一个新对象,并用另一个同类型对象的值来初始化它。它的主要作用是 复制对象。ClassName 是类的名称。other 是要被复制的对象,通常以 const 引用传递。为了避免浅拷贝的问题,可以为类定义自定义的拷贝构造函数,实现 深拷贝。int* ptr;// 普通构造函数// 自定义拷贝构造函数(深拷贝)// 析构函数// 调用自定义拷贝构造函数(深拷贝)// 输出20,obj1的ptr未被修改。
2025-03-21 10:00:00
405
原创 deque容器总结
//如果容器变短,则末尾超出容器长度的元素被删除。//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。//删除pos位置的数据,返回下一个数据的位置。//删除[beg,end)区间的数据,返回下一个数据的位置。//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。//在pos位置插入一个elem元素的拷贝,返回新数据的位置。//清空容器的所有数据。//在pos位置插入[beg,end)区间的数据,无返回值。
2025-03-17 18:04:18
621
原创 智能指针是什么?
std::unique_ptr 是 C++11 引入的一个智能指针类,它是一个 独占性所有权 的智能指针,意味着它总是唯一拥有指针所指向的对象。C++11引入了三种智能指针:std::unique_ptr、std::shared_ptr和std::weak_ptr。在 C++14 中,std::make_unique 被引入,它是创建 unique_ptr 的推荐方法。std::weak_ptr不拥有它所指向的对象,主要用于解决shared_ptr之间的循环引用问题。它通常与shared_ptr一起使用。
2025-03-17 17:09:47
791
原创 vector最全总结
/重新指定容器的长度为num,若容器变长,则以默认值填充新位置。 //如果容器变短,则末尾超出容器长度的元素被删除。总结: vector赋值方式比较简单,使用operator=,或者assign都可以。//返回容器中元素的个数。//判断容器是否为空。 //如果容器变短,则末尾超出容器长度的元素被删除。//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。总结:swap可以使两个容器互换,可以达到实用的收缩内存效果。
2025-03-12 18:44:46
706
原创 C++的for循环总结
标准 for 循环:最常见的迭代方式,适用于已知迭代次数的场景。基于范围的 for 循环:用于简化容器的遍历,避免手动管理索引。嵌套for 循环:用于处理多维数据,如二维数组。continue 和 break:控制循环流,跳过某次迭代或退出循环。
2025-03-11 15:23:36
440
原创 力扣题目总结——链表篇(1)
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。给你一个单链表的头节点 head ,请你判断该链表是否为。新链表是通过拼接给定的两个链表的所有节点组成的。给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
2025-03-04 10:55:12
952
原创 算法复杂度
算法复杂度旨在计算在输入数据量N的情况下,算法的「时间使用」和「空间使用」情况;体现算法运行使用的时间和空间随「数据大小 N」而增大的速度。时间: 假设各操作的运行时间为固定常数,统计算法运行的「计算操作的数量」 ,以代表算法运行所需时间;根据输入数据的特点,时间复杂度具有「最差」、「平均」、「最佳」三种情况,分别使用。「输入数据大小 N 」指算法处理的输入数据量;时,算法运行所使用的「暂存空间」+「输出空间」的总体大小。空间: 统计在最差情况下,算法运行所需使用的「最大空间」;,判断此数组中是否有数字。
2025-01-08 20:18:16
962
原创 链表、栈、队列、树
树是一种非线性数据结构,根据子节点数量可分为 「二叉树」 和 「多叉树」,最顶层的节点称为「根节点 root」。以二叉树为例,每个节点包含三个成员变量:「值 val」、「左子节点 left」、「右子节点 right」。链表以节点为单位,每个元素都是一个独立对象,在内存空间的存储是非连续的。链表的节点对象具有两个成员变量:「值 val」,「后继节点引用 next」。栈是一种具有 「先入后出」 特点的抽象数据结构,可使用数组或链表实现。队列是一种具有 「先入先出」 特点的抽象数据结构,可使用链表实现。
2025-01-08 19:58:26
487
原创 C++系列之继承和多态
继承的语法:继承方式一共有三种:总结:继承的好处:可以减少重复的代码class A : public B;A 类称为子类 或 派生类B 类称为父类 或 基类派生类中的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员。从基类继承过过来的表现其共性,而新增的成员体现了其个性。多态分为两类静态多态和动态多态区别:下面通过案例进行讲解多态总结:多态满足条件多态使用条件重写:函数返回值类型 函数名 参数列表 完全一致称为重写虚函数和抽象类在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子
2025-01-01 10:15:00
295
原创 C++系列之友元
生活中你的家有客厅(Public),有你的卧室(Private)客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去但是呢,你也可以允许你的好闺蜜好基友进去。在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术友元的目的就是让一个函数或者类 访问另一个类中私有成员友元的关键字为friend友元的三种实现全局函数做友元类做友元成员函数做友元。
2025-01-01 09:30:00
644
原创 C++系列关键字static
作用域被限制在定义它们的程序文件中(即别的程序文件不能用这个变量),初始值为0。在多人开发项目时,为了防止与他人命令变量重名,可以将变量定位为static。在C++的,静态变量是一个非常有用的特性,它在程序执行期间只初始化一次,并在程序的整个执行期间都保持其值。定义在函数中,只初始化一次,不像普通的局部变量,会随着某次函数调用的结束而消失。静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。
2024-12-31 09:30:00
335
原创 C++系列之构造函数和析构函数
总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题。如果用户定义有参构造函数,c++不在提供默认无参构造,但是会提供默认拷贝构造。解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。对象的初始化和清理工作是编译器强制要我们做的事情,因此如果。如果用户定义拷贝构造函数,c++不会再提供其他构造函数。C++提供了初始化列表语法,用来初始化属性。3.默认拷贝构造函数,对属性进行值拷贝。1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)
2024-12-30 17:45:02
967
原创 C++系列之引用
结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了。总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单。:函数传参时,可以利用引用的技术让形参修饰实参。作用:引用是可以作为函数的返回值存在的。:常量引用主要用来修饰形参,防止误操作。在函数形参列表中,可以加。:可以简化指针修改实参。用法:函数调用作为左值。
2024-12-30 16:38:08
402
原创 C++系列之函数
作用:将一段经常使用的代码封装起来,减少重复代码,一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。函数的定义一般主要有5个步骤:1、返回值类型2、函数名3、参数表列4、函数体语句5、return 表达式返回值类型 函数名 (参数列表) {函数体语句 return 表达式 }返回值类型 :一个函数可以返回一个值。在函数定义中函数名:给函数起个名称参数列表:使用该函数时,传入的数据函数体语句:花括号内的代码,函数内需要执行的语句。
2024-12-28 10:15:00
228
原创 C++系列之数组
数据类型 数组名[ 数组长度 ];数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};数据类型 数组名[ ] = { 值1,值2 ...};//定义方式1//数据类型 数组名[元素个数];//利用下标赋值//利用下标输出//第二种定义方式//数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};//如果{}内不足10个数据,剩余数据用0补全//逐个输出//一个一个输出太麻烦,因此可以利用循环进行输出i < 10;i++)
2024-12-28 09:30:00
352
原创 C++数据类型、运算符、循环语句、跳转语句
作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码两种格式作用:给一段指定的内存空间起名,方便操作这段内存语法:示例:1.3 常量作用:用于记录程序中不可更改的数据C++定义常量两种方式#define 宏常量: const修饰的变量 1.4 关键字**作用:**关键字是C++中预先保留的单词(标识符)C++关键字如下:作用:C++规定给标识符(变量、常量)命名时,有一套自己的规则作用:整型变量表示的是整数类型的数据C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:
2024-12-27 10:00:00
2113
原创 C++系列之结构体
struct 结构体名 { 结构体成员列表 };struct 结构体名 变量名struct 结构体名 变量名 = { 成员1值 , 成员2值…}定义结构体时顺便创建变量//结构体定义//成员列表//姓名int age;//年龄int score;//分数}stu3;//结构体变量创建方式3//结构体变量创建方式1//struct 关键字可以省略stu1.name = "张三";
2024-12-27 09:45:00
295
原创 C++系列之指针总结
指针变量定义语法:数据类型 * 变量名;//1、指针的定义int a = 10;//定义整型变量a//指针定义语法: 数据类型 * 变量名;int * p;//指针变量赋值p = &a;//指针指向变量a的地址//打印数据a的地址 --> 0x7fff3d9ae8bc//打印指针变量p --> 0x7fff3d9ae8bc//2、指针的使用//通过*操作指针变量指向的内存//-->10return 0;指针变量和普通变量的区别普通变量存放的是数据,指针变量存放的是地址。
2024-12-26 16:35:08
424
原创 转置卷积的实现过程
这里指的反卷积,也叫转置卷积,它并不是正向卷积的完全逆过程,反卷积是一种特殊的正向卷积,先按照一定的比例通过补0来扩大输入图像的尺寸,接着旋转卷积核,再进行正向卷积。输入特征图变换:对输入特征图进行变换,包括插值操作和填充操作。插值操作:当步长(stride)大于1时,需要在输入特征图的相邻值之间插入(stride-1)行和列0。这一步是为了在上采样过程中保持特征图的尺寸变化。填充操作:为了得到正确的输出尺寸,还需要在特征图的边缘进行填充。填充的像素数量与卷积核大小、步长和原始填充量有关。卷积运算。
2024-12-02 20:10:21
638
原创 最全卷积总结篇(分组、深度可分离、空洞、转置等)
分组卷积(Group Convolution)是一种卷积操作方式,它最早在AlexNet中引入,并在深度学习中被广泛使用,尤其是在高效模型设计(如MobileNet和ResNeXt)中。分组卷积通过将输入特征通道分为若干组,并在每组内单独进行卷积操作,可以减少计算复杂度和参数量,同时有效利用模型的结构特性。分组卷积的工作原理通道分组:输入特征图的通道图为C_in,输出特征图的通道数为C_out,将每组的C_in和C_out分为G组,每组的通道数为C_in/G和C_out/G。组内卷积。
2024-11-26 21:52:51
2460
原创 卷积神经网络的padding是什么?如何计算?
当stride = 1,dilation=1,卷积公式的输出为H_out = H_in+2p-k+1,要保证H_out = H_in,所以2p = k-1,p = (k-1)/2。假设输入尺寸是 5×5,卷积核大小是 3×3,步幅为 1。我们希望卷积操作后的输出尺寸与输入相同。根据公式推导得,P = (S(H-1)-H+K)/2,当S=2,上述例子为,P = floor[(8-4+3)/2]=3。
2024-11-21 19:56:41
1424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人