- 博客(378)
- 收藏
- 关注
原创 后端开发 SpringBoot 工程模板
新建一个 exception 包,其下面放的所有跟自定义异常处理相关的类。@GetterPARAMS_ERROR(40000, "请求参数错误"),NOT_LOGIN_ERROR(40100, "未登录"),NO_AUTH_ERROR(40101, "无权限"),NOT_FOUND_ERROR(40400, "请求数据不存在"),FORBIDDEN_ERROR(40300, "禁止访问"),SYSTEM_ERROR(50000, "系统内部异常"),
2025-04-01 19:23:42
830
原创 云服务器宝塔安装静态网页 WordPress、VuePress流程记录
找到你对应系统版本的安装脚本:比如我的是 Ubuntu 版本,那么我就直接复制对应的命令到我的服务器终端中即可,输入命令后直接回车安装,中途出现确认按钮直接输入 yes 即可:出现上图情况就是安装完成了,外网面板地址就是我们访问宝塔面板的地址。然后还需要注意的就是要在云服务器的安全组策略中放行这个提示的 27123 端口(每次安装宝塔面板时都是随机生成的),否则我们将无法访问。
2024-11-21 13:52:24
1575
1
原创 云服务器上数据库远程连接访问问题解决
浅浅总结内容如下:1、检查特定主机的 MySQL 用户权限。2、如有需要,授予权限。3、确保 MySQL 配置允许远程连接。4、验证防火墙/安全组设置。5、再次测试连接。如果还是无法进行远程连接,那么仔细检查上述每一个环节,一般只要上面的问题都注意到了远程访问就不会有问题的,对于我遇到的情况来说是这样的,希望能对看到这篇文章的你有所帮助。
2024-11-08 14:09:04
766
原创 一文彻底弄懂误差反向传播与梯度下降算法
神经网络的训练目标是最小化代价函数E,为了找到使得E取得最小值时的参数值,会使用梯度下降算法,而运行梯度下降算法就需要计算出 E 关于网络中的各个参数 w 和 b 的偏导数。误差反向传播输出层开始,逐层的向前计算 E 关于各层之间参数的偏导数,最后到达输入层,由于这个过程是从后往前的,因此被称为反向传播算法:误差反向传播算法有一个通用的公式,根据这个公式可以计算出 E 关于各层之间参数的偏导数:这是误差反向传播算法的核心公式。
2024-10-26 14:40:30
2044
原创 逻辑回归与神经网络
来看下面这个例子:在平面 x1-0-x2 中,分布着蓝色圆圈表示的正样本,红色叉叉表示的负样本,它们有两个特征 x1 和 x2 .其中正样本的标签是 y = 1,负样本的标签是 y = 0,然后在平面上画出一条直线:x1 + x2 - 3 = 0该直线交 x1 轴于点(3, 0) ,交 x2 轴于点(0, 3):此时可以观察到正负两种样本刚好分布在直线的两侧。
2024-10-26 11:32:04
1403
1
原创 C++实现数据序列化协议:why-serialize
/自定义类A要进行序列化的话需要继承该接口public:A(){}~A(){}//通过这个宏来确定这个类的哪些成员变量是需要进行序列化的private:int m_age;//序列化对象ds << a;return 0;//反序列化对象A a;ds >> a;a.show();return 0;//A类实现同上public:B(){}it!ds << b。
2024-10-24 16:43:07
781
原创 人群计数(Crowd Counting)领域概述
人群计数(Crowd Counting)是计算机视觉和图像处理领域的一个重要研究方向,旨在通过分析图像或视频中的人群密度和人数来估计人群的规模。这一领域的应用范围广泛,包括安全监控、城市规划、交通管理、公共安全、以及事件管理等。看起来有点像目标检测做的事情,比如下面的图像:对于这张图——一张比较稀疏的人群图像貌似使用传统的比如 Yolo 检测算法挨个打检测框一样可以计算出人群数量,那为什么还需要专门的人群计数算法呢?再来看下面的图:可以看到相对于第一张图,这张人群图像的人群密度更大了,在较暗处事实上靠人眼都
2024-10-21 16:24:59
2334
1
原创 动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本
/解决mp3/mp4文件在线播放问题//argv[0]是可执行程序的名字,argv[1]就是传进来的第一个参数//我们让用户传进来两个参数://第一个是port端口,第二个则是服务器访问的静态资源目录的文件路径return -1;//port端口号:字符串转整形//将当前服务器进程切换到用户指定的静态资源目录下面//初始化用于监听的套接字//启动服务器程序return 0;至此,本项目作为一个简易的、基于 epoll+多线程 技术实现的 Web Server 项目就结束了。
2024-08-22 21:52:54
1173
原创 C++ 实战之数据库连接池实现
连接池一般包括了数据库连接所用的 IP 地址、port 端口号、用户名和密码以及其它的性能参数,例如初始连接量,最大连接量,最大空闲时间,连接超时时间等,该项目是基于 C++ 实现的连接池,主要也是实现上面几个连接池都支持的通用基础功能。
2024-08-19 11:53:02
1195
原创 C++ 之网络编程基础复习总结
IP 地址可以在网络环境中唯一标识一台主机。端口号可以在主机中唯一标识一个进程。所以在网络环境中唯一标识一个进程可以使用 IP 地址与端口号 Port。
2024-08-13 21:02:03
1196
原创 C++ 面向对象技术实战:实现基于 POSIX 线程标准封装的线程池
最后的线程池项目目录结构如下:基于面向对象的方式实现的线程池;以上就是本文的全部内容。
2024-08-13 16:37:51
875
原创 C++ 之多态技术最佳实践与常见问题总结
什么是虚函数呢?虚函数就是在基类中被声明为virtual,并在一个或多个派生类中被重新定义的成员函数。// 类内部class 类名virtual 返回类型 函数名(参数表)//...//类之外virtual 返回类型 类名::函数名(参数表)//...如果一个基类的成员函数定义为虚函数,那么它在所有派生类中也保持为虚函数,即使在派生类中省略了virtual关键字,也仍然是虚函数。派生类要对虚函数进行中可根据需重定义,重定义的格式有一定的要求:1、与基类的虚函数有相同的参数个数;
2024-08-12 21:58:21
871
原创 C++ 之继承技术最佳实践与常见问题总结
当一个派生类继承一个基类时,需要在派生类的类派生列表中明确的指出它是从哪个基类继承而来的。class 派生类: public/protected/private 基类吸收基类的成员改造基类的成员添加自己新的成员public:, _z(z)print();
2024-08-12 18:56:07
1101
原创 C++ 软技能向:常用的面向对象设计原则总结
类与类之间的这五种关系,是类和类之间的一种普遍关系。这五种关系,从耦合程度来看的话是:依赖< 关联 < 聚合 < 组合 < 继承;从语义上来看,继承是A is B,关联、聚合、组合是A has B,依赖是A use B的关系;从方向上来看,继承是类与类之间的纵向关系,而其他四种是类与类之间的横向关系。之前我们实现多态使用的是继承与虚函数这种面向对象的方法,现在知道了类与类之间的其他关系后,可以使用组合与依赖这种基于对象的方法实现。
2024-08-11 10:53:46
873
原创 C++之运算符重载系列深入学习:从入门到精通!
对于运算符重载时采用的形式的建议:1、所有的一元运算符,建议以成员函数重载2、运算符 = () [] -> * ,必须以成员函数重载3、运算符 += -= /= *= %= ^= &=!= >>=
2024-08-09 17:38:46
685
原创 C++之移动语义与左值右值深入学习:从入门到精通!
综上所述,我们所谓的移动语义呢其实指的就是类里面所具有的两个函数:一个叫做移动构造函数,一个叫做移动赋值运算符函数。这样当我们传递进来的是右值的时候我们就不必要再去执行深拷贝而只要去执行浅拷贝即可。
2024-08-06 17:56:04
1018
原创 远程连接本地虚拟机失败问题汇总
因为我的 Ubuntu 虚拟机是新装的,并且应该装的是比较纯净的版本(纯净是指很多工具都尚未安装),然后在使用远程连接工具 XShell 连接时出现了很多问题,这些都是我之前没遇到过的(因为之前主要使用云服务器),因此记录一下,这样以后遇到类似的情况会少走很多坑。
2024-08-06 13:00:24
1416
原创 C++并发编程(一):线程基础
本文学习的是 b 站 up 恋恋风辰的并发编程教学视频做的一些笔记补充。理论上直接看 up 提供的笔记文档即可,我这里主要是记录一些我自己觉得可能需要补充的点。
2024-08-05 19:00:45
1207
原创 《21天学通C++》书摘:理解智能指针、IO流、异常处理
简单地说,C++智能指针是包含重载运算符的类,其行为像常规指针,但智能指针能够及时、妥善地销毁动态分配的数据,并实现了明确的对象生命周期,因此更有价值。本章介绍了使用正确的智能指针有助于编写使用指针的代码,并有助于减少与内存分配和对象拥有权相关的问题。本章还介绍了各种智能指针类型,并指出在应用程序中使用智能指针类前务必要了解其行为。现在您知道,不应使用 std::auto_ptr,因为它在复制和赋值时导致源指针无效。您还学习了智能指针类 std::unique_ptr,这是 C++11 新增的。
2024-08-05 11:40:09
814
原创 《21天学通C++》书摘:理解函数对象、Lambda表达式
本章介绍了函数对象(也叫 functor)。在结构或类中实现函数对象时,它将比简单函数有用得多,因为它也可用于存储与状态相关的信息。本章还介绍了谓词,它是一类特殊的函数对象。另外,还通过一些实际示例说明了谓词的用途。lambda 表达式的定义必须以方括号([])打头。这些括号告诉编译器,接下来是一个 lambda 表达式。方括号的后面是一个参数列表,该参数列表与不使用 lambda 表达式时提供给 operator( )的参数列表相同。本章介绍了 C++11 新增的一项非常重要的功能:lambda 表达式。
2024-08-03 20:54:22
843
原创 从零设计一个神经网络:实现手写数字识别
具体来说,我们要设计并训练一个3层的神经网络,这个神经网络会以数字图像作为输入,经过神经网络的计算,就会识别出图像中的数字是几,从而实现数字图像的分类:在这个过程中,主要讲解三个方面:神经网络的设计和实现、训练数据的准备和处理、模型的训练和测试流程。上面都是按照各个功能部分进行讲解和描述的,可能会有点混乱,我们将上面的代码封装如下。
2024-07-11 18:18:15
1811
2
原创 强化学习实战3:Sarsa 与 Q-Learning 算法求解迷宫问题
首先实验环境依然是我们之前说的迷宫环境,然后是一些基本术语,应该都是比较熟悉的:强化学习的算法大概有两类,一类是策略迭代(讲究的是策略 Π ),还有一类是价值迭代,也就是本节要说的内容。在价值迭代算法的类型中有两个非常重要的算法,即 Sarsa 和 Q-learning。本节介绍 Sarsa。Sarsa 名称的由来:取的是一个小 trajectory 的首字母缩写:state action reward state action。
2024-07-11 15:36:44
936
原创 强化学习实战2:动手写迷宫环境
创建一个新的图形对象,并设置其大小为 5x5 英寸# 获取当前图形对象的轴对象# 设置坐标轴的范围# 绘制红色的方格边界,表示迷宫的结构# 在指定位置添加文字标签,表示每个状态(S0-S8)、起点和终点# 设置坐标轴的显示参数,使得坐标轴不显示# 在起点位置绘制一个绿色的圆形表示当前位置# 显示图形# 刻画环境:边界border 和 障碍barrier[np.nan, 1, 1, np.nan], # 表示S0时的策略,即agent不能往上、不能往左走,但可以往右和下走。
2024-07-10 16:35:17
498
原创 强化学习实战1:OpenAI Gym 实验环境介绍
我的 torch 版本是 2.3.0,然后 gym 版本是 0.22.0,python 版本是 3.8 ,pygame 版本是 2.6.0 。首先安装一下 gym:然后安装一下 pygame:都安装好之后,可以写上下面的测试代码看是否能正常弹出一个游戏画面:如果一切顺利,你将看到一个倒立摆小车在屏幕上移动,并随着时间步的推移而逐渐失去平衡。上面的代码是 CartPole 环境的一些介绍和简单使用,而下面的代码则是采用上面介绍的内容让 action 和 environment 交互实战感受一下:运行
2024-07-10 10:46:05
1349
3
原创 强化学习的数学原理:值函数近似
在上次课介绍了 TD Learning,实际上这次课依然是介绍 TD ,但是上次是用的表格形式介绍的,这次课我们将会介绍基于函数的方式。算法其实不太难,难的是思路和想法,另外这一节将引入神经网络。另外最经典的 Deep Q-learning 在这里也会学习到。
2024-07-08 17:37:08
644
原创 强化学习的数学原理:时序差分算法
之前第五次课时学习的 蒙特卡洛 的方法是全课程当中第一次介绍的第一种 model-free 的方法,而本次课的 Temporal-Difference Learning 简称 TD learning (时序差分算法)就是第二种 model-free 的方法。而对于 蒙特卡洛方法其是一种 non-incremental 的方法,而 TD 则是一种 incremental 的方法。
2024-07-07 12:01:10
1315
原创 强化学习后的数学原理:随机近似与梯度下降
这节课的作用:本节课大纲如下:先回顾一下 mean estimation :为什么总数反复提到这个 mean estimation,就是因为 RL 当中有非常多的 expectation,后面就会知道除了 state value 这些定义之外,还有很多类似的我们都得使用数据去进行估计。那么如何计算平均值呢?除了上图中的方法,实际上我们还有另外一种:这第二种方式被称为增量式的或者说是迭代式的方法,基本的思路就是来几个我就先计算几个,这样的效率会更高。如何做?推导过程如下:而推导完的最后的式子就是一个迭代式的
2024-07-05 15:28:56
999
原创 强化学习的数学原理:蒙特卡洛学习
实际上将之前 policy iteration 当中基于模型的部分只要替换掉不需要模型的部分,就得到了本节课的蒙特卡洛的算法;另外在本门课当中将 value iteration 和 policy iteration 统称为 model-based reinforcement learning,更准确的说应该称为动态规划的方法。这种方法研究的是比如用数据估计出来一个模型,然后再基于这个模型来进行强化学习。而这节课讲的将是 model-free 的方法。
2024-07-05 09:21:02
914
原创 强化学习的数学原理:值迭代与策略迭代
本节课大纲如下:这三者联系同样非常紧密,实际上值迭代和策略迭代是 truncated policy iteration 的两种极端情况。
2024-07-03 16:48:02
1071
原创 强化学习的数学原理:最优贝尔曼公式
贝尔曼最优公式是贝尔曼公式的一个特殊情况,但其也非常重要。本节课很重要的两个概念和一个工具:工具不用多说,就是贝尔曼最优公式,概念则是 optimal state value(最优状态价值) 和 optimal policy(最优策略)。本节课课程大纲:之前已经举过的例子:箭头是策略,也就是 Π,对于这个例子要做的事情其实就是求解贝尔曼公式得到 state value,进而得到 action value,而在这个基础之上呢我们会再介绍一个很有意思的现象。上图中已经算出了 state value,那么接下来可
2024-07-02 17:55:53
1288
原创 强化学习的数学原理:贝尔曼公式
在介绍概念之前,需要先引入一些符号:上图是一个简单的单步过程,St 表示当前状态,在当前状态下采取 At 的动作后得到的下一个 reward 就是 R(t+1),然后状态也跳转到了 S(t+1)。值得注意的是,有时候 R(t+1) 也会写成 Rt,从数学上来说没有什么本质区别,只是一个习惯问题,一般都是 R(t+1)。
2024-07-01 17:05:38
1075
原创 强化学习的数学原理:课程梗概与基本概念
从上图可以看见,整个强化学习被分为两个板块:一个是基础的工具,一个是基本的算法和方法。基础工具包括:基本的概念、贝尔曼公式、贝尔曼最优公式。算法和方法包括:值迭代、策略迭代、蒙特卡洛方法、时序差分的方法等等。后面章节都是以前面章节的概念和思路为基础的。强化学习的最终目标就是在求解最优策略。State 其实描述的就是 agent 相对于环境的一个状态。在上图的 grid-world 例子中,每一个二维平面上的位置就是一个状态 Si,但这是一个抽象的表示,这里是化繁为简,如果是更复杂的问题,那么 Si 除了位置
2024-07-01 09:49:40
1049
原创 AI基础:从线性回归到梯度下降
我们直接拿导数的大小作为步子的长短,假如我们还是在 x0 的这个位置,然后求出这一点的导数是等于二的,那么我们直接拿这个二作为步子的长短,x0 呢就应该要往增大的方向加二来到这个位置对应的函数值。假如现在所在的点是 (1,2),然后求出来梯度的向量呢是(2,3),那么我们的下一个落脚点就应该是 1+2 = 3,2+3 = 5,也就是落脚点在点(3,5)的位置。我们的任务就是把所有的这个MSE的值全算出来然后挑出来最小的那一个 Zmin,而最小的那一个它所对应的 k 值和 b 值就是你要找的直线了。
2024-06-28 18:13:58
947
原创 《PyTorch计算机视觉实战》:第三章
在本章中,我们将学习如何使用神经网络进行图像分类。从本质上讲,我们将学习如何实现对图像的表示,以及如何通过对超参数的调整来理解这些超参数对神经网络的影响。为了避免太多的复杂性和混乱,我们在前一章中只讨论了神经网络的一些基本方面。然而,在训练网络时还需要调整更多的输入。通常将这些输入称为超参数。与神经网络中的参数(在训练中习得)相比,这些输入是由构建该网络的人提供的超参数。每个超参数的更改都可能会影响神经网络训练的准确度或速度。此外,诸如缩放、批归一化和正则化等一些额外的技术,也有助于提高神经网络的性能。数字
2024-06-26 10:02:46
764
原创 《PyTorch计算机视觉实战》:一、二章
训练神经网络是一个为神经网络架构构造最优权重的过程,通过重复在给定学习率下的前向传播和反向传播这两个关键步骤来实现。在前向传播中,对输入数据施加一组权重,把它传递给隐藏层,并执行非线性激活函数实现隐藏层的输出,隐藏层到输出层则是使用隐藏层节点的值与另一组权重值相乘来估计输出值,最后计算出给定权重集对应的总体损失。对于第一次前向传播,权重值被随机初始化。在反向传播中,通过在一个方向上调整权重来减小损失值(误差),以减少总体损失。此外,权重更新的大小是梯度乘以学习率。
2024-06-23 13:18:39
1153
原创 BDD100k
多样化、大规模的标注视觉数据集,如Image Net [ 8 ]和COCO [ 19 ],一直是计算机视觉中监督学习任务最新进展的推动力。对于一个任务[ 17、28、16 ],典型的深度学习模型需要数以百万计的训练样本才能达到最先进的性能。然而,对于自动驾驶应用而言,由于缺乏全面的数据集,利用深度学习的力量并不那么简单。现有的自动驾驶[ 15、7、24]数据集在一个或多个显著性方面受到限制,包括场景变化、注释的丰富程度和地理分布。此外,在现有数据集上训练的模型往往会过度拟合特定的领域特征[ 26 ]。
2024-06-11 21:56:33
1179
原创 NLP中的Tokenizer分词器的概念与实现
#开头表示这个词或者字不是一个完整的词或者字,其是一个词根(因为分词器啥语言都能分,这里我们使用的中文,因此其也有一个对应的所谓词根的操作),为了节省内存空间,tokenizer 会把一些常见词拆成更零碎的部分,通过这些更零碎的部分则可以拼接出更多的词来提高切词的成功率。然后就应该进行查表了,应该会存在这么一个类似于字典的东西,该字典包含了很多常见的字或者是词,对于表中不存在的字词会使用一个特殊的标识。然后将其按字切开,得到:“ 站 在 人 生 的 龍 字 路 口 , 不 知 所 措 ”。
2024-06-11 15:39:45
1467
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人