自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(371)
  • 收藏
  • 关注

原创 动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本

/解决mp3/mp4文件在线播放问题//argv[0]是可执行程序的名字,argv[1]就是传进来的第一个参数//我们让用户传进来两个参数://第一个是port端口,第二个则是服务器访问的静态资源目录的文件路径return -1;//port端口号:字符串转整形//将当前服务器进程切换到用户指定的静态资源目录下面//初始化用于监听的套接字//启动服务器程序return 0;至此,本项目作为一个简易的、基于 epoll+多线程 技术实现的 Web Server 项目就结束了。

2024-08-22 21:52:54 971

原创 C++ 实战之数据库连接池实现

连接池一般包括了数据库连接所用的 IP 地址、port 端口号、用户名和密码以及其它的性能参数,例如初始连接量,最大连接量,最大空闲时间,连接超时时间等,该项目是基于 C++ 实现的连接池,主要也是实现上面几个连接池都支持的通用基础功能。

2024-08-19 11:53:02 736

原创 C++ 之网络编程基础复习总结

IP 地址可以在网络环境中唯一标识一台主机。端口号可以在主机中唯一标识一个进程。所以在网络环境中唯一标识一个进程可以使用 IP 地址与端口号 Port。

2024-08-13 21:02:03 1112

原创 C++ 面向对象技术实战:实现基于 POSIX 线程标准封装的线程池

最后的线程池项目目录结构如下:基于面向对象的方式实现的线程池;以上就是本文的全部内容。

2024-08-13 16:37:51 819

原创 C++ 之多态技术最佳实践与常见问题总结

什么是虚函数呢?虚函数就是在基类中被声明为virtual,并在一个或多个派生类中被重新定义的成员函数。// 类内部class 类名virtual 返回类型 函数名(参数表)//...//类之外virtual 返回类型 类名::函数名(参数表)//...如果一个基类的成员函数定义为虚函数,那么它在所有派生类中也保持为虚函数,即使在派生类中省略了virtual关键字,也仍然是虚函数。派生类要对虚函数进行中可根据需重定义,重定义的格式有一定的要求:1、与基类的虚函数有相同的参数个数;

2024-08-12 21:58:21 782

原创 C++ 之继承技术最佳实践与常见问题总结

当一个派生类继承一个基类时,需要在派生类的类派生列表中明确的指出它是从哪个基类继承而来的。class 派生类: public/protected/private 基类吸收基类的成员改造基类的成员添加自己新的成员public:, _z(z)print();

2024-08-12 18:56:07 1013

原创 C++ 软技能向:常用的面向对象设计原则总结

类与类之间的这五种关系,是类和类之间的一种普遍关系。这五种关系,从耦合程度来看的话是:依赖< 关联 < 聚合 < 组合 < 继承;从语义上来看,继承是A is B,关联、聚合、组合是A has B,依赖是A use B的关系;从方向上来看,继承是类与类之间的纵向关系,而其他四种是类与类之间的横向关系。之前我们实现多态使用的是继承与虚函数这种面向对象的方法,现在知道了类与类之间的其他关系后,可以使用组合与依赖这种基于对象的方法实现。

2024-08-11 10:53:46 795

原创 C++之运算符重载系列深入学习:从入门到精通!

对于运算符重载时采用的形式的建议:1、所有的一元运算符,建议以成员函数重载2、运算符 = () [] -> * ,必须以成员函数重载3、运算符 += -= /= *= %= ^= &=!= >>=

2024-08-09 17:38:46 641

原创 C++之 bind 绑定器深入学习:从入门到精通!

本文详细阐述了 C++ 中关于 bind 绑定器技术的基本概念和常用技巧。

2024-08-08 18:18:20 820

原创 C++之智能指针深入学习:从入门到精通!

本文详细介绍了 C++ 中的 RAII 与智能指针等技术的基本概念与常用技巧。

2024-08-07 17:52:53 813

原创 C++之移动语义与左值右值深入学习:从入门到精通!

综上所述,我们所谓的移动语义呢其实指的就是类里面所具有的两个函数:一个叫做移动构造函数,一个叫做移动赋值运算符函数。这样当我们传递进来的是右值的时候我们就不必要再去执行深拷贝而只要去执行浅拷贝即可。

2024-08-06 17:56:04 952

原创 远程连接本地虚拟机失败问题汇总

因为我的 Ubuntu 虚拟机是新装的,并且应该装的是比较纯净的版本(纯净是指很多工具都尚未安装),然后在使用远程连接工具 XShell 连接时出现了很多问题,这些都是我之前没遇到过的(因为之前主要使用云服务器),因此记录一下,这样以后遇到类似的情况会少走很多坑。

2024-08-06 13:00:24 408

原创 C++并发编程(一):线程基础

本文学习的是 b 站 up 恋恋风辰的并发编程教学视频做的一些笔记补充。理论上直接看 up 提供的笔记文档即可,我这里主要是记录一些我自己觉得可能需要补充的点。

2024-08-05 19:00:45 1137

原创 《21天学通C++》书摘:理解智能指针、IO流、异常处理

简单地说,C++智能指针是包含重载运算符的类,其行为像常规指针,但智能指针能够及时、妥善地销毁动态分配的数据,并实现了明确的对象生命周期,因此更有价值。本章介绍了使用正确的智能指针有助于编写使用指针的代码,并有助于减少与内存分配和对象拥有权相关的问题。本章还介绍了各种智能指针类型,并指出在应用程序中使用智能指针类前务必要了解其行为。现在您知道,不应使用 std::auto_ptr,因为它在复制和赋值时导致源指针无效。您还学习了智能指针类 std::unique_ptr,这是 C++11 新增的。

2024-08-05 11:40:09 738

原创 《21天学通C++》书摘:理解函数对象、Lambda表达式

本章介绍了函数对象(也叫 functor)。在结构或类中实现函数对象时,它将比简单函数有用得多,因为它也可用于存储与状态相关的信息。本章还介绍了谓词,它是一类特殊的函数对象。另外,还通过一些实际示例说明了谓词的用途。lambda 表达式的定义必须以方括号([])打头。这些括号告诉编译器,接下来是一个 lambda 表达式。方括号的后面是一个参数列表,该参数列表与不使用 lambda 表达式时提供给 operator( )的参数列表相同。本章介绍了 C++11 新增的一项非常重要的功能:lambda 表达式。

2024-08-03 20:54:22 788

原创 深度学习基础:Numpy 数组包

在使用导入 Numpy 时,通常给其一个别名 “np”,即。

2024-07-14 14:35:35 1016 1

原创 从零设计一个神经网络:实现手写数字识别

具体来说,我们要设计并训练一个3层的神经网络,这个神经网络会以数字图像作为输入,经过神经网络的计算,就会识别出图像中的数字是几,从而实现数字图像的分类:在这个过程中,主要讲解三个方面:神经网络的设计和实现、训练数据的准备和处理、模型的训练和测试流程。上面都是按照各个功能部分进行讲解和描述的,可能会有点混乱,我们将上面的代码封装如下。

2024-07-11 18:18:15 1197 1

原创 强化学习实战3:Sarsa 与 Q-Learning 算法求解迷宫问题

首先实验环境依然是我们之前说的迷宫环境,然后是一些基本术语,应该都是比较熟悉的:强化学习的算法大概有两类,一类是策略迭代(讲究的是策略 Π ),还有一类是价值迭代,也就是本节要说的内容。在价值迭代算法的类型中有两个非常重要的算法,即 Sarsa 和 Q-learning。本节介绍 Sarsa。Sarsa 名称的由来:取的是一个小 trajectory 的首字母缩写:state action reward state action。

2024-07-11 15:36:44 820

原创 强化学习实战2:动手写迷宫环境

创建一个新的图形对象,并设置其大小为 5x5 英寸# 获取当前图形对象的轴对象# 设置坐标轴的范围# 绘制红色的方格边界,表示迷宫的结构# 在指定位置添加文字标签,表示每个状态(S0-S8)、起点和终点# 设置坐标轴的显示参数,使得坐标轴不显示# 在起点位置绘制一个绿色的圆形表示当前位置# 显示图形# 刻画环境:边界border 和 障碍barrier[np.nan, 1, 1, np.nan], # 表示S0时的策略,即agent不能往上、不能往左走,但可以往右和下走。

2024-07-10 16:35:17 372

原创 强化学习实战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 534 2

原创 强化学习的数学原理:值函数近似

在上次课介绍了 TD Learning,实际上这次课依然是介绍 TD ,但是上次是用的表格形式介绍的,这次课我们将会介绍基于函数的方式。算法其实不太难,难的是思路和想法,另外这一节将引入神经网络。另外最经典的 Deep Q-learning 在这里也会学习到。

2024-07-08 17:37:08 539

原创 强化学习的数学原理:时序差分算法

之前第五次课时学习的 蒙特卡洛 的方法是全课程当中第一次介绍的第一种 model-free 的方法,而本次课的 Temporal-Difference Learning 简称 TD learning (时序差分算法)就是第二种 model-free 的方法。而对于 蒙特卡洛方法其是一种 non-incremental 的方法,而 TD 则是一种 incremental 的方法。

2024-07-07 12:01:10 1020

原创 强化学习后的数学原理:随机近似与梯度下降

这节课的作用:本节课大纲如下:先回顾一下 mean estimation :为什么总数反复提到这个 mean estimation,就是因为 RL 当中有非常多的 expectation,后面就会知道除了 state value 这些定义之外,还有很多类似的我们都得使用数据去进行估计。那么如何计算平均值呢?除了上图中的方法,实际上我们还有另外一种:这第二种方式被称为增量式的或者说是迭代式的方法,基本的思路就是来几个我就先计算几个,这样的效率会更高。如何做?推导过程如下:而推导完的最后的式子就是一个迭代式的

2024-07-05 15:28:56 853

原创 强化学习的数学原理:蒙特卡洛学习

实际上将之前 policy iteration 当中基于模型的部分只要替换掉不需要模型的部分,就得到了本节课的蒙特卡洛的算法;另外在本门课当中将 value iteration 和 policy iteration 统称为 model-based reinforcement learning,更准确的说应该称为动态规划的方法。这种方法研究的是比如用数据估计出来一个模型,然后再基于这个模型来进行强化学习。而这节课讲的将是 model-free 的方法。

2024-07-05 09:21:02 714

原创 强化学习的数学原理:值迭代与策略迭代

本节课大纲如下:这三者联系同样非常紧密,实际上值迭代和策略迭代是 truncated policy iteration 的两种极端情况。

2024-07-03 16:48:02 878

原创 强化学习的数学原理:最优贝尔曼公式

贝尔曼最优公式是贝尔曼公式的一个特殊情况,但其也非常重要。本节课很重要的两个概念和一个工具:工具不用多说,就是贝尔曼最优公式,概念则是 optimal state value(最优状态价值) 和 optimal policy(最优策略)。本节课课程大纲:之前已经举过的例子:箭头是策略,也就是 Π,对于这个例子要做的事情其实就是求解贝尔曼公式得到 state value,进而得到 action value,而在这个基础之上呢我们会再介绍一个很有意思的现象。上图中已经算出了 state value,那么接下来可

2024-07-02 17:55:53 929

原创 强化学习的数学原理:贝尔曼公式

在介绍概念之前,需要先引入一些符号:上图是一个简单的单步过程,St 表示当前状态,在当前状态下采取 At 的动作后得到的下一个 reward 就是 R(t+1),然后状态也跳转到了 S(t+1)。值得注意的是,有时候 R(t+1) 也会写成 Rt,从数学上来说没有什么本质区别,只是一个习惯问题,一般都是 R(t+1)。

2024-07-01 17:05:38 888

原创 强化学习的数学原理:课程梗概与基本概念

从上图可以看见,整个强化学习被分为两个板块:一个是基础的工具,一个是基本的算法和方法。基础工具包括:基本的概念、贝尔曼公式、贝尔曼最优公式。算法和方法包括:值迭代、策略迭代、蒙特卡洛方法、时序差分的方法等等。后面章节都是以前面章节的概念和思路为基础的。强化学习的最终目标就是在求解最优策略。State 其实描述的就是 agent 相对于环境的一个状态。在上图的 grid-world 例子中,每一个二维平面上的位置就是一个状态 Si,但这是一个抽象的表示,这里是化繁为简,如果是更复杂的问题,那么 Si 除了位置

2024-07-01 09:49:40 679

原创 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 895

原创 《PyTorch计算机视觉实战》:第三章

在本章中,我们将学习如何使用神经网络进行图像分类。从本质上讲,我们将学习如何实现对图像的表示,以及如何通过对超参数的调整来理解这些超参数对神经网络的影响。为了避免太多的复杂性和混乱,我们在前一章中只讨论了神经网络的一些基本方面。然而,在训练网络时还需要调整更多的输入。通常将这些输入称为超参数。与神经网络中的参数(在训练中习得)相比,这些输入是由构建该网络的人提供的超参数。每个超参数的更改都可能会影响神经网络训练的准确度或速度。此外,诸如缩放、批归一化和正则化等一些额外的技术,也有助于提高神经网络的性能。数字

2024-06-26 10:02:46 662

原创 《PyTorch计算机视觉实战》:一、二章

训练神经网络是一个为神经网络架构构造最优权重的过程,通过重复在给定学习率下的前向传播和反向传播这两个关键步骤来实现。在前向传播中,对输入数据施加一组权重,把它传递给隐藏层,并执行非线性激活函数实现隐藏层的输出,隐藏层到输出层则是使用隐藏层节点的值与另一组权重值相乘来估计输出值,最后计算出给定权重集对应的总体损失。对于第一次前向传播,权重值被随机初始化。在反向传播中,通过在一个方向上调整权重来减小损失值(误差),以减少总体损失。此外,权重更新的大小是梯度乘以学习率。

2024-06-23 13:18:39 999

原创 BDD100k

多样化、大规模的标注视觉数据集,如Image Net [ 8 ]和COCO [ 19 ],一直是计算机视觉中监督学习任务最新进展的推动力。对于一个任务[ 17、28、16 ],典型的深度学习模型需要数以百万计的训练样本才能达到最先进的性能。然而,对于自动驾驶应用而言,由于缺乏全面的数据集,利用深度学习的力量并不那么简单。现有的自动驾驶[ 15、7、24]数据集在一个或多个显著性方面受到限制,包括场景变化、注释的丰富程度和地理分布。此外,在现有数据集上训练的模型往往会过度拟合特定的领域特征[ 26 ]。

2024-06-11 21:56:33 896

原创 NLP中的Tokenizer分词器的概念与实现

#开头表示这个词或者字不是一个完整的词或者字,其是一个词根(因为分词器啥语言都能分,这里我们使用的中文,因此其也有一个对应的所谓词根的操作),为了节省内存空间,tokenizer 会把一些常见词拆成更零碎的部分,通过这些更零碎的部分则可以拼接出更多的词来提高切词的成功率。然后就应该进行查表了,应该会存在这么一个类似于字典的东西,该字典包含了很多常见的字或者是词,对于表中不存在的字词会使用一个特殊的标识。然后将其按字切开,得到:“ 站 在 人 生 的 龍 字 路 口 , 不 知 所 措 ”。

2024-06-11 15:39:45 1111

原创 Transformer 论文重点

循环神经网络,特别是长短时记忆[ 13 ]和门控循环[ 7 ]神经网络,已经成为诸如语言建模和机器翻译[ 35、2、5]等序列建模和转录问题中最先进的方法。当时是 2017 年,因此 RNN 循环神经网络占据主流。自那时以来,大量的努力一直在推动循环语言模型和编码器-解码器架构[ 38、24、15]的界限。递归模型通常沿着输入和输出序列的符号位置进行因子计算。将位置与计算时间中的步骤对齐,它们生成一个隐藏状态序列ht,作为前一个隐藏状态ht - 1和位置t的输入的函数。

2024-06-05 16:35:35 854

原创 DETR论文重点

注意:斜体的文字为论文原文,其他部分内容则是为增进理解而做的解释。我们提出了一种将目标检测视为直接集合预测问题的新方法。如何理解集合预测?假设一张图像中有 N 个目标,那这 N 个 目标就是一个集合,DETR这个算法就是可以一次性从图像中预测出这个包含 N 个 目标的集合。我们的方法简化了检测流程,有效地消除了许多手工设计的组件,如非极大值抑制过程或锚生成,这些组件明确地编码了我们关于任务的先验知识。

2024-06-04 15:19:31 580

原创 本地 Java API 访问云上 HDFS 集群的问题与解决

这篇文章默认是已经在云上配置好了 Haoop 集群,因此本文主要是记录一些可能会出现错误的地方。另外在进行本文的学习之前也建议先看看该文章,因为一些基本概念这里不会再进行解释了嗷。

2024-06-03 13:11:19 1008 1

原创 ResNet 原理剖析以及代码复现

一言以蔽之:解决了深度的神经网络难以训练的问题。具体的说,理论上神经网络的深度越深,其训练效果应该越好,但实际上并非如此,层数越深会导致越差的结果并且容易产生梯度爆炸或梯度消失等问题。

2024-05-29 19:33:26 844

原创 CLIP 源码分析:model.py 文件

残差网络 ResNet 等我再去补一补相关知识。

2024-05-28 15:36:02 286

原创 CLIP 源码分析:simple_tokenizer.py

不难发现,simple_tokenizer.py 这个文件模块就是用来处理我们输入的文本数据的,主要是一些编码上的处理、文本数据的清洗以及文本格式的转换。在最后我们会手动 debug 走一遍流程,看看该项目的各个部分到底是怎么做的都负责了什么。

2024-05-28 10:56:28 697

原创 CLIP源码详解:clip.py 文件

这段代码定义了一个名为 tokenize 的函数,用于将输入文本字符串或文本字符串列表进行标记化处理,生成对应的标记化表示# 输入的文本字符串或文本字符串列表# 上下文长度,即生成的标记化表示的长度。CLIP 模型通常使用 77 作为上下文长度# 是否截断文本,如果文本的编码长度超过上下文长度,则截断文本。# 如果为 True,则截断文本;如果为 False,则在文本编码长度超过上下文长度时引发错误"""Parameters----------Returns-------"""

2024-05-27 22:35:19 833

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除