AlexNet论文翻译与精读

1:该论文解决了什么问题?

图像分类问题

2:该论文的创新点?

1:使用了大的深的卷积神经网络进行图像分类;

2:采用了两块GPU进行分布式训练;

3:采用了Relu进行训练加速;

4:采用局部归一化提高模型泛化能力;

5:重叠池化,充分利用信息,提高精度;

6:dropout减少神经元之间的依赖性,提高模型泛化能力;

3:训练策略?

1:使用SGD(随机梯度下降)来训练,每个batch128,动量为0.9,权重衰减为0.0005(防止过拟合,在损失函数中添加一个惩罚项,对网络的权重进行约束,使其趋向于较小的值);

2:使用方差为0.1 均值为0的分布来初始化权重,用常数1来初始化第二、四、五层卷积和全连接隐藏层的偏置;

3:学习率初始化为0.1,当验证集的精度不再提高时,将学习率除以10;

4:代码地址?

5:论文还有什么改进之处?

1:对视频流进行处理,利用时间特征

摘要

我们训练了一个庞大而深层的卷积神经网络,用于将ImageNet LSVRC-2010比赛中的120万高分辨率图像分为1000个不同的类别。在测试数据上,我们取得了37.5%的top-1错误率和17.0%的top-5错误率,这明显优于先前的最先进水平。这个神经网络具有6000万参数和65万个神经元,包括五个卷积层,其中一些后面跟随着最大池化层,以及三个全连接层,最终通过一个包含1000个类别的softmax层。为了加快训练速度,我们使用了非饱和神经元以及卷积操作的高效GPU实现。为了减少全连接层的过拟合,我们采用了一种最近开发的正则化方法,称为“dropout”,证明非常有效。我们还参加了该模型的一种变体在ILSVRC-2012比赛中,并取得了15.3%的top-5测试错误率的胜利,而第二名的成绩为26.2%。

1:训练了一个很大很深的卷积神经网络在ImageNet上进行1000个种类的分类任务;

2:top1的精度达到了62.5%;

3:该网络包含了五个卷积层以及全连接层;

4:采用了两块gpu进行分布式训练;

5:对于overfitting问题采用了dropout。

介绍

目前,目标识别的方法主要依赖于机器学习技术。为了提高它们的性能,我们可以收集更大的数据集,学习更强大的模型,并使用更好的防止过拟合的技术。直到最近,带标签的图像数据集相对较小,大约只有数万张图像(例如,NORB [16],Caltech-101/256 [8, 9],和CIFAR-10/100 [12])。对于这个大小的数据集,简单的识别任务可以得到很好的解决,特别是如果它们通过保持标签的转换进行增强。例如,目前在MNIST数字识别任务上的最佳错误率(<0.3%)接近人类表现 [4]。但是,在现实环境中的对象表现出相当大的变化,因此为了学会识别它们,需要使用更大的训练集。实际上,小图像数据集的缺点已经被广泛认识到(例如,Pinto等人 [21]),但直到最近才有可能收集包含数百万张图像的带标签数据集。新的大型数据集包括LabelMe [23],其中包含数十万张完全分割的图像,以及ImageNet [6],其中包含超过1500万张在超过22,000个类别中标记的高分辨率图像。

为了从数百万张图像中学习数千个对象,我们需要一个具有很大学习能力的模型。然而,对象识别任务的巨大复杂性意味着即使是像ImageNet这样的数据集也无法明确定义这个问题,因此我们的模型还应该具有大量的先验知识来弥补我们没有的所有数据。卷积神经网络(CNNs)构成了这类模型的一种 [16, 11, 13, 18, 15, 22, 26]。它们的容量可以通过改变它们的深度和广度来控制,而且它们还对图像的性质(即,统计的静止性和像素依赖性的局部性)提出了强有力且大多数正确的假设。因此,与具有类似大小层的标准前馈神经网络相比,CNN具有更少的连接和参数,因此更容易训练,而它们在理论上的最佳性能可能只稍微差一些。尽管CNN具有吸引人的特性,并且尽管它们的本地架构相对高效,但将其大规模应用于高分辨率图像仍然是 prohibitively expensive。幸运的是,与高度优化的2D卷积实现相结合的当前GPU足够强大,可以促使大规模CNN的训练,而像ImageNet这样的最新数据集包含足够的标记示例,可以在没有严重过拟合的情况下训练这些模型。

这篇论文的具体贡献如下:我们在ILSVRC-2010和ILSVRC-2012比赛 [2] 中使用ImageNet子集上训练了迄今为止最大的卷积神经网络,并在这些数据集上取得了迄今为止报告的最佳结果。我们编写了高度优化的2D卷积的GPU实现和所有卷积神经网络训练中固有的其他操作,并将其公开1。我们的网络包含一些新颖且不寻常的特性,可以提高其性能并减少其训练时间,详细介绍在第3节。我们网络的规模使得过拟合成为一个重要的问题,即使有120万张带标签的训练样本,因此我们采用了一些有效的防止过拟合的技术,详见第4节。我们最终的网络包含五个卷积层和三个全连接层,这个深度似乎很重要:我们发现去除任何一个卷积层(每个卷积层不超过模型参数的1%)都会导致性能下降。最终,网络的规模主要受限于当前GPU上可用的内存量和我们愿意容忍的训练时间。我们的网络在两个GTX 580 3GB GPU上训练需要五到六天。我们所有的实验证明,我们的结果只需等待更快的GPU和更大的数据集即可改进。

1:现实物体的识别需要较大的数据集,例如LabelMe 和ImagNet;

2:卷积网络可以通过深度和宽度来控制其识别能力;

3:编写了一个高性能程序让gpu可以很好的训练2D卷积;

4:经过实验,发现卷积网路的深度很重要;

数据集

ImageNet是一个包含超过1500万张带标签的高分辨率图像,属于大约22,000个类别。这些图像是从网络上收集的,并由人类标签员使用亚马逊的Mechanical Turk众包工具进行标注。自2010年起,作为Pascal视觉对象挑战的一部分,每年都会举行一场名为ImageNet大规模视觉识别挑战(ILSVRC)的比赛。ILSVRC使用ImageNet的一个子集,每个子集中有大约1000个类别的大约1000张图像。总共有大约120万张训练图像,5万张验证图像和15万张测试图像。

ILSVRC-2010是ILSVRC唯一版本,测试集标签可用,因此这是我们进行大部分实验的版本。由于我们还参加了ILSVRC-2012比赛,因此在第6节中,我们还报告了我们在该数据集版本上的结果,该版本的测试集标签不可用。在ImageNet上,通常会报告两种错误率:top-1和top-5,其中top-5错误率是模型认为最有可能的五个标签中正确标签的图像所占的比例。

ImageNet包含可变分辨率的图像,而我们的系统需要一个常数输入的维度。因此,我们将图像下采样到固定分辨率256×256。对于给定的矩形图像,我们首先将图像重新缩放,使较短的一侧长度为256,然后从结果图像中裁剪出中央的256×256补丁。我们没有以任何其他方式预处理图像,除了从每个像素中减去训练集上的均值活动。因此,我们在(居中的)原始RGB值的像素上训练我们的网络。

1:ImageNet有1.5亿张高达22000个种类并且由人工进行标注的图片;

2:并没有对图像进行预处理,在原始的RGB上进行网络的训练。

结构

我们网络的架构总结如图2所示。它包含八个学习层,其中包括五个卷积层和三个全连接层。以下是我们网络架构中一些新颖或不同寻常的特性。根据我们对它们重要性的估计,Sections 3.1-3.4 按重要性排序,首先是最重要的。

relu非线性

对于建模神经元输出 f 作为输入 x 的标准方法是使用 f(x) = tanh(x) 或 f(x) = (1 + e^(-x))^(-1)。在使用梯度下降进行训练时,这些饱和非线性相比于不饱和非线性 f(x) = max(0, x) 要慢得多。根据 Nair 和 Hinton [20] 的方法,我们将使用这种非线性的神经元称为修正线性单元(Rectified Linear Units,ReLUs)。使用 ReLUs 的深度卷积神经网络训练速度比使用 tanh 单元的相应网络要快几倍。这在图1中得到了证明,图中显示了在 CIFAR-10 数据集上达到25%训练误差所需的迭代次数,对比了一个特定的四层卷积网络。这个图表显示,如果使用传统的饱和神经元模型,我们将无法在这项工作中尝试如此大型的神经网络。

我们并不是第一个考虑在CNNs中使用传统神经元模型的替代方法的研究者。例如,Jarrett 等人 [11] 声称非线性 f(x) = |tanh(x)| 与他们在 Caltech-101 数据集上进行的对比度归一化后的局部平均池化特别配合。然而,在这个数据集上,主要关注的是防止过拟合,因此他们观察到的效果与我们使用 ReLUs 时报告的更快适应训练集的能力是不同的。更快的学习对于在大型数据集上训练的大型模型的性能有很大的影响。

1:relu可以大大减少神经网络的训练时间;

2:如图所示训练时间对比,实线为relu,虚线为tanh;

3:

4:relu(x)=Max(0,x)

5:

多块GPU上训练

一块单独的GTX 580 GPU只有3GB的内存,这限制了可以在其上训练的网络的最大大小。事实证明,120万个训练样本足以训练网络,使其过大而无法适应一块GPU。因此,我们将网络分布在两个GPU上。当前的GPU特别适合跨GPU并行化,因为它们能够直接读取和写入彼此的内存,而无需通过主机机器内存。我们采用的并行化方案基本上将一半的卷积核(或神经元)放在每个GPU上,还有一个额外的技巧:GPU仅在某些层之间进行通信。这意味着,例如,第3层的卷积核从第2层的所有卷积核图中接收输入。然而,第4层的卷积核仅从同一GPU上驻留的第3层的卷积核图中接收输入。选择连接模式是交叉验证的一个问题,但这使我们能够精确调整通信量,直到它成为计算量的可接受的一部分。

由此产生的架构与Cireşan等人[5]采用的“columnar” CNN的架构有些相似,只是我们的列不是独立的(参见图2)。与在一块GPU上训练的每个卷积层中具有一半卷积核的网络相比,这种方案将我们的top-1和top-5错误率分别降低了1.7%和1.2%。两个GPU的网络训练时间略短于一个GPU的网络。

1:在当时,单块gpu的显存仅3GB,这无法训练一个大型的神经网络,因此采用了两块GPU进行分布式训练;

2:并行化方案采用的是讲一半的卷积核各放到一块gpu上,gpu仅在某些层进行交流,并且gpu之间可以先相互读取内存而不经过主机;

3:带来的结果就是降低了top1和top5的错误率,加快了训练。

局部归一化

ReLUs具有一个良好的特性,即它们不需要输入规范化来防止它们饱和。如果至少有一些训练样本对ReLU产生正输入,那么该神经元将发生学习。然而,我们仍然发现以下的局部归一化方案有助于泛化。用ai

x,y表示通过在位置(x,y)应用内核i然后应用ReLU非线性计算的神经元的活动,响应归一化活动bi

x,y由以下表达式给出,

其中总和是在相同的空间位置上运行的n个“相邻”内核图中进行的,N是该层中的内核总数。内核图的排序在训练开始之前当然是任意的并且是确定的。这种类型的响应归一化实现了一种受到真实神经元中发现的侧抑制启发的形式,即在使用不同内核计算的神经元输出之间创建大活动的竞争。常数k、n、α和β是通过验证集确定的超参数;我们使用了k = 2,n = 5,α = 10^(-4)和β = 0.75。我们在应用ReLU非线性之后的某些层次上应用了这种归一化(参见第3.5节)。这个方案与Jarrett等人的局部对比度归一化方案[11]有些相似,但我们更正确地称之为“亮度归一化”,因为我们不减去平均活动。响应归一化将我们的top-1和top-5错误率分别降低了1.4%和1.2%。我们还在CIFAR-10数据集上验证了这种方案的有效性:一个四层CNN在没有归一化的情况下达到了13%的测试错误率,而在使用归一化的情况下为11%。

1:虽然Relu不需要归一化来防止饱和,但依然发现了一种归一化方法来提高模型的泛华能力;(泛华:模型在未见过的数据集的能力)

2:仅在某些层使用Relu后使用该归一化,因此称为局部响应归一化,这一操作同样降低了top1和5的错误率;

重叠池化

在CNNs中,池化层总结了同一内核图中相邻的神经元组的输出。传统上,相邻的池化单元总结的邻域不重叠(例如,[17, 11, 4])。更准确地说,可以将池化层看作由相距s个像素的池化单元组成的网格,每个单元总结以池化单元为中心的大小为z×z的邻域。如果设置s = z,则得到在CNNs中常用的传统局部池化。如果设置s < z,则得到重叠池化。这是我们在整个网络中使用的方案,其中s = 2,z = 3。与非重叠方案s = 2,z = 2相比,该方案分别将top-1和top-5错误率降低了0.4%和0.3%,而产生的输出具有相等的维度。在训练过程中,我们通常观察到具有重叠池化的模型稍微更难过拟合。

1:池化通常用来降低卷积层之后结果的维度;

2:不仅可以提升精度,还可以防止过拟合;

3:池化步长小于池化窗口,再池化的过程中添加相邻像素的信息以重新或得非重叠部分失去的特征;

整体架构

现在我们准备描述我们CNN的总体架构。如图2所示,该网络包含八个具有权重的层;前五个是卷积层,其余三个是全连接层。最后一个全连接层的输出被馈送到一个有1000个节点的softmax层,该层产生了对1000个类标签的分布。我们的网络最大化多项式逻辑回归目标,这等效于最大化在预测分布下正确标签的对数概率的训练案例的平均值。

第二、第四和第五个卷积层的卷积核仅与前一层中驻留在相同GPU上的卷积核图相连接(见图2)。第三个卷积层的卷积核与第二层中的所有卷积核图相连接。全连接层中的神经元与前一层中的所有神经元相连接。响应归一化层跟随第一和第二个卷积层。在第五个卷积层后,还有一个在第3.4节中描述的max-pooling层,以及类似的响应归一化层。ReLU非线性应用于每个卷积和全连接层的输出。

第一个卷积层使用大小为11×11×3的96个卷积核,步幅为4个像素(这是相邻内核图中相邻神经元的感受野中心之间的距离)对224×224×3的输入图像进行滤波。第二个卷积层以第一个卷积层的(响应归一化和池化后的)输出作为输入,并使用大小为5×5×48的256个卷积核进行滤波。第三、第四和第五个卷积层相互连接,没有任何中间的池化或归一化层。第三个卷积层有384个大小为3×3×256的卷积核,连接到第二个卷积层的(归一化、池化后的)输出。第四个卷积层有384个大小为3×3×192的卷积核,而第五个卷积层有256个大小为3×3×192的卷积核。全连接层每个有4096个神经元。

1:结构如图所示,包含了五个卷积和三个全连接;

2:网络被分为两个部分,各自训练各自的;

3:第二个卷积层的输出进行了一个交叉,也就是第三个卷积层的输入,此时两个GPU互相交换参数;

4:第一个、第二个卷积层使用了LRN(局部归一化);

5:第一个、第二个、第五个卷积层使用了最大池化。

减少过拟合

我们的神经网络架构有6000万个参数。尽管ILSVRC的1000个类别使得每个训练样本对从图像到标签的映射施加10位约束,但这事实证明对于学习如此多的参数而言,这是不足的,会导致相当严重的过拟合。在下面,我们描述了我们对抗过拟合的两种主要方法。

数据增强

减轻图像数据过拟合的最简单和最常见方法是使用保持标签的转换人为地扩大数据集(例如,[25, 4, 5])。我们使用两种不同形式的数据增强,两者都允许通过对原始图像进行非常少的计算生成转换后的图像,因此不需要将转换后的图像存储在磁盘上。在我们的实现中,转换后的图像是在GPU在上一批图像上进行训练时在CPU上的Python代码中生成的。因此,这些数据增强方案在实际上是计算免费的。

第一种数据增强形式包括生成图像的平移和水平翻转。我们通过从256×256图像中提取随机的224×224裁剪(及其水平翻转)来实现这一点,并在这些提取的裁剪上训练我们的网络。这将我们的训练集的大小增加了2048倍,尽管得到的训练样本当然高度相关。如果没有这个方案,我们的网络将遭受严重的过拟合,这将迫使我们使用规模小得多的网络。在测试时,网络通过提取五个224×224裁剪(四个角裁剪和中心裁剪)以及它们的水平翻转(因此总共有十个裁剪),并对网络的softmax层在这十个裁剪上的预测进行平均,从而进行预测。

第二种数据增强形式包括改变训练图像中RGB通道的强度。具体来说,我们对整个ImageNet训练集中的RGB像素值执行PCA。对于每个训练图像,我们添加发现的主成分的倍数,其大小与相应的特征值成比例,乘以从均值为零、标准差为0.1的高斯分布中抽取的随机变量。因此,对于每个RGB图像像素Ixy = [IR xy, IG xy, IB xy]T,我们添加以下数量:

[p1,p2,p3][α1λ1,α2λ2,α3λ3]⊺[p1,p2,p3][α1​λ1​,α2​λ2​,α3​λ3​]⊺

其中pi和λi分别是RGB像素值的3×3协方差矩阵的第i个特征向量和特征值,αi是前述随机变量。每个αi仅对特定训练图像的所有像素绘制一次,直到再次用于训练该图像时,此时它将被重新绘制。这个方案大约捕捉了自然图像的一个重要特性,即物体的身份对照明的强度和颜色的变化是不变的。这个方案将top-1错误率降低了超过1%。

1:降低过拟合的方法之一就是人为的进行数据集扩充;

2:从256*256的图里随机提取224*224的块,这也是为什么结构里的输入为224*224;

3:对图片进行PCA(高维数据转换为低维数据,保留数据中的主要变化方向。在这里,PCA应用于RGB像素值,以找到它们之间的主要方向。)

Dropout

将许多不同模型的预测组合起来是降低测试误差的一种非常成功的方法[1, 3],但对于已经需要数天训练的大型神经网络来说,这似乎太昂贵了。然而,有一种在训练期间仅增加大约两倍成本的非常有效的模型组合版本。最近引入的技术称为“dropout” [10],它包括以0.5的概率将每个隐藏神经元的输出设置为零。以这种方式“丢弃”的神经元不会贡献于前向传播,并且不参与反向传播。因此,每次呈现输入时,神经网络会对不同的架构进行采样,但所有这些架构共享权重。这种技术减少了神经元的复杂相互适应,因为一个神经元不能依赖于特定其他神经元的存在。因此,它被迫学习更加健壮的特征,这些特征与其他神经元的许多不同的随机子集一起使用时是有用的。在测试时,我们使用所有神经元,但将它们的输出乘以0.5,这是对由指数多的dropout网络产生的预测分布取几何平均的合理近似。

我们在图2的前两个全连接层中使用了dropout。没有dropout,我们的网络表现出明显的过拟合。dropout大致使收敛所需的迭代次数加倍。

1:为了减少误差,降低训练成本,采用了dropout(随机失活法);

2:在学习的过程中进行神经元的随机失活,以降低各个模块的依赖性,提高鲁棒性。

训练细节

我们使用批量大小为128的随机梯度下降进行模型训练,动量为0.9,权重衰减为0.0005。我们发现这个小量的权重衰减对模型的学习很重要。换句话说,在这里,权重衰减不仅仅是一种正则化方法:它减小了模型的训练误差。权重w的更新规则如下:

其中i是迭代索引,v是动量变量,ηη是学习率,∂L∂wi∂wi​∂L​是在wi处评估的目标对w的导数的第i个批次Di的平均值。

我们从均值为零的高斯分布中初始化了每层的权重,标准差为0.01。在第二、第四和第五个卷积层以及全连接隐藏层中,我们将神经元的偏置初始化为常数1。此初始化通过为ReLUs提供正输入来加速学习的早期阶段。我们将其余层中的神经元偏置初始化为常数0。

我们使用相同的学习率对所有层进行训练,并在整个训练过程中手动进行调整。我们遵循的启发式方法是,当验证错误率在当前学习率下不再改善时,将学习率除以10。学习率初始化为0.01,在终止之前降低了三次。我们通过包含120万张图像的训练集大约进行了90个周期的网络训练,这在两个NVIDIA GTX 580 3GB GPU上花费了五到六天的时间。

1:使用SGD(随机梯度下降)来训练,每个batch128,动量为0.9,权重衰减为0.0005(防止过拟合,在损失函数中添加一个惩罚项,对网络的权重进行约束,使其趋向于较小的值);

2:使用方差为0.1 均值为0的分布来初始化权重,用常数1来初始化第二、四、五层卷积和全连接隐藏层的偏置;

3:学习率初始化为0.1,当验证集的精度不再提高时,将学习率除以10;

讨论

我们的结果表明,一个庞大而深层的卷积神经网络能够在一个极具挑战性的数据集上,仅通过监督学习就取得创纪录的成绩。值得注意的是,如果移除一个卷积层,我们网络的性能会下降。例如,移除任何一个中间层都会导致网络的top-1性能损失约2%。因此,深度对于取得我们的结果确实很重要。

为了简化我们的实验,我们没有使用任何无监督预训练,尽管我们预计这将是有帮助的,特别是如果我们获得足够的计算能力,可以显著增加网络的规模,而不需要相应地增加标记数据的数量。到目前为止,随着我们使网络更大并进行更长时间的训练,我们的结果已经有所改善,但为了匹配人类视觉系统的推理-颞路径,我们仍然需要进行多个数量级的进一步改进。最终,我们希望在视频序列上使用非常大而深的卷积网络,其中时间结构提供非常有用的信息,在静态图像中缺失或远不明显。

1:卷积神经网络的精度和深度有关;

2:对于视频,希望用大的深度神经网络去预测并利用好时间结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 窗口阴影边框

环境&#xff1a;Qt 5.15 VS2019 方法一&#xff1a;QGraphicsDropShadowEffect 实现方法参考链接&#xff1a;https://blog.csdn.net/goforwardtostep/article/details/99549750 使用此方法添加窗口阴影&#xff0c;会出现警告信息&#xff1a; 且窗口最大化与还原切换时会…

多态、抽象类和接口(深拷贝和浅拷贝)

目录​​​​​​​ 前言&#xff1a; 多态&#xff1a; 多态的定义&#xff1a; 向上转型&#xff1a; 方法重写&#xff1a; 再看toString方法&#xff1a; 动态绑定&#xff1a; 向下转型&#xff1a; 小练习&#xff1a; 抽象类&#xff1a; 什么是抽象类&am…

Logstash应用-同步ES(elasticsearch)到HDFS

1.场景分析 现有需求需要将elasticsearch的备份至hdfs存储&#xff0c;根据以上需求&#xff0c;使用logstash按照天级别进行数据的同步 2.重难点 数据采集存在时间漂移问题&#xff0c;数据保存时使用的是采集时间而不是数据生成时间采用webhdfs无法对文件大小进行设置解决…

水产冷链物流行业零下25℃库架一体 海格里斯HEGERLS四向穿梭式冷藏冷库智能密集仓

随着国内外仓储物流整体规模和低温产品消费需求的稳步增长&#xff0c;冷链市场应用潜力不断释放。在传统“货架叉车”的方式下&#xff0c;货物、人员及机械设备不断进出&#xff0c;容易造成温度波动&#xff0c;导致冷量流失。立体冷库则以更高密度、更具成本效益的方式&…

性能测试中TPS上不去的几种原因浅析

昨晚在某个测试群看到有人问了一个问题&#xff1a;压力测试中TPS一直上不去&#xff0c;是什么原因&#xff1f;稍微整理了下思路&#xff0c;列举性的简略回答了他的问题。 这篇博客&#xff0c;就具体说说在实际压力测试中&#xff0c;为什么有时候TPS上不去的原因。如有遗…

C++学习笔记(三十五):c++ 函数指针及lambda表达式

本节介绍c函数指针。在一些源码中经常能看到c函数指针&#xff0c;但之前一直觉着这一块比较复杂&#xff0c;就一直没去仔细研究&#xff0c;终于有时间去仔细研究这一块内容了。 c风格的函数指针 函数指针是指将一个函数赋值给一个变量的方法&#xff0c;可以将函数作为一个参…

Vercel配置自定义域名

首先你需要有一个域名 1.点击部署的项目设置 2.找到Domains 3.输入自己的域名 点击添加之后按要求去域名服务商添加解析即可 4.显示下面内容就设置完成了&#xff0c;

激活/注册navicat15

一、获取软件 链接&#xff1a;https://pan.baidu.com/s/1F_tiLuLvVFMEz8pDfIvDjw?pwdjjfj 提取码&#xff1a;jjfj 二、安装 安装的过程我就不放了&#xff0c;重点如下 安装完不要打开软件&#xff01; 安装完不要打开软件&#xff01; 安装完不要打开软件&#xff01;…

强化学习求解TSP(三):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

回首24考研历程,那些无法忘却的收获

文章目录 毅力与坚持&#x1f44d;知识的力量&#x1f9d0;心态的历练&#x1f913;友谊与互助( •̀ ω •́ )y未来的启示(●◡●) 在这个充满希望与挑战的时刻&#xff0c;我想与你们分享一段关于2023这一年特别的经历——考研之路。这段旅程既有磨砺的痛楚&#xff0c;也有…

小程序基础学习(事件处理)

概述&#xff1a;点击某一个标题&#xff0c;使标题选中增加不同颜色。 <!--pages/four/four.wxml--> <navigation-bar title"牧原" back"{{false}}" color"black" background"#FFF"></navigation-bar> <view c…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑩

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷10 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷10 模块…

RT-Thread: ulog 日志 讲解和使用

说明&#xff1a;记录 RT-Thread: ulog 日志功能和使用流程。 官网资料链接&#xff1a; https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/ulog/ulog 1.ulog 简介 日志的定义&#xff1a;日志是将软件运行的状态、过程等信息&#x…

海外市场调研为什么要用独享静态代理IP?

独享静态IP在海外市场调研中扮演着至关重要的角色&#xff0c;提供了一系列无可比拟的优势。独享静态代理IP的稳定性和可靠性对于长期的市场调研至关重要&#xff0c;它保证了连接的持续性和数据的准确性。通过这些方面的综合优势&#xff0c;独享静态代理IP成为海外市场调研中…

工业智能网关:HiWoo Box远程采集设备数据

工业智能网关&#xff1a;HiWoo Box远程采集设备数据 在工业4.0和智能制造的浪潮下&#xff0c;工业互联网已成为推动产业升级、提升生产效率的关键。而在这其中&#xff0c;工业智能网关扮演着至关重要的角色。今天&#xff0c;我们就来深入探讨一下工业智能网关。 一、什么…

用Linux的视角来理解缓冲区概念

缓冲区的认识 缓冲区&#xff08;buffer&#xff09;是存储数据的临时存储区域。当我们用C语言向文件中写入数据时&#xff0c;数据并不会直接的写到文件中&#xff0c;中途还经过了缓冲区&#xff0c;而我们需要对缓冲区的数据进行刷新&#xff0c;那么数据才算写到文件当中。…

Java获取IP地址及对应的归属地

目录 前言 一、获取访问的IP地址 二、通过IP地址获取对应的归属地 2.1 Ip2region 2.1.1 高达 99.9 % 的查询准确率 2.1.2 Ip2region V2.0 特性 2.1.3 多语言以及查询客户端的支持 2.2 Ip2region xdb Java 查询客户端实现 2.2.1 引入 Maven 仓库 2.2.2 ip2region.xdb …

【.NET Core】可为null类型详解

【.NET Core】可为null类型详解 文章目录 【.NET Core】可为null类型详解一、概述二、可为空的值类型2.1 声明和赋值2.2 检查可为空值类型2.3 基础类型与可为空的值类型互换2.4 可为空的值类型装箱和取消装箱2.5 如何确定可为空的值类型 三、可为 null 的引用类型 一、概述 nu…

用通俗易懂的方式讲解:在 Langchain 中建立一个多模态的 RAG 管道

写在前面 语言模型的出现彻底改变了我们从文件中提取信息的方式。然而&#xff0c;我们知道图片&#xff0c;通常是图表和表格&#xff0c;经常包含关键信息&#xff0c;但基于文本的语言模型无法处理媒体文件。 例如&#xff0c;我们以前只能使用 PDF 文件中的文本来查找答案…

C#编程-实现线程声明周期

实现线程声明周期 当System.Threading.Thread类的对象被创建的时候,线程的生命周期开始。线程的生命周期在完成任务时结束。在线程的生命周期中有各种状态。这些状态是: 未启动状态可运行状态不可运行状态死亡状态下图显示了线程的各种状态和引起线程从一个状态变为另一个状…