- 博客(170)
- 收藏
- 关注
原创 【C++11】可变参数模版
C++11支持可变参数模板,也就是说支持可变数量参数的函数模板和类模板,可变数目的参数被称为参数包,存在两种参数包:模板参数包,表示零或多个模板参数;函数参数包,表示零或多个函数参数。我们用省略号来指出一个模板参数或函数参数表示一个包。class......可变参数模板的原理跟模板类似,本质还是去实例化对应类型和个数的多个函数。这里我们可以使用sizeof...运算符去计算参数包中参数的个数。原理1:编译本质这里会结合引用折叠规则实例化出以下四个函数。
2025-04-04 18:25:26
132
原创 【C++11】右值引用和移动语义
C++98的C++语法中就有引用的语法,而C++11中新增了的,C++11之后我们之前学习的引用就叫做。无论左值引用还是右值引用,。
2025-04-04 16:27:58
406
原创 【数据结构】哈希
哈希(hash)又称散列,是一种组织数据的方式。从译名来看,有散乱排列的意思。本质就是,查找时通过这个哈希函数计算出Key存储的位置,进行快速查找。
2025-04-02 14:52:07
990
原创 【数据结构】AVL树
*右单旋解决的纯粹的左边高,**但是插入在b子树中,10为跟的子树不再是单纯的左边高,对于10是左边高,但是对于5是右边 高,需要用两次旋转才能解决,以5为旋转点进行一个左单旋,以10为旋转点进行一个右单旋,这棵树 这棵树就平衡了。场景3: (h==0) 场景3:h == 0时,a/b/c都是空树,b自己就是一个新增结点,不断更新5->10平衡因子,引发旋 转,其中8的平衡因子为0,旋转后8和10和5平衡因子均为0。。,因为我们要对b的父亲5为旋转点进行左单旋,左单旋需要动b树中的左子树。
2025-03-31 15:13:42
278
原创 【C++】set(STL)
std::pair的模板定义形式为,其中T1和T2分别是两个成员的类型。// 默认构造函数,成员会进行默认初始化// 使用提供的参数初始化// 使用 make_pair 函数,自动推导类型return 0;在这个示例中,p1使用默认构造函数进行初始化,p2显式地传入参数进行初始化,p3则通过函数创建,该函数可以自动推导类型。集是按特定顺序存储唯一元素的容器。在set中 ,元素的值也标识其本身(该值本身是key,类型为T),并且每个值必须是唯一的。set。
2025-03-30 15:32:05
253
原创 【深度学习】汇聚层
通常当我们处理图像时,我们希望逐渐降低隐藏表示的空间分辨率、聚集信息,这样随着我们在神经网络中层叠的上升,每个神经元对其敏感的感受野(输入)就越大。而我们的机器学习任务通常会跟全局图像的问题有关(例如,“图像是否包含一只猫呢?”),所以我们最后一层的神经元应该对整个输入的全局敏感。通过逐渐聚合信息,生成越来越粗糙的映射,最终实现学习全局表示的目标,同时将卷积图层的所有优势保留在中间层。此外,当检测较底层的特征时,我们通常希望这些特征保持某种程度上的平移不变性。例如,如果我们拍摄黑白之间轮廓清晰的图像X。
2025-03-29 21:25:58
702
原创 【深度学习】多输入多输出通道
构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。但是到目前为止,我们仅展示了单个输入和单个输出通道的简化例子。这使得我们可以将输入、卷积核和输出看作二维张量。当我们添加通道时,我们的输入和隐藏的表示都变成了三维张量。例如,每个RGB输入图像具有3×h×w的形状。我们将这个大小为3的轴称为(channel)维度。本节将更深入地研究具有多输入和多输出通道的卷积核。
2025-03-29 20:39:50
1197
原创 【C++】二叉搜索树
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:最优情况下,二叉搜索树为完全二叉树(或者接近完全二叉树),其高度为:log2Nlog _{2} Nlog2N。最差情况下,二叉搜索树退化为单支树(或者类似单支),其高度为:NNN。所以综合而言二叉搜索树增删查改时间复杂度为:O(N)O(N)O(N)。那么这样的效率显然是无法满足我们需求的,后续介绍二叉搜索树的变形(平衡二叉搜索树AVL树和红黑树),才能适用于我们在内存中存储和搜索数据。另外需要说明的是,二分查找也可以实现O(l
2025-03-29 12:37:31
1124
原创 【C++】多态
*多态是一个继承关系的下的类对象,去调用同一函数,产生了不同的行为。**比如Student继承了Person。Person对象买票全价,Student对象优惠买票。实现多态还有两个必须重要条件:必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且完成了虚函数重写/覆盖。说明:要实现多态效果,第一必须是基类的指针或引用,因为只有基类的指针或引用才能既指向基类对象又指向派生类对象;第二派生类必须对基类的虚函数完成重写/覆盖,重写或者覆盖了,基类和派生类之间才能有不同的函数。
2025-03-28 17:13:59
773
原创 【C++】继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。
2025-03-27 10:56:08
740
原创 【深度学习】填充和步幅
在前面的例子中,输入的高度和宽度都为3,卷积核的高度和宽度都为2,生成的输出表征的维数为2×2。正如我们在图像卷积一节中所概括的那样,nh×nwkh×kwnh−kh1×nw−kw1因此,。还有什么因素会影响输出的大小呢?本节我们将介绍填充(padding)和步幅(stride)。假设以下情景:有时,在应用了连续的卷积之后,我们最终得到的输出远小于输入大小。这是由于卷积核的宽度和高度通常大于1。
2025-03-26 20:08:37
990
原创 【MySQL】复合查询
多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J。显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号–empno)显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。
2025-03-24 11:05:11
450
原创 【MySQL】函数
注意:length函数返回字符串长度,以字节为单位。比如:字母,数字算作一个字节,中文表示多个字节数(与字符集编码有关)要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”显示所有留言信息,发布日期只显示日期,不用显示时间。截取EMP表中ename字段的第二个到第三个字符。将EMP表中所有名字中有S的替换成’上海’理解:初始时间 now() 初始时间+2。以首字母小写的方式显示所有员工的姓名。获取emp表的ename列的字符集。创建一张表,记录生日。
2025-03-21 11:56:25
961
原创 Makefile
CC:c编译器的名称,默认值为cc。.cpp .c预编译器的名称默认值为$(CC) -ECC = gcc回显问题,Makefile中的命令都会被打印出来。如果不想打印命令部分 可以使用去除回显。
2025-03-20 18:31:50
568
原创 【MySQL】插入查询结果,聚合函数
having和group by配合使用,对group by结果进行过滤。案例:删除表中的的重复记录,重复的数据只能有一份-- 创建原数据表。子句可以对指定列进行分组查询。统计各个部门的平均工资。在select中使用。
2025-03-20 17:42:58
429
原创 【Git】标签管理
标签tag,可以简单的理解为是对某次commit的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。这有什么用呢?相较于难以记住的commit idtag很好的解决这个问题,因为tag一定要给一个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。
2025-03-16 12:33:04
318
原创 【Git】配置Git
在日常开发中,有些文件不想或不应该提交到远端,如保存数据库密码的配置文件。在Git工作区的根目录下创建一个特殊的.gitignore文件,把要忽略的文件名填进去,Git就会自动忽略这些文件。不需要从头写.gitignore文件,gitee在创建仓库时可为我们生成,但需要主动勾选:如果当时没有选择这个选择,在工作区创建一个也是可以的。无论哪种方式,最终都可以得到一个完整的.gitignore文件,例如我们想忽略以.so和.ini结尾所有⽂件,.gitignore。
2025-03-14 16:26:46
1437
原创 【深度学习】从全连接层到卷积
我们之前讨论的多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。此时,多层感知机可能是最好的选择,然而对于高维感知数据,这种缺少结构的网络可能会变得不实用。例如,在之前猫狗分类的例子中:假设我们有一个足够充分的照片数据集,数据集中是拥有标注的照片,每张照片具有百万级像素,这意味着网络的每次输入都有一百万个维度。即使将隐藏层维度降低到1000,这个全连接层也将有106×1031。
2025-03-12 15:35:09
637
原创 【MySQL】表的约束
外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
2025-03-12 14:34:44
831
原创 【Git】推送,拉取远程仓库
或者从来没有设置过全局的name和e-mail,那么我们第一次提交时也会报错。这就需要我们重新配置下了,同样要注意需要和gitee上配置的用户名和邮箱一致。这里由于我们使用的是SSH协议,是不用每一次推送都输入密码的,方便了我们的推送操作。如果你使用的是HTTPS协议,有个麻烦地方就是每次推送都必须输入口令。到这里我们已经将内容提交至本地仓库了,如何将本地仓库的内容推送至远程仓库呢,需要使用。命令,该命令用于从远程获取代码并合并本地的版本。此时,远程仓库是要领先于本地仓库一个版本,我们发现,拉取成功了!
2025-03-12 09:40:35
214
原创 【深度学习】读写文件
到目前为止,我们讨论了如何处理数据,以及如何构建、训练和测试深度学习模型。然而,有时我们希望保存训练的模型,以备将来在各种环境中使用(比如在部署中进行预测)。此外,当运行一个耗时较长的训练过程时,最佳的做法是定期保存中间结果,以确保在服务器电源被不小心断掉时,我们不会损失几天的计算结果。因此,现在是时候了。
2025-03-11 19:16:43
623
原创 【深度学习】延后初始化
到目前为止,我们忽略了建立网络时需要做的以下这些事情:有些读者可能会对我们的代码能运行感到惊讶。毕竟,深度学习框架无法判断网络的输入维度是什么。这里的诀窍是框架的延后初始化(defers initialization),即直到数据第一次通过模型传递时,框架才会动态地推断出每个层的大小。在以后,当使用卷积神经网络时,由于输入维度(即图像的分辨率)将影响每个后续层的维数,有了该技术将更加方便。现在我们在编写代码时无须知道维度是什么就可以设置参数,这种能力可以大大简化定义和修改模型的任务。接下来,我们将
2025-03-11 18:34:10
453
原创 【MySQL】数据类型
而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32, …注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。有一个调查表votes,需要调查人的喜好,比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]。
2025-03-11 12:46:00
1299
原创 【Git】远程操作
顺利的话,可以在用户主目录里找到 .ssh 目录,里⾯有 id_rsa 和 id_rsa.pub 两个文件,这两个就是SSH Key的秘钥对, id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,可以放心地告诉任何人。实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。我们目前所说的所有内容(工作区,暂存区,版本库等等 ),都是在本地!
2025-03-11 11:53:28
776
原创 【深度学习】参数管理
在选择了架构并设置了超参数后,我们就进入了训练阶段。此时,我们的目标是找到使损失函数最小化的模型参数值。经过训练后,我们将需要使用这些参数来做出未来的预测。此外,有时我们希望提取参数,以便在其他环境中复用它们,将模型保存下来,以便它可以在其他软件中执行,或者为了获得科学的理解而进行检查。之前的介绍中,我们只依靠深度学习框架来完成训练的工作,而忽略了操作参数的具体细节。
2025-03-10 19:08:25
1077
原创 【深度学习】 层和块
之前首次介绍神经网络时,我们关注的是具有单一输出的线性模型。在这里,整个模型只有一个输出。注意,单个神经网络(1)接受一些输入;(2)生成相应的标量输出;(3)具有一组相关(parameters),更新这些参数可以优化某目标函数。然后,当考虑具有多个输出的网络时,我们利用矢量化算法来描述整层神经元。像单个神经元一样,层(1)接受一组输入,(2)生成相应的输出,(3)由一组可调整参数描述。当我们使用softmax回归时,一个单层本身就是模型。
2025-03-10 17:13:32
1103
原创 【MySQL】表的操作
语法:说明:说明:不同的存储引擎,创建表的文件不一样。 表存储引擎是,在数据目中有三个不同的文件,分别是:示例:在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。案例:在表添加二条记录在表添加一个字段,用于保存图片路径插入新字段后,对原来表中的数据没有影响:修改,将其长度改成60删除列注意:删除字段一定要小心,删除字段及其对应的列数据都没了修改表名为将列修改为
2025-03-10 13:38:48
404
原创 【Git】分支策略
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,我们可以将其称之为feature分支,在上面开发,完成后,合并,最后,删除该。干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到。假如我们现在正在dev2分支上进行开发,开发到一半,突然发现master分支上面有bug,需要解决。在Git中,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
2025-03-10 12:56:04
769
原创 【Git】合并冲突
模式下,删除分支后,查看分支历史时,会丢掉分支信息,看不出来最新提交到底是从哪个分支过来的。可是,在实际分支合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题。我们发现,切回来之后,文件内容变成了老的版本,这种现象很正常,我们现在也完全能理解。参数就可以保留分支信息,合并后的历史有分支,能看出来曾经做过合并,而。文件有冲突后,可以直接查看文件内容,要说的是 Git 会用。模式了,这样的好处是,从分支历史上就可以看出分支信息。,这样,从分支历史上就可以看出分支信息。
2025-03-09 13:51:40
816
原创 【Git】合并,删除分支
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。代表“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。合并后,master就能看到dev分支提交的内容了。此时的状态如图如下所示。分支完成后,dev分支对于我们来说就没用了,那么dev分支就可以被删除掉,此时的状态如图如下所示。
2025-03-09 13:30:17
236
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人