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.hqwc.cn/news/342748.html

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

相关文章

启动Vue项目,报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

前言&#xff1a; 最近在打开一个Vue项目的时候&#xff0c;打开之后输入命令行&#xff1a;npm run serve之后发现&#xff0c;报错&#xff1a;vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序&#xff0c;以下是解决方案&#xff1a; 报错图片截图&…

Springboot注解@EnableConfigurationProperties和@ConfigurationProperties关系和作用

目录 EnableConfigurationProperties和ConfigurationProperties关系是什么&#xff1f; 简介 ConfigurationProperties EnableConfigurationProperties 二者之间的联系 总结 EnableConfigurationProperties和ConfigurationProperties关系是什么&#xff1f; 其实我能明白…

MFC 记录字段交换(RFX)学习

MFC ODBC 数据库类可自动移动数据源与记录集对象之间的数据。 从 CRecordset 派生类且不使用批量取行时,数据将通过记录字段交换 (RFX) 机制进行传输。 如果已在派生的 CRecordset 类中实现批量取行,则此框架将使用批量记录字段交换(批量 RFX)机制来传输数据。 RFX 类似于…

抖音利用人工智能操控用户行为?商家、达人该乐了

文&#xff5c;新熔财经 作者&#xff5c;一城 字节跳动早期投资人陈伟星在社交平台上狂喷抖音&#xff0c;引发不小的震动。 “运用人工智能对用户进行操控&#xff0c;引导其行为&#xff0c;最终实现抖音自身的意图目标”、“控制人类意识&#xff0c;沉迷于意识形态的皇…

开源大数据集群部署(四)Freeipa部署(kerberos+ldap)

作者&#xff1a;櫰木 1、 FreeIPA介绍 Kerberos协议只是一种协议标准的框架&#xff0c;而MIT Kerberos则是实现了该协议的认证服务&#xff0c;是Kerberos的物理载体。将它与Hadoop服务进行集成便能够很好地解决安全性不足的问题。 除了需要安装MIT Kerberos之外&#xff0…

NLP论文阅读记录 - 05 | 2023 抽象总结与提取总结:实验回顾

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1 提取方法2.2 抽象方法2.3 数据集 三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive vs. Extractiv…

vue前端开发自学,插槽练习,同时渲染父子组件的数据信息

vue前端开发自学,插槽练习,同时渲染父子组件的数据信息&#xff01; 如果想在slot插槽出口里面&#xff0c;同时渲染出来&#xff0c;来自父组件的数据&#xff0c;和子组件自身的数据呢。又有点绕口了。vue官方给的解决办法是。需要借助于&#xff0c;父组件的自定义属性。 …

STM32入门教程-2023版【3-4】总结GPIO使用方法

三、总结GPIO使用方法 总体上来说是比较简单的 首先初始化时钟&#xff0c;然后定义结构体&#xff0c;赋值结构体 GPIO_Mode可以选择那8种输入输出模式&#xff0c;GPIO_Pin选择引脚&#xff0c;可以用按位或的方式同时选中多个引脚,GPIO_Speed选择输出速度&#xff0c;最后使…

获取进行逗号分隔的id值 Split的使用

获取进行逗号分隔的id值,Split的使用 后台实现对有逗号进行分割的字符串 使用这行代码就不会有一个空数组值,直接过滤调数组中的空值 var ids = key.Split(,).Where(s => !string.IsNullOrEmpty(s

可以打印试卷的软件有哪些?推荐这几款

可以打印试卷的软件有哪些&#xff1f;随着科技的飞速发展&#xff0c;越来越多的学习工具如雨后春笋般涌现&#xff0c;其中&#xff0c;能够打印试卷的软件尤其受到广大学生和家长的青睐。这些软件不仅方便快捷&#xff0c;而且内容丰富&#xff0c;可以满足不同学科、不同年…

使用 Github、Hugo 搭建个人博客

关键字&#xff1a;开源 博客 框架 1、GitHub Pages 官网&#xff1a;https://pages.github.com/ 文档&#xff1a;https://docs.github.com/zh Github Pages 简介 Websites for you and your projects. (为你的项目提供网站)。GitHub Pages 是通过 GitHub 托管和发布的公共网…

电脑弹窗‘找不到msvcp120dll,无法继续执行代码’要怎么解决?快速修复msvcp120dll

当你的电脑弹窗‘找不到msvcp120dll,无法继续执行代码’&#xff0c;你是否一脸懵逼不知道要怎么去解决呢&#xff1f;其实这种dll丢失的问题还是比较常见的&#xff0c;所以我们遇到也不会担心&#xff0c;只要了解了&#xff0c;那么我们就可以轻松的修复msvcp120dl文件。下面…