自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 强化学习PPO算法中的returns(回报)、deltas(TD误差) 和 advantages(优势)

值为0,非终止状态为1。

2024-06-06 21:34:27 648

原创 PyTorch 常用采样方法

伯努利分布是一个离散概率分布,表示一个随机试验只有两种可能的结果(通常称为“成功”和“失败”),并且每种结果发生的概率是固定的。:多项式分布是二项分布的推广,用于描述在n次独立重复的随机试验中成功次数的概率分布,其中每次试验有多种可能的结果。:当数据呈现对称分布且大多数值集中在均值附近时,例如在测量误差、考试成绩或身高分布等场景中。:当所有可能的结果等可能发生时,例如在模拟实验中随机选择一个数或在进行蒙特卡洛模拟时。:用于模拟只有两种可能结果的随机事件,如抛硬币、疾病的存在与否等。

2024-06-06 09:18:05 530

原创 Pytorch分布采样:torch.distributions.Normal(mean, std).sample() 和 torch.multinomial()

如果动作空间是离散的(例如,选择向左、向右、跳跃或蹲下),可以使用。在强化学习中,如果动作空间是连续的(例如,调整机器人的关节角度),可以选择。来根据每个动作的概率采样一个动作。

2024-06-02 09:47:06 911

原创 nn.ModuleDict

nn.ModuleDict 是 PyTorch 中的一个容器,可以将一组模块存储在一个字典结构中,并能够通过字符串键来访问这些模块。nn.ModuleDict能够动态地添加、删除或替换模块,并且这些模块能够像普通 PyTorch 模块一样被优化和训练。

2024-05-31 11:56:36 266

原创 nn.Embedding使用示例

假设有一个文本数据集,词汇表大小为10000个词,我们想要将每个词映射到一个128维的向量空间。的张量,表示一个批次中的句子,其中每个句子由词索引组成。通过将这些索引传递给。层将每个词索引映射到了一个128维的向量。的张量,其中包含了每个词的嵌入向量。,我们得到了一个形状为。

2024-05-30 12:35:20 201

原创 两种位置嵌入方式——nn.Embedding和使用正/余弦函数

的方法可能需要更多的训练数据来学习有效的位置表示,但它允许模型自由地学习最适合任务的位置编码;而正弦和余弦位置嵌入则提供了一种无需额外训练参数的、固定的位置编码方式,它对于长度可变的序列特别有用。如果处理的是长度可变的序列,或者想要减少模型的数量,那么使用正弦和余弦函数生成位置嵌入可能更为合适。:对于较短的序列,使用这种方法可能会引入一些不必要的信息冗余,因为嵌入是基于任意长度的序列设计的。:与通过训练学习的嵌入相比,这种方法提供的位置嵌入是固定的,可能无法根据特定任务进行调整。

2024-05-29 18:07:16 661

原创 Python @staticmethod声明静态方法使用示例

静态方法是属于类的方法,而不是类的实例(对象)的方法。这意味着可以在不创建类的实例的情况下调用静态方法,也就是说,静态方法与类的实例状态无关。当方法的功能与类的状态无关 / 希望在不创建对象的情况下使用类的某些功能 / 用于组织与类相关的辅助函数或工具函数时,可以@staticmethod装饰器声明静态方法。它们更像是在类的命名空间中定义的普通函数,只不过它们可以通过类名来调用。是一个实例方法,它需要一个类的实例作为其第一个参数(通常命名为。),这个方法必须通过类的实例来调用。静态方法与类方法(由。

2024-05-25 13:58:16 250

原创 手动执行多头注意力的关键步骤

首先,输入的嵌入向量会被分割成多个较小的部分,每个部分对应一个注意力“头”。例如,如果输入的嵌入向量维度是512,并且使用8个头,那么每个头将处理64维的向量。总的来说,多头注意力机制通过分割输入嵌入向量、生成QKV向量、并行计算多个头的注意力权重以及合并输出等步骤,有效地捕捉输入数据的复杂特征关系,提高了模型的表达能力和学习效率。其中,(Q_i)、(K_i)和(V_i)分别是第i个头的查询、键和值向量,(d_k)是键向量的维度,用于缩放点积以稳定softmax函数。下面进入正题,来个具体的栗子~

2024-05-25 11:34:30 587

原创 torch.einsum函数的使用

torch.einsum函数可以实现多种张量运算,如矩阵乘法、向量点积、外积、迹、对角化等。

2024-05-21 22:16:26 366

原创 PyTorch的torch.stack 和 torch.cat

在维度0上进行连接,那么输出张量的形状将是。来堆叠它们,那么输出张量的形状将是。

2024-05-13 22:07:37 222

原创 目标检测:HRNet还是Yolo?

如果需要处理需要高分辨率表示的任务,如人体姿态估计或语义分割,那么HRNet可能是一个更好的选择。同时,也需要考虑计算资源的限制和模型训练的复杂性。HRNet主要用于密集预测任务,如人体姿态估计、语义分割等,需要高分辨率表示的任务。然而,HRNet在处理大型图像或需要快速处理的应用中可能会受到计算资源的限制。YOLO的劣势主要在于对于小型物体或相互重叠的物体的检测能力相对较弱。在选择HRNet和YOLO时,需要根据具体的应用场景和需求进行权衡。

2024-05-12 14:30:48 361

原创 cv2.Canny 的 threshold1、threshold2、apertureSize 如何选择

这个参数指定了用于计算图像梯度的Sobel算子的大小。Sobel算子的大小决定了其对边缘检测的敏感程度。通常情况下,算子的大小为3x3,这是因为Sobel算子使用了两个3x3的卷积核进行卷积运算。如果需要更加敏感的边缘检测,可以使用更大的卷积核,如5x5或7x7。但是,使用更大的卷积核会增加计算量和运行时间。之间的像素被认为是弱边缘像素。弱边缘像素只有与强边缘像素相连时才会被认为是边缘的一部分。这两个阈值的选择取决于图像的特性和所需的边缘检测效果。的像素被认为是强边缘像素,梯度值在。

2024-05-12 10:10:59 525 1

原创 设计网络接受批量/单个输入

被传递给网络时,PyTorch 会自动处理这个批次大小为1的输入。全连接层会忽略批次维度(因为它只关心特征维度),并对每个样本(在这个例子中只有一个样本)执行相同的计算。在神经网络的前向传播中,批次大小可以是任意的(包括1),只要特征维度(即第二个维度)与全连接层期望的输入维度匹配。这个维度必须与全连接层期望的输入特征数量相匹配。既是全连接层期望的输入特征数量,也是单个样本的特征数量。类定义了一个简单的神经网络,它有一个共享的全连接层(,而批次大小可以是任意的(包括1)。,以便与批量输入的形状。

2024-04-29 17:30:33 244

原创 Tkinter库中的mainloop()如何理解

事件循环不断地检查是否有用户交互(比如点击按钮、键盘输入等)或者其他事件发生,并根据这些事件来执行相应的回调函数或更新界面。:完成当前事件处理后,事件循环不会结束,而是继续回到第一步,等待下一个事件的到来,如此循环往复,直到程序被显式地关闭或因特定条件退出循环。调用在创建GUI应用程序中是至关重要的,没有它,窗口虽然可以创建但是不会响应任何事件,只是静静地存在,无法与用户进行交互。:一旦有事件发生,事件循环就会查找与该事件关联的回调函数(如按钮的点击事件与按钮点击处理函数绑定)。在Tkinter库中,

2024-04-29 09:03:37 1318

原创 强化学习中的loss函数:【优化Q值】还是【优化策略】?

在强化学习中,Q-learning或基于值函数的强化学习方法对于网络参数的调整是基于"优化Q值",而策略梯度方法或Actor-Critic方法则是基于"优化策略"。

2024-04-29 07:19:03 540

原创 PyTorch 动态计算图构建的理解

在PyTorch中,计算图是在运行时动态构建的,这意味着在每次前向传播时,都会根据当前的操作创建一个新的计算图。总的来说,PyTorch的计算图是动态构建的,它会在你执行操作时自动记录计算历史。这使得PyTorch的代码更加直观和易于调试,因为你不需要事先定义计算图的结构。在这个过程中,PyTorch会自动地为我们构建一个计算图。进行反向传播时,PyTorch会利用这个计算图来计算梯度。在这个例子中,我们首先创建了一个形状为(2, 2)的张量。进行了一系列的操作,最后计算了结果的均值。以便跟踪其计算历史。

2024-04-25 08:14:42 295

原创 python 命名元组

命名元组在需要表示固定结构的数据时非常有用,例如表示一个点的坐标、一个日期(年、月、日)或者一个人的(姓名、年龄、性别)等。它们比普通的元组更加易读,同时又比定义一个完整的类要轻便。命名元组(NamedTuple)允许你创建一个元组,其中的元素可以通过名称(而不仅仅是索引)来访问。这是通过继承自Python标准库中的。使用命名元组,可以给元组中的每个位置赋予一个名字,并通过这个名字来访问或者引用元组中的元素。我们可以像访问对象的属性一样,通过。来访问元组中的元素。

2024-04-22 13:40:59 250

原创 PyTorch中to(self.device)在哪一阶段使用

在模型初始化后立即使用,并且在每次处理数据批次之前也要使用,以移动模型、输入数据和目标标签到想要使用的设备上。这样可以确保所有的计算都在同一设备上进行,避免出现设备不一致导致的错误。在初始化模型之后,应该立即将模型发送到指定的设备。这样可以确保模型的参数和缓存都在正确的设备上。这一步通常在主训练循环开始之前完成。在每次将数据送入模型进行前向传播之前,也需要将数据移动到相同的设备上。这通常发生在训练循环或评估循环内部。

2024-04-21 16:55:05 320

原创 【无聊问题之】transformer模型的encoder是对embedding的特征提取吗

通过这些层的堆叠处理,Transformer的encoder能够逐步提取输入序列的深层次特征,这些特征对于后续的解码过程(在Transformer的decoder中)或者对于其他基于Transformer的模型(如BERT、GPT等)进行各种NLP任务(如文本分类、问答、文本生成等)都是至关重要的。这两个子层之间都使用了残差连接和层归一化。在处理文字序列时,Transformer的encoder可以看作是一种在序列数据上进行的“卷积”,只不过它使用的是自注意力机制而不是卷积核来捕捉特征。

2024-04-21 08:42:14 592

原创 PyTorch nn.Embedding层的理解

的主要作用是将整数索引(通常代表词汇表中的单词或标记)转换为固定大小的向量,这些向量称为嵌入向量(embedding vectors)。在自然语言处理(NLP)任务中,这种嵌入层被广泛用于将文本数据转换为模型可以处理的数值形式。

2024-04-20 21:55:45 683

原创 Byte Pair Encoding (BPE) 算法的核心实现

BPE算法的关键在于它通过迭代地合并最频繁的字符对来构建一个新的、更有效的词汇表。这种方法能够有效地处理不在初始词汇表中的词(OOV词),因为它可以动态地创建新的词汇单元来表示这些未知词。同时,BPE还可以帮助减少词汇表的大小,提高模型的泛化能力,并有助于处理形态丰富的语言。

2024-04-20 20:51:16 1034

原创 GPT-2 BPE分词中的encoder.json和vocab.bpe

通过分词、构建词汇表和编码映射等步骤紧密合作,将原始文本转换成GPT-2模型可以处理的数字形式。这两个文件在GPT-2模型中起着重要作用,它们之间紧密合作以实现文本的有效编码。

2024-04-20 19:15:33 287

原创 【无聊问题之】token和attention score的对应关系

即每个token都会有4个注意力分数,分别对应于其他4个token。这样,每个token都会根据这些注意力分数来加权其他token的值向量(Value),从而得到该token的上下文表示。这些分数用于加权求和所有token的值向量,从而得到当前token的上下文表示。这是Transformer模型中Self-Attention机制的核心部分。如果输入共有5个token,那么对于任意一个token来说,它会有与其他4个token相对应的4个注意力分数。

2024-04-19 08:56:23 724

原创 【无聊问题之】为什么transformer中query和key的相似度用点积来计算

点积作为一种基本的数学运算,可以很容易地扩展到高维空间,并且可以与深度学习模型的其他部分无缝集成。此外,点积还可以与其他操作(如缩放因子、softmax函数等)结合使用,以产生更加复杂和精细的注意力权重。:在注意力机制中,我们通常希望相似度度量是无偏的,即不受向量长度或模长的影响。虽然点积本身对向量的长度敏感,但可以通过缩放因子(如除以维度的平方根)来调整,以减少这种敏感性。:在深度学习框架中,点积操作通常都有高效的实现,并且可以很容易地进行反向传播和优化。:点积能够捕捉向量之间的线性关系。

2024-04-19 07:53:11 175

原创 【无聊问题之】激活函数的“饱和”是什么

对于ELU函数来说,在负输入区域,随着输入值的减小,ELU 的输出将趋近于一个固定的负值(通常是 -α,其中 α 是一个超参数),而不会继续无限下降。这种饱和特性有助于减少神经元在负输入区域的过度激活,并且可以使得网络的输出更加稳定。在 x ≤ 0 的区域,随着 x 的减小,exp(x) 的值会迅速趋向于 0,从而使得 ELU(x) 趋向于 -α。在神经网络中,当一个激活函数在某个输入区域内达到其最大值或最小值,并且对输入的进一步增加或减少不再敏感时,我们就称该函数在这个区域内是"饱和"的。

2024-04-16 09:00:11 313

原创 卷积神经网络(CNN)中的通道和维度是什么关系

在卷积层中,每个卷积核会生成一个新的特征映射,这些特征映射作为输出特征图的通道。:如果每个卷积核的输出特征图的大小仍然是 256x256(这取决于卷积核的步长、填充等参数),那么输出的维度将是 (256, 256, 16)。通过这个例子,我们可以看到通道和维度之间的关系:通道是特征图深度方向的组成部分,表示不同的特征映射;简单来说,通道是特征图深度方向的组成部分,而维度则包括了特征图的高度、宽度和深度(通道)。这里的 256x256 是图像的高度和宽度,而 3 是图像的通道数,也即特征图的深度。

2024-04-15 23:13:53 1586

原创 张量与一个具体数据样本之间的关系

因此,虽然张量本身并不直接规定哪些特征需要表征,但它提供了一种有效的数据结构来组织和表示这些特征,使得模型能够更好地学习和理解数据的内在规律和模式。在选择特征时,需要根据具体问题和数据特性来做出决策,以确保模型能够捕捉到对任务有用的信息。在深度学习和机器学习中,特征选择是一个重要的步骤,它涉及到决定哪些信息对于模型的学习是重要的。这些特征可以是原始的输入数据(如图像的像素值),也可以是经过某种变换或提取得到的高级特征(如边缘检测、纹理特征等)。在实际应用中,选择哪些特征来表征数据取决于具体的问题和任务。

2024-04-15 00:12:09 343

原创 张量的“维“如何理解

张量在机器学习中的应用非常广泛,可以灵活地表示和处理各种类型的多维数据。通过合理地构建张量数据结构,我们可以有效地提取数据的内在特征,并应用于各种实际问题的求解中。张量的“维”可以从两个方面来理解:一是张量的阶数(order),即张量的维度数量;二是每个维度的大小,即每个轴上的元素数量。

2024-04-14 23:49:04 509

原创 对单个数据样本使用 unsqueeze(0)转换为batch的理解

这样做的好处是,你不需要修改模型来适应单个样本的输入。模型可以保持不变,继续以批处理的方式工作,即使这个批只包含一个样本。这在测试和推理阶段特别有用,因为你可能需要对单个样本进行预测,而不是一个完整的批。转换成batch时,我们实际上是在为这个样本增加一个额外的维度,以模拟批处理的形式。现在,这个"伪批"可以直接输入到模型中,因为形状已经匹配了模型的期望输入形状。"batch"指的是一批数据样本,这些样本被同时输入到模型中进行训练或推理。的批数据,那么单个样本将无法直接输入到模型中,因为它的形状不匹配。

2024-04-14 10:52:12 334

原创 卷积神经网络参数:filters 和 kernel_size

filters。

2024-04-13 20:33:56 919

原创 MCTS——管中窥豹之管

通过这种方式,MCTS不仅提升了神经网络的决策能力,还帮助神经网络更好地学习和理解游戏的复杂性和长期策略。在每次自我对弈结束后,神经网络会根据MCTS提供的搜索概率和游戏结果来更新其参数,从而使其在未来的决策中更加准确和高效。这样,MCTS能够为神经网络提供一个更长远、更全面的视角,帮助神经网络看到超出其当前视野的“未来”。通过这个“管子”,神经网络能够“窥视”到未来可能的游戏状态,并根据这些状态来调整其当前的认知和决策。的工具,它让神经网络能够“看到”并理解更多关于游戏状态和未来可能性的信息。

2024-04-13 08:31:36 173

原创 棋盘游戏的卷积神经网络表示:[batch_size, channels, board_height, board_width]

这种数据格式非常适合用卷积神经网络处理,因为CNN能够有效地处理这种具有空间结构的数据,并从中提取有用的特征。在深度学习,特别是在卷积神经网络(CNN)的上下文中,这种张量形状是非常常见的。

2024-04-12 08:13:04 377

原创 Python 函数参数前的**起什么作用(**kwargs)

*kwargs表示可以接受任意数量的关键字参数,并将它们存储在一个字典中。kwargs是一个约定俗成的命名,但也可以使用其他名称,关键是前面的**。

2024-04-11 17:31:50 231

原创 蒙特卡洛树搜索(MCTS)中的扩展(Expansion)和模拟(Simulation)

在蒙特卡洛树搜索(MCTS)中,扩展(Expansion)和模拟(Simulation)都涉及到在搜索树中添加新的节点或状态,但目的和方法有所不同。扩展确定了哪些未来状态值得考虑,而模拟则提供了对这些状态价值的估计。两者共同作用,使得MCTS能够在复杂的搜索空间中找到有希望的行动路径。总结一下,扩展是增加搜索树结构的过程,而模拟是对新增或已有节点进行评估的过程。评估新添加的子节点(或已有但未评估的节点)的潜在价值。扩展仅仅是增加了树的结构,为后续的模拟步骤做准备。

2024-04-10 21:41:12 598

原创 理解强化学习中的 returns (回报)和 rew (奖励)

形状相同的数组,用于存储每个时间步的回报(return)。这里的回报是指从当前时间步开始到序列结束时的所有奖励的总和,但未来的奖励会被打折(discounted)。即从第一个时间步开始,考虑到未来的折扣奖励,总的累积奖励是8.146。在强化学习中,通常我们会经历一系列的状态-动作对,并在每个时间步接收到一个奖励。是一个小于1的数值,通常接近1(例如0.99),它用于减少未来奖励的影响。关心的不仅仅是即时的奖励,而是长期的累积奖励。,因为没有未来的奖励了。和打折后的下一个时间步的。和打折后的下一个时间步的。

2024-04-09 22:56:03 1171

原创 强化学习中rollouts和episodes的区别

Episodes是智能体与环境之间一次完整的交互过程。Rollouts是在训练过程中,智能体根据当前策略进行的一系列模拟交互步骤,用于收集数据和评估策略。一个rollout可以包含一个或多个episodes的数据。

2024-04-09 20:37:04 1130

原创 np.argmax()和np.max()的区别

给出的是最大值在数组中的位置(索引)。给出的是数组中的最大值本身,而。

2024-04-08 23:40:23 307 1

原创 目标网络的评估模式:target_dqn.eval()

如果在进行模型评估或测试时没有将模型设置为评估模式,那么由于Dropout层或BatchNormalization层的行为差异,可能会得到不一致或不可预测的结果。但在评估模式下,Dropout层不会丢弃任何元素,而是会对所有元素进行缩放,以确保输出的总和与训练模式下相同(在统计意义上)。是一个重要的函数调用,它涉及到模型的两种模式:训练模式(train mode)和评估模式(evaluation mode,或者称为推理模式 inference mode)。的作用是将目标DQN网络设置为评估模式。

2024-04-08 23:13:39 236

原创 【无聊问题之】DQN算法为什么要使用两个网络(主网络和目标网络)

在强化学习中,特别是在使用Q-learning或深度Q网络(DQN)算法时,经常会遇到两个网络:一个是主网络(通常称为。总结来说,使用两个网络(主网络和目标网络)是DQN算法中的一个关键技巧,它有助于减少学习过程中的不稳定性。有助于减少目标Q值(即预期的回报)与当前Q值(即实际的回报)之间的相关性,从而减少了学习过程中的波动性。目标网络的权重是定期从主网络复制的,但更新的频率远低于主网络。这两个网络的结构是相同的,但它们的权重是不同步更新的。则用于估计未来状态的Q值,从而指导主网络的更新。

2024-04-08 21:45:45 787

原创 PyTorch autograd库: 基于反向模式的自动微分

需要计算梯度时,autograd库会沿着这个计算图反向传播,从输出开始,逐步计算每个中间变量的梯度,直到达到我们关心的变量(如模型的参数)。这个过程就是反向传播,它会根据计算图反向地计算每个tensor的梯度,并将结果存储在tensor的。时,autograd就会开始追踪该tensor上的所有操作。这意味着,除非明确指定,否则PyTorch不会追踪这个tensor上的操作以用于后续的梯度计算。如果想让PyTorch追踪这个tensor上的操作以计算梯度,需要在创建tensor时将。在PyTorch中,

2024-04-08 21:36:51 355 1

空空如也

空空如也

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

TA关注的人

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