- 博客(243)
- 资源 (2)
- 收藏
- 关注
原创 torch.nn 下的常用深度学习函数
Dropout 的主要用途是在训练过程中随机丢弃一部分神经元的输出,从而减少模型对训练数据的过拟合。常用于多分类问题,输入张量通常是模型的输出,目标张量是类别索引。将所有负值置为0,保留正值,是最常用的激活函数之一,能够加速训练过程。计算预测值与真实值之间的绝对值,它对异常值的敏感度较低,适用于回归问题。将输入值映射到(0,1)区间,常用于二分类问题的输出层。:模型的原始输出,形状为 (N,C),其中 N 是样本数,C 是类别数。:用于定义一个顺序模型,可以将多个层按顺序堆叠起来,简化模型的定义过程。
2025-05-10 21:19:56
976
原创 Python torch.optim.lr_scheduler 常用学习率调度器使用方法
学习率(Learning Rate)是深度学习中一个关键的超参数,它决定了在优化算法(如梯度下降法)更新模型参数时,参数调整的幅度。简单来说,它控制着模型在训练过程中朝着最小化损失函数方向前进的步伐大小。假设我们使用简单的梯度下降法来更新模型的参数,对于损失函数,其更新规则可以表示为:其中,就是学习率。这个公式的意思是,在参数更新时,我们沿着损失函数梯度的反方向(因为梯度方向是函数增长最快的方向,我们要求最小值,所以取反方向)移动,移动的步长由学习率决定。学习率的重要性学习率过大。
2025-04-25 14:58:36
1136
原创 Python torchvision.transforms 下常用图像处理方法
是 PyTorch 用于处理图像数据的一个模块,提供了丰富的图像变换功能。
2025-04-24 21:30:23
1176
原创 Mixup数据增强方法总结
Mixup 通过其核心思想是具体来说,对于两个样本及其对应的独热编码标签,按照一定比例进行加权混合,从而得到一个新的样本和标签。
2025-04-23 14:42:18
1278
原创 深度学习中的“重参数化”总结
深度学习中的重参数化(Reparameterization)是一种数学技巧,主要用于解决模型训练过程中随机性操作(如采样)导致的梯度不可导问题。在涉及概率生成的任务中(如变分自编码器VAE),我们希望从潜在变量的分布中采样,这个分布通常是某种分布(例如高斯分布,参数化为均值。(通常为标准分布,如标准正态分布),将随机性转移到外部,使采样过程变为可导操作。重参数化技巧通过引入一个独立的随机变量来解决这个问题,使得采样过程可导。策略网络输出动作分布的参数,通过重参数化采样动作,使梯度可传回策略网络。
2025-04-22 18:59:46
831
原创 conda环境独立管理cudatoolkit
在使用工作站跑不同的深度学习项目时,由于项目之间可能需要使用不同版本的python和pytorch,这间接影响了不同版本的pytorch必须兼容工作站上安装的同一个cudatoolkit。然而这很难做到,比如,一个项目可能需要CUDA 10.1,而另一个项目需要CUDA 11.3。如果在全局安装的话,版本冲突会导致问题。后来查阅资料发现,在不同的 Conda 环境中可以安装不同版本的。
2025-04-20 12:13:21
695
原创 信息量、香农熵、交叉熵、KL散度总结
对于一个事件而言,它一般具有三个特征:小概率事件往往具有较大的信息量大概率事件往往具有较小的信息量独立事件的信息量相互可以相加比如我们在买彩票这个事件中,彩票未中奖的概率往往很高,对我们而言一点也不稀奇,给我们带来的信息量很小,彩票中大奖的概率往往非常低,中一次大奖则是非常罕见,给我们带来的信息量很大。如何描述信息量大小呢?有如下定义:其中描述某一事件发生的概率,反映了信息量与发生概率之间成反比,取对数是为了 独立事件的信息量相互可以相加(第三个特征)。
2025-04-19 17:12:01
812
原创 Leetcode 58. 最后一个单词的长度
分析:一道基础的字符串处理问题,只需要从最后开始找第一个有效字符开始到第一个空格这段间隔即可,需要额外考虑没有空格的情况。,由若干单词组成,单词前后用一些空格字符隔开。是指仅由字母组成、不包含任何空格字符的最大子字符串。最后一个单词是长度为 6 的“joyboy”。最后一个单词是“World”,长度为 5。最后一个单词是“moon”,长度为 4。
2025-04-11 16:14:55
261
原创 Leetcode 12. 整数转罗马数字
分析:一道基础的字符串处理问题,先定义一个vector容器存储每一位的键值对,然后把每一位的数字提取出来,逐个翻译即可。罗马数字是通过添加从最高到最低的小数位值的转换而形成的。3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)700 = DCC 由于 500 (D) + 100 (C) + 100 (C)注意:49 不是 50 (L) 减 1 (I) 因为转换是基于小数位。40 = XL 由于 50 (L) 减 10 (X)给定一个整数,将其转换为罗马数字。
2025-04-11 15:50:15
335
原创 Leetcode 134.加油站
换句话说,如果x到达不了y+1,那么x~y之间的点也不可能到达y+1,因为中间任何一点的油都是拥有前面的余量的,所以下次遍历直接从y+1开始。现在,考虑任意一个位于 x,y 之间的加油站 z(包括 x 和 y),我们现在考察从该加油站出发,能否到达加油站 y 的下一个加油站,也就是要判断。我们此前发现,从加油站 x 出发,每经过一个加油站就加一次油(包括起始加油站),最后一个可以到达的加油站是 y(不妨设 x<y)。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。
2025-04-11 14:22:50
373
原创 Leetcode 跳跃游戏 II (贪心算法)
可以看到在第一次跳跃范围内(0~2),查找一个下次能跳得更远的点,当在位置1进行第二次跳跃时可以跳三格,这是在0~2范围内起跳可以跳得最远的地方。然后我们再从(2~4)范围内查找下次能跳得更远的点,当在位置4进行第三次跳跃时可以跳四格,这是在2~4范围内起跳可以跳得最远的地方。每进行一次跳跃,次数+1,直到跳的最远距离大于或等于最后的位置。从下标为 0 跳到下标为 1 的位置,跳。向后跳转的最大长度。生成的测试用例可以到达。跳到最后一个位置的最小跳跃数是。步到达数组的最后一个位置。处,你可以跳转到任意。
2025-04-09 22:00:19
714
原创 Leetcode 55.跳跃游戏
无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。给你一个非负整数数组。
2025-04-09 19:40:30
185
原创 Leetcode Z 字形变换
将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为行数为3时,排列如下:Y I R。请你实现这个将字符串进行指定行数变换的函数:Y A H RP I"A"',''.'
2025-04-09 14:29:26
341
原创 Ubuntu服务器挂载之前的数据硬盘
这里假设在挂载硬盘之前,您的硬盘从之前的服务器上正确卸载下来。请注意,以下任何操作不当都有可能导致硬盘数据丢失或损坏,如果您的数据非常重要,请及时备份。UUID=<硬盘UUID> <挂载点> <文件系统类型> <挂载选项> <dump> <fsck>通过以上步骤,硬盘将在每次开机时自动挂载。:若硬盘未连接导致系统无法启动,在挂载选项中添加。:若挂载后无法读写,尝试在挂载选项中添加。:硬盘分区的唯一标识符或设备路径。(更稳定,设备名可能变化)。:步骤 2 中创建的目录。(替换为你的用户 ID)。
2025-04-03 21:34:26
636
原创 C++ STL常用算法之常用集合算法
两个集合必须是有序序列,:两个集合必须是有序序列,:两个集合必须是有序序列,// 求两个容器的交集。// 求两个容器的并集。// 求两个容器的差集。:目标容器开始迭代器。:目标容器开始迭代器。:目标容器开始迭代器。
2025-03-30 20:08:14
530
原创 C++ STL常用算法之常用算术生成算法
算术生成算法属于小型算法,使用时包含的头文件为。// 计算容器元素累计总和。计算区间内容器元素累计总和。// 向容器中添加元素。掌握常用的算术生成算法。向容器中填充指定的元素。
2025-03-30 19:45:39
329
原创 C++ STL常用算法之常用拷贝和替换算法
replace_if // 容器内指定范围满足条件的元素替换为新元素。replace // 将容器内指定范围的旧元素修改为新元素。copy // 容器内指定范围的元素拷贝到另一容器中。将区间内满足条件的元素,替换成指定元素。容器内指定范围的元素拷贝到另一容器中。将容器内指定范围的旧元素修改为新元素。swap // 互换两个容器的元素。掌握常用的拷贝和替换算法。
2025-03-30 18:03:40
311
原创 C++ STL常用算法之常用排序算法
掌握常用的排序算法。sort//对容器内元素进行排序//洗牌,指定范围内的元素随机调整次序merge//容器元素合并,并存储到另一容器中reverse//反转指定范围的元素。
2025-03-30 17:09:01
658
原创 C++ STL常用算法之常用查找算法
对于自定义类型的数据统计,需要在自定义类中重载 == ,来告诉 count 函数如何比较相同自定义类型。// 按值查找元素,找到返回指定位置迭代器(第一个符合条件的迭代器),找不到返回结束迭代器位置。查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器。// 查找相邻重复元素,返回相邻元素的第一个位置的迭代器。// 统计元素出现次数,返回 int 类型表示统计次数。// 查找指定的元素,查到返回。// 按条件统计元素出现次数。//按条件统计元素个数。//查找相邻重复元素。,告诉函数的比较方法。
2025-03-30 15:51:35
432
原创 C++ STL常用算法之常用遍历算法
算法主要由头文件<numeric>组成。是所有STL头文件中最大的一个,范围涉及到比较、交换、查找、遍历操作、复制、修改等等。<numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数。定义了一些模板类,用以声明函数对象。
2025-03-29 22:45:35
156
原创 C++ 内建函数对象:算术仿函数、关系仿函数、逻辑仿函数总结
使用内建的关系仿函数可以简化我们编写排序的比较方法,直接调用关系仿函数即可。这些仿函数所产生的对象,用法和一般函数完全相同。使用内建函数对象,需要引入头文件。是一元运算,其他都是二元运算。STL内建了一些函数对象。
2025-03-29 21:53:54
242
原创 C++ 函数对象(仿函数)总结
重载函数调用操作符的类,其对象常称为。函数对象使用重载的()时,行为类似函数调用,也叫。函数对象(仿函数)是一个类,不是一个函数。
2025-03-29 19:39:52
167
原创 C++ map容器总结
map中所有元素都是pairpair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序。
2025-03-27 22:49:22
545
原创 C++ list容器总结
将数据进行链式存储是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表由一系列结点组成一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域是一个双向循环链表由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。采用动态存储分配,不会造成内存浪费和溢出链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素链表灵活,但是空间(指针域)和时间(遍历)额外耗费较大。
2025-03-27 19:05:16
661
原创 C++ queue容器总结
Queue是一种先进先出(First In First Out, FIFO)的数据结构,它有两个出口队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。队列中进数据称为入队(push)。
2025-03-26 16:52:15
301
原创 C++ stack容器总结
stack是一种后进先出(Last In First Out, LIFO)的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈中进入的数据称为----入栈(PUSH)栈中出去的数据成为----出栈(POP)
2025-03-26 16:46:10
249
原创 C++ deque容器总结
双端数组,可以对头端进行插入删除操作vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关可以看到,相较于vector,deque 可以在头部进行操作。
2025-03-26 15:40:31
693
原创 C++ vector容器总结
vector<int>(v).swap(v) 则会把 v 和 匿名对象 进行交换,此时 v 指向的是匿名对象初始化好的容器。//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。//重新指定容器的长度为num,若容器变长,则以默认值 0 填充新位置。//将v(begin(), end())区间中的元素拷贝给本身,注意右边是开区间。可以发现 ,vector<int>(v).swap(v);//删除迭代器指向的元素。
2025-03-26 12:28:16
925
原创 C++ string容器总结
string是C++风格的字符串,而string本质上是一个类。string和char区别:char *是一个指针。string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。string类内部封装了很多成员方法,例如:查找find,拷贝copy,删除delete替换replace,插入insert。string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。
2025-03-25 22:35:02
593
原创 C++ 通过vector理解迭代器的使用方法
定义一个Person类,通过一个迭代器并结合for循环访问自定义数据public:int m_age;it!= v.end();it++){it!= v.end();it++){注意两种遍历中迭代器的表示方式,it 表示指向该对象的指针 *(it) 表示该对象输出结果都是一样的这里我们再使用 for_each() 遍历试一试public:int m_age;
2025-03-25 21:22:38
1294
原创 C++ STL 基本概念总结
长久以来,软件界一直希望建立一种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了STL。
2025-03-24 21:38:25
414
原创 C++ 利用类模板实现一个数组类封装
该项目在vscode上开发,在构建项目时请修改.vscode文件中的编译器和调试器路径。提供对应的拷贝构造函数以及operator=防止浅拷贝问题。可以对内置数据类型以及自定义数据类型的数据进行存储。提供尾插法和尾删法对数组中的数据进行增加和删除。可以获取数组中当前元素个数和数组的容量。可以通过下标的方式访问数组中的元素。测试自定义数据类型和内置数据类型。构造函数中可以传入数组的容量。利用类模板实现一个数组类封装。将数组中的数据存储到堆区。
2025-03-24 21:11:23
630
原创 无约束优化问题
无约束优化就像在自由空间中寻找最高或最低点,核心是目标函数的性质(如是否平滑、凸性)和如何高效搜索。它是许多实际问题的简化模型,也为复杂的有约束优化提供了解决思路。x%3D0xx。
2025-03-20 15:06:27
455
原创 先验分布和后验分布
先验是实验前的“假设”,后验是实验后的“结论”。用数据更新信念。例子中,数据(7正3反)将我们对 p 的估计从0.5调整到0.64,同时降低了对极端值的怀疑。先验分布和后验分布是概率论和统计学中用于描述参数或事件在实验前后的概率分布的重要概念。先验分布代表了我们最初的信念,而后验分布则是在考虑了数据之后的更新信念。贝叶斯定理是连接这两个分布的关键工具,它允许我们在面对新数据时不断更新我们的认知和推断。
2025-03-19 22:12:43
1281
数据库实验2.rar
2020-02-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人