作者训练了一个大型的深度卷积神经网络,用于在 ImageNet LSVRC-2010 比赛中对120万张高分辨率图像分为1000个不同的类别。在测试数据上,作者们达到了 top-1 和 top-5 的 error rates,分别为37.5% 和 17.0%,相比起过去最先进技术要好得多。
该神经网络有6000万个参数和65万个神经元,由5个卷积层组成,其中一些卷积层添加了最大池化层,然后是3个全连接层,最后是1000路 softmax。为了使训练更快,作者使用了非饱和神经元和高效的 GPU 进行卷积运算。为了减少全连接层中的过拟合,作者采用了一种最近开发的正则化方法 “dropout”,该方法非常有效。
作者还在 ILSVRC-2012 比赛中应用了 AlexNet 的一个变体,并获得了 15.3% 的 winning top-5 的 test error rates,而第二名的 test error rates 为 26.2%。
目前的目标识别方法主要利用机器学习方法。为了提高它们的性能,我们可以收集更大的数据集,学习更强大的模型,并使用更好的技术来防止过拟合。但截止目前,标记图像的数据集相对较少(数万张)。这种数量级的数据集可以应付简单的识别任务,也可以对数据集使用标签保留转换进行扩大。例如,MNIST数字识别任务的当前最佳错误率(<0.3%)接近人类。但现实环境中的物体会表现出相当大的可变性,因此要学会识别它们,就必须使用更大的训练集。事实上,小图像数据集的缺点已经人尽皆知,但直到最近才有可能收集具有数百万张图像的标记数据集。新的更大的数据集包括LabelMe(数十万个完全分割的图像)ImageNet(超过22000个类别、超过1500万张标记高分辨率图像)。
为了从数百万张图像中学习数千个分类,我们需要一个具有强大学习能力的模型。然而,即使是像 ImageNet 这样大的数据集也不能解决物体识别任务的巨大复杂性的问题,因此我们的模型还应该有大量的先验知识来弥补我们没有的所有数据。
卷积神经网络则满足上述条件。它们的容量可以通过改变它们的深度和广度来控制,而且它们还对图像的性质做出了强有力的和大多数正确的假设(即统计的平稳性和像素依赖的局部性)。因此,与具有相似 layer-size 的标准前馈神经网络相比,CNN 具有更少的连接和参数,因此更容易训练,而理论上最好的性能可能也只是稍差一点。
尽管 CNN 具备优秀的特质、其架构也相对高效,但要大规模应用于高分辨率图像,它们的训练开销仍然高得令人望而却步。幸运的是,目前的 GPU 配合高度优化的2D卷积,已经足以训练大型 CNN,而且最近的数据集(ImageNet)也包含足够多的 label 示例,可以在没有严重过拟合的情况下训练此类模型。
本文的具体贡献如下:
最后,网络的大小主要受限于当前 GPU 显存,以及可接受的训练时间。AlexNet 需要通过两个GTX 580 3GB gpu 训练5-6天。所有的实验都表明,只要等待更快的 GPU 和更大规模的数据集出现,AlexNet 的性能会得到明显改善。
ImageNet 是一个包含超过1500万张标记高分辨率图像、大约22000个类别的数据集。图片是从网上收集的,并由人工标记。从2010年开始,一年一度的 ImageNet 大规模视觉识别挑战赛 ILSVRC 举行。ILSVRC 使用ImageNet 的一个子集,1000个类别中每个类别大约有1000张图像。总共大约有120万张训练图像、5万张验证图像和15万张测试图像。
ILSVRC-2010 是 ILSVRC 中唯一一个测试集 labels 可用的版本,所以作者在这个版本进行了大部分实验。作者也参加了 ILSVRC-2012 竞赛,因此在第6节中也报告了在这个版本的数据集上的结果,因为2012年开始ILSVRC不公开测试集,因此并不能得知测试集错误率。
ImageNet 由多种分辨率的图像组成,而我们的系统需要恒定的输入维数。因此,我们将图像采样到256 × 256的固定分辨率。给定一个矩形图像,我们首先重新缩放图像,使较短的边的长度为256,然后从结果图像中裁剪出中央的 256×256 patch。除了从每个像素中减去训练集上的 mean activity(中心化处理),我们没有以任何其他方式对图像进行预处理。所以我们将在像素的原始RGB值(中心化处理过的rgb值)上训练我们的网络。
AlexNet 架构如图2所示。它包含八个学习层——五个卷积层和三个全连接层。下面将描述 AlexNet 架构的一些新颖或不寻常的特征。章节 3.1-3.4 会根据其重要性的估计进行排序,最重要的放在前面。
将神经元的输出 \(f\) 建模为输入 \(x\) 的函数的标准方法是 \(f(x)=tanh(x)\) 和 \(f(x) = (1 + e^{-x})^{-1}\)。在梯度下降的训练时间方面,这些饱和非线性函数比非饱和非线性函数慢得多 \(f(x)=max(0, x)\) —— Relu。使用 ReLUs 的深度卷积神经网络的训练速度比使用 tanh 单位等效速度快几倍。图1演示了这一点,该图显示了对于特定的四层卷积网络,在 CIFAR-10 数据集上达到 25% 训练误差所需的迭代次数。这张图表明,如果我们使用传统的饱和神经元模型(tanh),需要的训练次数将会成倍增长,从而导致难以训练如此大的神经网络进行实验。
作者也并不是第一个考虑在 CNN 中替代传统神经元模型的人。例如,Jarrett 等人在论文中声称:通过采用 \(f(x)=|tanh(x)|\) 在 Caltech-101 数据集上也能够起到不错的效果。
但针对 Caltech-101 这个较小规模的数据集,Jarrett 等人主要关注的是防止过拟合,因此他们观察到的效果与我们使用 ReLUs 时关注的加速拟合作用不同。快速学习对在大数据集上训练的大模型的性能有很大的影响。
单个 GTX 580 GPU 只有 3GB 内存,这限制了可以在其上训练的网络的最大大小。事实证明,120万个训练示例足以训练一个 GPU 显存无法容纳的网络,因此考虑将网络分布在两个 GPU 上进行训练。目前的 GPU 特别适合跨 GPU 并行化,因为它们能够直接读取和写入彼此的内存,而不需要经过主机内存。
显存不仅要保存模型的参数,还要保存梯度下降的中间结果,梯度下降的batch-size越大需要的显存就越大。
显然,3GB是无法满足作者训练8层的深度卷积神经网络的,并行化主要也是为了解决显存问题,其次才是训练速率问题。
作者采用的并行化方案本质上是把一半的内核(或神经元)放在每个GPU上,GPU 只在特定的层进行通信。例如,第3层的神经元可以从第2层的两个 GPU 输出通信;但第4层的神经元只从位于同一 GPU 上的第3层获取输入。这种连接模式是基于交叉验证实现的,并且可以通过超参精确地调整通信量,直到当前连接的计算量达到一个可接受范围。
最终的架构有点类似于 Cire san 等人所使用的柱状CNN,但 AlexNet 有多个列 (见图2)。双 GPU 的方案将我们的 top-1、top-5 的错误率分别降低了 1.7% 和 1.2% 。且双 GPU 的训练时间比单 GPU(半参数)略短。
单 GPU 半参数并不能减少最后一个卷积层和全连接层的参数,作者应该是在前几层减少了每层卷积核的个数。
Relu有一个理想的特性,即它们不需要对输入归一化来防止它们饱和。如果至少有一些训练示例对 ReLU 产生正输入,学习就会发生在该 Relu 对应的神经元上。
然而,作者发现的局部归一化 LRN 仍有助于防止过拟合。用 \(a^{i}_{x,y}\) 表示第 i 个通道的 featuremap 上坐标为 (x, y) 的值,N 表示 featuremap 的通道数,\((k, α, β, n)\) 都是可调整超参,然后将 Relu 的输出作为局部归一化的值 \(a^{i}_{x, y}\) ,局部响应归一化由表达式给出:
\(b_{x, y}^{i}=a_{x, y}^{i} /\left(k+\alpha \sum_{j=\max (0, i-n / 2)}^{\min (N-1, i+n / 2)}\left(a_{x, y}^{j}\right)^{2}\right)^{\beta}\)
其中求和操作是在同一空间位置的 n 个相邻的 featuremap 上执行,N 是该层中 featuremap 的总数,k 保证了分母不为0。当然,featuremap 的顺序是任意的,在训练开始之前就确定了。LRU 是受到了真实神经元的 “横向抑制” 的启发。在 AlexNet 中,采用交叉验证的方式寻找到了超参 \(k = 2, n = 5, α = 10−4, β = 0.75\)。我们在某些层应用了 ReLU 非线性之后应用了这个归一化(参见第3.5节)。
横向抑制:更加活跃的神经元其附近的神经元会受到抑制。
该方案与 Jarrett等人提出的局部对比度归一化方案有一些相似之处,但LRN 更准确地可以被称为“亮度归一化”,因为它没有减去平均值。LRN 将 top-1 和 top-5 的错误率分别降低了 1.4% 和 1.2%。作者还在 CIFAR-10 数据集上验证了该方案的有效性:四层 CNN 在进行 LRN 处理的情况下实现了 13% 的测试错误率,在 LRN 处理后实现了 11% 的测试错误率。
LRN 在 VGG 的论文中被推翻了。
CNN 中的池化层结合了同一 featuremap 中相邻神经元组的输出。传统上池化窗口之间是不重叠的。更准确地说,设池化步长为s,池化窗口长度为z,s = z 时,我们采用的是标准最大池化;s < z时,则是重叠最大池化。AlexNet使用s = 2、z = 3。
与非重叠方案相比,重叠池化方案将 top-1 和 top-5 的错误率分别降低了 0.4% 和 0.3%,作者还在训练过程中观察到,重叠池化可以避免过拟合。
重叠最大池化在 VGG 的论文中被推翻了。
这部分描述 CNN 的整体架构。如图2所示,网络包含8个权重层;前五个是卷积层,剩下三个是全连接层。最后一个全连接层的输出被馈送到一个1000路 softmax,它产生1000个类标签的分布。AlexNet 最大化了多分类逻辑回归目标(可能性最大的分类对应 softmax 的最大输出),这相当于最大化了对数似然概率。
最大化对数似然概率
也就是让所有样本的后验概率相乘结果最大化,为了避免结果趋近于0采用对数的方式进行对数似然处理。
第二层、第四层和第五层卷积层的 featuremap 只连接到前一层位于同一 GPU 上的 featuremap(见图2)。第三层卷积层的 featuremap 连接到第二层的所有 featuremap。全连接层中的神经元与前一层中的所有神经元连接。LRN 层紧随第一和第二卷积层。最大重叠池化层在 LRN 层和第五卷积层之后。ReLU 应用于每个卷积和全连接层的输出。
第一个卷积层对 227×227×3 输入图像进行过滤,使用 96 个大小为 11×11×3 的卷积核,卷积步幅为4(这是 featuremap 中相邻神经元的感受野中心之间的距离)。第二卷积层将第一卷积层的输出(响应归一化和池化)作为输入,并使用256个大小为 5×5×48 的卷积核进行过滤。第三、第四和第五卷积层彼此连接,没有任何中间的池化层或归一化层。第三卷积层有384个大小为 3×3×256 的卷积,连接到第二卷积层的输出(归一化,池化)。第四卷积层有384个 3×3×192 大小的卷积核,第五卷积层有256个 3×3×192 大小的卷积核。全连接层每层有4096个神经元。
AlexNet 网络架构有六千万个参数。尽管 ILSVRC 的1000个类别只需要10个bit位就能够存储(\(2^{10}=1024\)),但要把图像映射成1000个类别标签需要存储的参数就远远不止了,要学习这么多参数是非常容易过拟合的。下面将描述对抗过拟合的两种主要方法。
减少图像数据过拟合的最简单、最常见的方法是使用 “标签保留转换” 人为地扩大数据集。作者采用了两种不同的数据增强形式,这两种形式都允许通过很少的计算量从原始图像生成转换后的图像,因此转换后的图像不需要存储在磁盘上。转换图像的操作是在 CPU 上用 Python 代码生成的,也就是说,转换图片跟训练这两个操作是并发运行的,当转换图像生成成功时, GPU 正在对前一批转换图像进行训练,也就不会导致额外的时间开销。
第一种形式的数据增强包括:图像平移和水平反射。为此,我们从 256×256 图像中提取随机的 224×224 patch(及其水平反射),并在这些提取的 patchs 上训练我们的网络。
这也是为什么图2中的输入是 224×224(作者标注错了,输入应该是227×227 而不是 224×224,这里姑且当做 224×224)
这使得训练集的大小增加了2048倍,尽管处理后所得到的训练示例相互之间是高度相互依赖的。但如果没有这个方案,我们的网络将遭受严重的过拟合,这将迫使我们使用更小的网络。
在测试时,会通过将测试集的 224×224 的图片进行裁剪,提取其中的5个 224×224 的 patch(四个对角 patch 和中心 patch)及其水平反射(共10个 patch,因为还有水平反射)进行预测,并将网络的 softmax 层对这10个 patch 的预测结果取平均。
这个倍率也是基于224×224计算的,256-227=32,32×32=1024,平移反射1024×2=2048
数据增强的第二种形式包括改变训练图像中 RGB 通道的强度。具体来说是对整个 ImageNet 训练集中,对图像的 RGB 像素值执行PCA。对每个训练图像,我们找到的主成分的倍数,其大小与对应的特征值 \(λ_i\) 乘以一个随机变量 \(α_i\) 成正比,\(α_i\) 从一个均值为零,标准差为0.1的高斯分布中提取。因此对每个 RGB 图像像素 \(I_{xy}=[I^{R}_{xy}, I^{G}_{xy}, I^{B}_{xy}]^T\),我们添加如下公式:
\(I_{xy}=[I^{R}_{xy}, I^{G}_{xy}, I^{B}_{xy}]^T = [p_1, p_2, p_3][α_1λ_1, α_2λ_2, α_3λ_3]^T\)
其中 \(p_i\) 和 分别为 RGB 像素值的 3×3 协方差矩阵的第 i 个特征向量,\(λ_i\) 为协方差矩阵的特征值,\(α_i\) 为随机变量。对于特定训练图像的所有像素,每个 αi 只使用一次,直到该图像再次用于训练,此时它将被重新绘制。该方案大致捕捉了自然图像的一个重要性质,即对象识别并不会受到光照强度以及颜色的影响。该方案将 top-1 错误率降低了 1% 以上。
集成多个不同模型可有效防止过拟合,但对于已经需要几天训练的大型神经网络来说这个方案不太经济。然而,有一个非常有效的方案,在训练期间只需花费大约两倍的训练成本就能够达到集成模型的效果。
最近引入的技术 dropout 将会以0.5的概率把每个神经元的输出设置为零。以这种方式被 “丢弃” 的神经元不参与正向传递,也不参与反向传播。所以每次输入训练样本时,神经网络都会对不同的 “残余网络” 进行采样,但所有的 “残余网络” 都共享权重。
这种技术减少了神经元复杂的协同适应,因为一个神经元不能依赖于特定的其他神经元的存在。因此,通过dropout处理,神经元与另一个随机的神经元相互协作,从而让每一个神经元都被迫学习更健壮的特征。在测试时,我们使用所有的神经元,将它们的输出乘以0.5,对于指数级多的dropout网络产生的预测分布的几何平均值,0.5是一个合理的近似值。
“近亲结婚容易生出傻孩子”
我们在图2的前两个全连接层中使用dropout。在没有 dropout 的情况下,我们的网络表现出严重的过拟合。Dropout大约使收敛所需的迭代次数翻了一番。
我们使用随机梯度下降训练我们的模型,批大小为128个样本,动量为0.9,权重衰减为0.0005。作者发现这种少量的权重衰减对模型的学习很重要。权值衰减不仅仅起到了正则化的作用,还减少了模型的训练误差。权重 \(w\) 的更新规则为
\( v_{i+1}:=0.9 \cdot v_{i}-0.0005 \cdot \epsilon \cdot w_{i}-\epsilon \cdot\left\langle\left.\frac{\partial L}{\partial w}\right|_{w_{i}}\right\rangle_{D_{i}} \)
\( w_{i+1} := w_i + v_{i+1} \)
其中 \(i\) 为迭代指标,\(v\) 为动量变量,\(\epsilon\) 为学习率,\(\left\langle\left.\frac{\partial L}{\partial w}\right|_{w_{i}}\right\rangle_{D_{i}}\) 是第 \(i\) 批目标对 \(w\) 求导的平均值,在 \(w_i\) 处求值。
每一层权重的初始化按照均值为0,标准差为0.01的高斯分布进行分配初始化。用常数1初始化了第二层、第四层和第五层卷积层以及全连接隐藏层中的神经元偏差值。偏差值的这种初始化方式向relu提供了更加积极的输入来加速早期的学习阶段(避免过早出现0的Relu输出)。我们用常数0初始化剩余层中的神经元偏差。
我们对所有层使用相同的学习率,并且在整个训练过程中手动调整。调整学习率遵循的启发式方法是:当验证错误率不再随着当前学习率的提高而提高时,将学习率手动除以10。
学习率初始为0.01,训练结束前降低3次学习率。作者通过120万张图像的训练集对网络进行了大约90个周期的训练,在两个 NVIDIA GTX 580 3GB gpu 上花费5到6天的时间。
作者在 ILSVRC-2010 上的结果汇总在表1中。AlexNet 达到了 top-1 和 top-5 的 test error rates 分别为 37.5% 和 17.0%。
在 ILSVRC-2010 竞赛中,使用六种稀疏编码模型(Sparse coding)对不同特征进行平均预测获得的最佳性能分别为 47.1% 和 28.2%,使用两种分类器对 Fisher Vectors(FVs) 进行平均预测(SIFT+FVs)获得的最佳性能分别为 45.7% 和 25.7%(两种分类器对两种密集采样特征进行平均预测)。
作者也参加了 ILSVRC-2012 竞赛,结果汇总在表2。由于 ILSVRC-2012 测试集 labels 不公开,因此不能报告测试错误率。在本段的其余部分将交替使用验证和测试错误率,因为根据经验来看,它们的差异不超过0.1%(见表2)。
本文中描述的 CNN 达到了 18.2% 的 top-5 error rates。将五个相似 CNN 的预测结果平均起来,错误率为 16.4%。训练一个 CNN (该 CNN 在最后一个池化层上增加一个额外的第六卷积层,)对整个ImageNet.2011(1500万张图像,22K个类别)进行分类,然后在 ILSVRC-2012 上对模型进行微调,错误率为 16.6%。将两个 CNN 与前面提到的五个 CNN 进行平均,错误率为 15.3%。第二名的竞赛参赛作品仅达到了 26.2% 的错误率,其方法SIFT+FVs。
最后,作者还报告了对 2009-ImageNet 数据集进行分类的错误率,其中包含 10184 个类别和 890 万张图像。在这个数据集上,我们遵循文献中的约定,使用一半的图像进行训练,一半用于测试。由于没有已建立的测试集,数据集分割必然与以往作者使用的分割不同,但这并不会显著影响结果。在这个数据集上的 top-1、top-5 error rates 分别为 67.4% 和 40.9%,这是通过上面描述的网络实现的,但作者在最后一个池化层上新增加了第6个卷积层。而截止目前,该数据集发表的最佳结果分别为 78.1% 和 60.9%。
概述1查询表中所有的行与列2从表中检索部分行3查找空值4将空值转换为实际值5查找满足多个条件的行6从表中检索部分列7为列取有意义的名称8在WHERE子句中引用取别名的列9拼接列使用字符串连接符用SQL生成SQL10在SELECT语句中使用条件逻辑casewhen11限制返回的行数12从表中随机返回n条记录13模糊查询查出vname中包含的 查出vname中包含_BCE的概述目标表:SQL>descemp; NameTypeNullableDefaultComments ------------------------------------------- EMPNONUMBER(4) ENAMEVARCHAR2(10)Y JOBVARCHAR2(9)Y MGRNUMBER(4)Y HIREDATEDATEY SALNUMBER(7,2)Y COMMNUMBER(7,2)Y DEPTNONUMBER(2)Y SQL>复制1.1查询表中所有的行与列select*fromemp;复制1.2从表中检索部分行只需要加过滤条件即可select*fromempawherea.ename
问题一报错信息TypeError:Cannotreadproperty'$$'ofundefined atHTMLElement._attached.wx.getPlatform._touchstartHandlerForDevtools复制解决方法:因为小程序会保留上一次滑动swiper时候的current,所以会出现上次滑动到的current在这次的数据中不存在问题,所以,每次动态加载swiper-item前,需要设置swiper的current属性为0#问题二swiper的current每次设置了0,但是还是不显示swiper,检查元素是存在的,并且current=-1<swipercurrent='-1'><swiper>复制解决方法,动态设置swiper-item的数据时,还需设置current=0,并且current和swiperList不能在一个this.setData中设置,要先setDataswiperList然后在setDatacurrent我是这样写的:this.setData({ swiperIte
作者:IC_learner,来源:http://www.cnblogs.com/IClearner/这里来讲一下formality的使用,貌似跟tcl和DC没有很强的联系;然而说没有联系,也是不正确的。在综合完成之后,可以进行形式验证。此外这里不是专门讲解formality的使用的,因此只会简单地实践一下它的用法。 formality是Synopsys公司的形式验证工具,上一节我们得到了综合后的设计,这里我们就要验证综合后的设计和我们的RTL代码是否一致。1、准备好RTL文件、综合优化后的文件以及带有优化映射信息的SVF文件:2、书写相应地流程文件:3、启动formality: fm_shell对上面脚本不清楚的或者不懂的,可以使用man命令查看它的用法:-->-->-->-->4、执行我们写的脚本得到结果如下,说明验证通过了:
需求:编写登录接口输入用户名密码认证成功后显示欢迎信息输入三次后锁定用户信息文件黑名单的文件 黑名单里检查,不让登录 用户名密码判定流程图:代码:#!/usr/bin/env python tries = 0 lockfile = open('account_lock.txt','r+',encoding='UTF-8') tolockfile = open('account_lock.txt','a',encoding='UTF-8') userfile = open('account.txt','r',encoding='utf-8') def islock(account): for line in lockfile: line = line.strip('\n') if line == account: pr
图片来源:WOCinTechChat.ModifiedbyOpensource.com.CCBY-SA4.0Awk是Unix和类似Unix系统下功能强大的文本分析工具,但是因为它具有可用于执行常见解析任务的编程函数,因此也被视为一种编程语言。您可能不会使用awk开发下一个GUI应用程序,也不会改变您的默认脚本语言,但是在特定任务下它可以成为十分强大且实用的程序。这些任务可能是多种多样的。想要知道哪些问题可以使用awk的最好方法就是学习awk。之后您会惊讶地发现使用awk后将会令工作事半功倍。Awk的基本语法是:awk[options]'pattern{action}'file复制首先,创建此示例文件并将其另存为colours.txtnamecoloramount applered4 bananayellow6 strawberryred3 grapepurple10 applegreen8 plumpurple2 kiwibrown4 potatobrown9 pineappleyellow5复制这些数据被一个或多个空格分隔为列。在某种程度上,你正在分析的数据通常是
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程。尤其是像.NET、Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。当然,也有一些商业软件,对其程序进行了混淆加密,这样我们就很难用工具反编译了。1、Java反编译插件——JadclipseJadClipse是Jad的Eclipse插件,是一款非常实用而且方便地Java反编译插件,我们只需将下载的插件包复制到eclipse的plugins目录下,然后修改window->Preferences->Java->JadClipse下的Pathtodecompiler,如:C:\pin\jadnt158\jad.exe,最后在Windows->Perference->General->Editors->FileAssociations中修改“*.class”默认关联的编辑器为“JadClipseClassFileViewer”即可。2、Java反编译工具jadjad是一款使用
栗子鱼羊发自凹非寺 量子位出品|公众号QbitAI大神程序员,夜夜coding到天明? 有位名叫IvanBessarabov(简称“伊万”)的好事者,刚刚统计了各路大佬的代码提交(gitcommit)时间分布。包括Linux之父,Python之父,Go语言的作者……伊万考虑了时区,并把多人合作提交的代码踢出去没算。结果很有意思,发现了几个不同的物种:正常人类,夜行兽,还有……永动机。这引起了网友的热烈讨论,HackerNews热度已经超过600点:正常人类正常人类通常在白天工作。然而在程序员大佬中,这个物种并不常见。Go语言的作者RobPike看上去算是个非常正常的人类:(第一列是时间,第二列是代码行数。)Go项目的repo显示,Rob的工作时间集中在上午9点到下午5点之间,朝九晚五,非常健康。虽然一天就睡5个小时,似乎业余时间也都在coding吧,但总之,组织鉴定他是个正常人类!下面这位“正常人类”,画风就开始有点不一样了:这来自Linux之父LinusTorvalds:白天工作,没问题。但是这位大神的代码从早上7点就开始有喷发之势,这个劲头几乎能持续到晚上八九点钟。睡眠时间比上面那
分成四类列表的名字,叫AwesomeGraphClassification。 就像开头提到的那样,70多篇论文和它们的代码,被少年分到了四个类别里。前两类比较简洁:第一类是分解(Factorization),有6篇论文的实现。比如,2017年诞生的graph2vec,把整个图编码进向量空间,便属于这一类。第二类是SpectralandStatisticalFingerprints,有7项研究的实现。比如,中选KDD2018的NetLSD,不受排列方式的影响、尺寸大小的影响,能在大图和大图之间做直接对比。后面两类就丰盛了许多: 第三类是深度学习(DeepLearning),也是内容最饱满的章节,有37篇论文的代码。不乏近年顶会的中选论文:第四类是图核(GraphKernels),衡量两图相似度的一种有效方法。这个类别有21项研究的代码,不过这里的论文并不限于近年,跨度从2003年直到2018年。 哪里比前辈厉害?回想上半年,多特蒙德工业大学的两位少年,发布了PyTorchGeometric(简称PyG)图网络库,瞬时红火起来,如今已有4400多星。PyG在四个数据集上,运行GCN和GAT
GAIR今年夏天,雷锋网将在深圳举办一场盛况空前的“全球人工智能与机器人创新大会”(简称GAIR)。大会现场,雷锋网将发布“人工智能&机器人Top25创新企业榜”榜单。目前,我们正在四处拜访人工智能、机器人领域的相关公司,从而筛选最终入选榜单的公司名单。如果你的公司也想加入我们的榜单之中,请联系:2020@leiphone.com澳大利亚的物理学家大概想提早退休,所以创造了一个人工智能,只要稍加管理,就可以运行、甚至改善复杂的物理学实验。研究的目的是让人类科学家们可以专注在高层次的问题以及研究设计,让繁琐劳累的实验操作交给机器人实验助理去搞定。AI进行的实验是制造玻色-爱因斯坦冷凝物,一种超冷气体,该实验过程在2001年获得三项诺贝尔物理奖。实验需要使用定向辐射,将一组原子减速到几乎静止,产生各种有趣的效果。澳大利亚国立大学的团队将气体温度降低到1微开尔文——相当于只比绝对零度高了百万分之一度——然后将实验交给了AI。AI的任务是弄清楚如何使用镭射、控制其他参数,从而最好地将原子温度降低至几百纳米开尔文。AI重复了几十遍操作,发现了越来越多高效的实验方法。PaulWigley(
一、简介1、备忘录在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。2、模式成员(1)Originator(发起人):负责创建一个Memento(备忘录),用以记录当前的状态,并且可以使用备忘录恢复自己的状态。(2)Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录。(3)Caretaker(管理者):负责保存好备忘录,不能对备忘录的内容进行操作或者检查。3、UML4、所属类别:行为型二、C++程序1//备忘录模式.cpp:定义控制台应用程序的入口点。 2// 3 4#include"stdafx.h" 5#include<iostream> 6#include<string> 7usingnamespacestd; 8classMemento 9{ 10private: 11stringstate; 12public: 13Memento(strings) 14{ 15state=s; 16} 17~
圆周率没有尽头,风景一直在路上 publicclassReadXmlFileTest{ /** *演示java读取xml文件 */ publicstaticvoidmain(String[]args){ List<Xml>xmlList=newArrayList<Xml>(); try{ //实例化读取xml文件的对象 SAXReaderreader=newSAXReader(); //设置文件路径,并将信息保存到一个Document对象中 Documentdoc=reader.read("config/pluginTaskTimmer.xml"); //获取xml的根标签 Elementroot=doc.getRootElement(); //获取根标签中所有名字为子标签的标签中的所有子子标签,并保存到一个List中 List<Element>list=root.elements("task"); //遍历list集合,取出其中的数据 for(Elemente:list){ /** *使用Element类的elementText方法获取子子标
NotEqualonaSegment TimeLimit:1000MS MemoryLimit:256MB 64-bitintegerIOformat:%I64d ProblemDescription Youaregivenarray a with n integersand m queries.The i-thqueryisgivenwiththreeintegers li, ri, xi. Forthe i-thqueryfindanyposition pi (li ≤ pi ≤ ri)sothat api ≠ xi. Input Thefirstlinecontainstwointegers n, m (1 ≤ n, m ≤ 2·105)—thenumberofelementsin a andthenumberofqueries. Thesecondlinecontains&nbs
在程序设计中,为完成某一功能所需的一段程序或子程序;或指能由编译程序、装配程序等处理的独立程序单位;或指大型软件系统的一部分。本文为你介绍了Python中的两种常用模块。 os: 这个模块包含普遍的操作系统功能。利用这个模块可以写出与平台无关的程序,比如就是使用os.sep可以取代操作系统特定的路径分割符。 列举一些os模块中常用的方法: os.name:获取当前系统平台,Windows下返回'nt',Linux下返回'posix'。 os.linesep:获取当前平台使用的行终止符。Windows下返回'/r/n',Linux使用'/n'。 os.getcwd():获取当前工作目录,即当前python脚本工作的目录路径。 os.listdir(path):返回指定目录下的所有文件和目录名。 例如: Python代码 1 >>>os.listdir('/home/shirley/') os.remove(path/filename)函数用来删除一个文件。 os.system()函数用来运行shell命令。此命令可以方便的调用
docker学习路线 参考资料 知乎docker的学习路线 Docker—从入门到实践 Docker核心技术与实现原理 Docker入门 《KubernetesinAction》,想要学习Kubernetes的读者一定不要错过。 编程能力影响最大的两本书就是: 《计算机程序的构造和解释》(StructureandInterpertationofComputerProgramming,SICP) 《计算机程序的概念、技术和模型》(Concepts,Techniques,andModelsofComputerProgramming,CTMCP) 理解docker的核心技术(coretech) docker的核心技术有namespace,controlgroups,unionfilesystem Namespaces 命名空间(namespaces)是Linux为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。 Docker其实就通过Linux的Namespaces对不同的容器实现了隔离。 Linux的命名空间机制提供了以下七种不同的命名空间,包括&nb
为什么要搭建npm私有仓库? 公司内部开发的私有包,统一管理,方便开发和使用 安全性,由于公司内部开发的模块和一些内容并不希望其他无关人员能够看到,但是又希望内部能方便使用 加速,自己搭建npm服务器,本身可以自带常用package的缓存,cnpm有一些包存在路径问题,而npm的速度有些感人,自建的服务器会缓存下载过的包,能节省时间 安装 使用npm全局安装即可 npminstall–globalverdaccio复制 运行 安装完成后直接输入verdaccio命令即可运行 后面的yaml是默认的配置文件,4873端口表示默认端口,现在我们可以通过修改默认的配置文件来符合我们的需求. verdaccio的全部配置 默认配置如下图所示 ##号后面是注释 #所有包的缓存目录 storage:./storage #插件目录 plugins:./plugins #开启web服务,能够通过web访问 web: #WebUIisenabledasdefault,ifyouwantdisableit,justuncommentthisline #enable:false title:V
应产品要求,实现输入框换行功能,但是传统的input不支持换行操作,故而使用其他方式进行实现。 方式一:contenteditable属性的使用 使用一个div,<divcontenteditable="true"id="t"></div>复制 但是存在问题是如果配合vue的双向绑定会报错 方式二:使用textarea进行模拟,监听内容变化,动态改变其高度 html: <textareaclass="input-itemtextarea-item"placeholder="请输入详细地址" rows="1"ref="address" @focus="showClearBtn('AddressDetail')" @blur="hideCleanBtn('AddressDetail')" v-model="resObj.address_detail"> </textarea> 复制 JS: watch:{ 'resObj.address_detail':function(newVal){ this.getHeight(t
1.非常好的Python教程 《深入Python3.0》以及IBM开发社区的博客探索Python. 2.子集:s是S的子集 >>>S={2,3,4,5,6,7} >>>s={xforxinSifx%2==0}#偶数子集 >>>s set([2,4,6])复制 3.映射:Ceasar加密 >>>importstring >>>table=string.maketrans("abcdefghijklmnopqrstuvwxyz","cdefghijklmnopqrstuvwxyzab")#向后平移两位 >>>print"hello".translate(table) jgnnq复制 4.复数练习 >>>1+1j (1+1j) >>>1+1j+(10+20j)#相加 (11+21j) >>>x=1+3j >>>(x-1)**2#相乘 (-9+0j)
本文主要介绍C++中的重载操作符(operator)的相关知识。 1.概述 1.1what operator是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将operator和运算符(如operator=)视为一个函数名。 使用operator重载运算符,是C++扩展运算符功能的方法。使用operator扩展运算符功能的原因如下: 使重载后的运算符的使用方法与重载前一致扩展运算符的功能只能通过函数的方式实现(实际上,C++中各种“功能”都是由函数实现的)1.2why 对于C++提供的所有操作符,通常只支持对于基本数据类型和标准库中提供的类的操作,而对于用户自己定义的类,如果想要通过该操作符实现一些基本操作(比如比较大小,判断是否相等),就需要用户自己来定义关于这个操作符的具体实现了。 比如,我们要设计一个名为“person”的类,现在要判断person类的两个对象p1和p2是否一样大,我们设计的比较规则是按照其年龄来比较,那么,在设计person类的时候,就可以通过对操作符“==”进行重载,来使用操作符“==”对对象p1和p2进行比较了(根据前面的分