【数值分析×机器学习】稀疏矩阵向量乘(SpMV)的运行时间预测(有点意思)
- 英文标题:Performance Modeling of the Sparse Matrix-vector Product via Convolutional Neural Networks
- 中文标题:稀疏矩阵向量积的卷积神经网络性能建模
- 论文下载链接:DOI@10.1007
- 项目代码地址:GitHub@SpMV-CNN
序言
这其实是一件很有趣的事情,假设A∈Rm×nA\in\R^{m\times n}A∈Rm×n,以及x∈Rnx\in\R^nx∈Rn,现在想要计算AxAxAx,显然我们正常来算的话需要进行mn2mn^2mn2次乘法,并且需要xxx中的每个元素需要被重复检索mmm次。
现在有一个好消息和一个坏消息:
- 好消息是矩阵AAA一定会是一个稀疏矩阵;
- 坏消息是我们并不知道AAA到底是怎么个稀疏法,非零元的位置每次来得都千奇百怪,且mmm和nnn都大的离谱;
于是问题就来了,既然是一个稀疏矩阵,我们当然不需要总是重复的检索xxx的每个位置的元素(只需要检索矩阵AAA中非零元所在列索引对应的x[i]x[i]x[i]即可),并且如果我们可以做缓存的话,就可以大大地加快运算速度。
可惜因为上面那个坏消息,我们并不知道x[i]x[i]x[i]在被用了一次后,到底还会何时再被用到(非零元分布不规则),因此如果做了缓存,可能也只是增大空间开销,得不偿失。
这件事情其实再【数值分析×机器学习】使用CNN进行雅可比预条件子的生成(烦)给出了一个办法,就是将稀疏矩阵转换成雅可比快,因为同一个雅可比块内的非零元相对集中,这样就使得缓存命中率大大提高,运算速度就会提升。
本文却做了一个看起来很奇怪的任务,就是去预测某个稀疏矩阵AAA在给定的硬件环境下到底做AxAxAx需要运算多长时间。但是这个任务还是很有意义的,这至少可以做一个先验,如果时间太久的话可能就会需要一些预条件子的介入,如果不久的话就可以省略预处理的步骤。
总的来说其实还是个挺简单的事情,可以考虑做这个方向。
PS\rm PSPS:
开始进入无事一身轻的状态。可惜天真的热,跑不动了,好在月头已经分别完成10km10\rm km10km pb\rm pbpb和历史第三长的耐力跑了,好好休整吧。
搞个运动手环,看看自己心肺承受的极限在哪里。
今天还是没忍住中午去801801801看了一下,其实只是想去隔壁休息室开空调躺沙发睡一觉,离开时路过801801801还是无可避免地看到了,天热了还是那件衣服。
唉,眼不见心不烦吧,也见不到几次了。
文章目录
- 序言
- @[toc]
- 摘要 Abstract
- 引入 Introduction
- 2 背景 Background
- 2.1 稀疏矩阵向量乘积 The sparse matrix-vector product
- 2.2 卷积神经网络 Convolutional neural networks
- 3 使用卷积神经网络建模稀疏矩阵向量乘法 Modeling SpMV using CNNs
- 3.1 方法论 Methodology
- 3.2 网络架构 Network architecture
- 4 实验评估 Experimental evaluation
- 4.1 数据集获取 Obtain the dataset
- 4.2 模型建立与调优 Building and tuning the models
- 4.3 训练过程 Training process
- 4.4 模型测试 Testing the models
- 4.5 跨架构的模型迁移 Cross-architecture model migration
- 5 相关工作 Related work
- 6 总结与展望 Conclusions and future work
- 致谢
- 参考文献
- 图表汇总
摘要 Abstract
- 对稀疏矩阵向量乘法(sparse matrix-vector multiplication,下简称为SpMV)在目前的CPU架构上进行建模是非常复杂的,原因有以下三点:
- 非常规的内存访问(irregular memory accesses);
- 间接的内存查询(indirect memory referencing);
- 低算术强度(low arithmetic intensity);
- 虽然解析模型(analytical models)可以生成缓存命中与丢失(cache hits and misses)的精确估计,但是这些模型往往无法精确预测总运行时间。
- 本文利用卷积神经网络(convolutional neural networks,下简称为CNNs)来提供对于SpMV运算操作性能的有效估计(区别于传统的解析方法)。
- 本文针对问题矩阵(problem matrix)展示一种稀疏模式(sparsity pattern)的高级抽象概念(high-level abstraction),并提出一个块级的策略(blockwise strategy)给CNNs模型进行输入(即输入一块块非零的元素)。
- 本文的实验评估是基于SuitSparse Matrix数据集进行的训练与测试,实验结果表明CNNs模型在预测SpMV上的性能具有鲁棒性。
- 关键词:
- 稀疏矩阵向量乘法(Sparse matrix–vector multiplication,SpMV);
- 性能建模(Performance modeling);
- 监督学习(Supervised learning);
- 卷积神经网络(Convolutional neural networks,CNNs);
引入 Introduction
SpMV是科学计算与工程应用中常常进行的操作,如在稀疏线性系统的迭代求解算法(如GMRES\text{GMRES}GMRES,共轭梯度)中就会大量涉及稀疏矩阵的运算。一些在数据分析处理中的应用,比如网页搜索引擎,信息检索等。
备注:
这里其实倒是和自然语言处理(Natural Language Processing,下简称为NLP)有点关联,简单举例比如给定一个文档库的词袋(wordbag)矩阵(即正向索引),即标注每个单词在每个文档中的出现次数,这样一个矩阵一般来说会是一个非常稀疏的矩阵,因为常用单词是非常少的,一般来说这种矩阵中非零元的数量不到1%1\%1%,一些相关的训练矩阵与测试矩阵可以在LIBSVM Data: Regression上找到,比如链接页面上的E2006-tfidf数据集就是一个非常典型的稀疏矩阵,如果我们在这种大规模的稀疏矩阵上执行最小二乘的迭代求解算法,如果使用矩阵的全量表示,一般来说是不太切实际的。
上述这些应用中,SpMV核是时间耗用最大的一个元素,如何估计SpMV的执行时间是困难的,难点正如摘要中提到的那样,这里做进一步的解释:
非常规的内存访问(irregular memory accesses);即低时间局部性(low temporal locality);
间接的内存查询(indirect memory referencing);即低空间局部性(local spatial locality);
低算术强度(low arithmetic intensity);
The arithmetic intensity is defined as the ratio of total floating-point operations to total data movement (in bytes)
备注:
关于时间局部性与空间局部性的定义可以参考时间局部性和空间局部性;
在CPU访问寄存器时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。
- 时间局部性:被引用过一次的存储器位置在未来会被多次引用。
- 空间局部性:如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
这个东向似乎很难理解,笔者是这样理解的,下面是一个生成1000×10001000\times 10001000×1000的稀疏矩阵XXX(稠密度为1%1\%1%):
import numpy as np import scipy.sparse as ss import matplotlib.pyplot as pltnum_col = 1000 num_row = 1000 num_ele = 10000 a = [np.random.randint(0, num_row) for _ in range(num_ele)] b = [np.random.randint(0, num_col) for _ in range(num_ele - num_col)] + [i for i in range(num_col)] c = [np.random.rand() for _ in range(num_ele)] rows, cols, v = np.array(a), np.array(b), np.array(c) sparseX = ss.coo_matrix((v,(rows,cols))) X = sparseX.todense() print(sparseX.shape) print(sparseX.count_nonzero()) print((np.dot(sparseX.T, sparseX).count_nonzero()))
笔者想测试的事情是X⊤XX^\top XX⊤X中稠密度如何,多次测试之后会发现X⊤XX^\top XX⊤X中包含的非零元大约是XXX中非零元的101010倍,即稠密度为10%10\%10%左右,这个事情就很有意思了,SpMV可能会使稀疏矩阵变得不稀疏,这种现象是很不好的,因为会极大的增加内存占用。而稀疏矩阵的全量表示在存储空间上是很不连续的,且很可能在多次运算迭代后稀疏矩阵的样子会变得很大(非零元位置变化),这可能是上述低时间局部性与低空间局部性的一种理解。
看到后面笔者又有了新的理解,考察y=Axy=Axy=Ax,其中AAA是一个稀疏矩阵,那么事实上在做乘法时相当于是将矩阵AAA的每一行与xxx相乘,因此xxx会被频繁的查询,但是我们不可能说将xxx的每一个元素都缓存,只有那些一段时间内被经常用到的x[i]x[i]x[i]才会被缓存,但是由于稀疏矩阵实在是太不规则,每一行的非零元位置迥异,因此很多时候缓存的x[i]x[i]x[i]很久都没有被用到,然后就被丢弃了,或者就是过了很久才被用到,那时候已经不在缓存中了。其实上一篇雅可比预条件子就是将稀疏矩阵转换为块状,这样就可以使得缓存命中的几率大大增加,因为同一雅可比块是相邻的若干行,这些行的非零元位置是相似的。
相关研究:
参考文献[3][4][3][4][3][4]发现典型的序列式SpMV实现方法总体上不超过商用微处理器上的机器峰值浮点速率的10%10\%10%(就是很慢呗);
最好的情况下,SpMV在FP32上的算法强度为0.50.50.5,这意味着算法性能主要受制于目标频台的峰值内存带宽(peak memory bandwidth);
其他对SpMV的性能有贡献的是非零稀疏模式(nonzero sparsity pattern)与稀疏矩阵的行密度(row-density in the sparse matrix);
参考文献[5][6][7][5][6][7][5][6][7]对SpMV的性能进行建模,这些解析式的模型,常常依赖于简化缓存替代策略与算法开销,总体上只能提供算术运算和内存占用的理论估计;
参考文献[8][8][8]指出这些分析需要对处理器有较深的理解以及对于SpMV的实现有详细地分析;
本文希望通过机器学习方法来(具体而言即使用CNNs)来捕获空间依赖与时间依赖;具体而言:
- 使用CNNs来对SpMV的执行时间进行建模(硬件为Intel Xeon core,存储格式为CSR);
- 使用块级实现(blockwise realization)来使得CNNs模型架构可以独立于稀疏矩阵的维度,从而有利于增加训练集与验证集的样本容量;
- 对基于CNNs的模型进行精确度评估以及鲁棒性论述,测试集来自真实应用(SuiteSparse Matrix collection)中的一个代表子集(representative subset);
- 将CNNs模型移植到ARM架构上对该模型的可扩展性进行了评估;
2 背景 Background
本节简要回归SpMV核(kernel)以及CNNs的一些知识,这些概念是本文提出的用于估计SpMV时间耗用的CNNs模型的基础。
2.1 稀疏矩阵向量乘积 The sparse matrix-vector product
考察SpMV运算:y=Axy=Axy=Ax,其中A∈Rm×nA\in\R^{m\times n}A∈Rm×n是稀疏矩阵,其中包含nnznnznnz个非零元;
x∈Rn×1x\in\R^{n\times1}x∈Rn×1是一个稠密的输入向量,y∈Rm×1y\in\R^{m\times 1}y∈Rm×1是稠密的输出向量;
一般来说矩阵AAA会以压缩格式存储,比如压缩稀疏行(Compressed Sparse Row,下简称为CSR),压缩稀疏列(Compressed Sparse Column,下简称为CSC),以及COO或ELLPACK等,本文使用的压缩格式为CSR,如Figure 1\text{Figure 1}Figure 1所示:
- vvalvvalvval数组长度为nnznnznnz,按照行优先的顺序依次记录所有非零元的数值;
- vptrvptrvptr数组长度为n+1n+1n+1,vptr[i+1]−vptr[i]vptr[i+1]-vptr[i]vptr[i+1]−vptr[i]的数值代表第iii行有多少个非零元;
- vposvposvpos数组长度为nnznnznnz,记录每个非零元的列索引;
备注:暂时没有搞明白nnznnznnz是什么东西,可能是作者勘误。好了,搞明白了,就是number of nonzeros\text{number of nonzeros}number of nonzeros的意思… 艹
Algorithm 1\text{Algorithm 1}Algorithm 1中展示了CSR的存储格式下SpMV核的实现:(其实就是怎么计算y=Axy=Axy=Ax)
2.2 卷积神经网络 Convolutional neural networks
本节内容略,主要是在讲卷积神经网络的最基础的知识,没有提到在数值计算领域的应用。
3 使用卷积神经网络建模稀疏矩阵向量乘法 Modeling SpMV using CNNs
- SpMV的内存受限(memory-bound)本质是源于矩阵AAA中低密度的非零元以及不规则的稀疏模式(irregular sparsity patterns),从而导致大量的缓存丢失(cache misses)。
- 考虑到这一点,vposvposvpos数组就显得非常重要(因为它存储了每个非零元的列索引,对应的就是xxx的索引,我们期望能够将那些列索引相似的行集中到一起处理,这样对xxx的缓存就变得有意义了)。
- 我们期望通过CNNs可以捕获到vposvposvpos数组中有用的特征,比如非零元之间距离的模式(pattern),这就可以通过每秒浮点运算速度/每秒峰值速度(float-point operations per second,下简称为FLOPS)与缓存命中/丢失(cache hits/misses)之间的关系生成对于SpMV的性能评估。
3.1 方法论 Methodology
Figure 2\text{Figure 2}Figure 2刻画了本文提出的用于解决SpMV建模的方法论:
目的是设计一个CNNs模型,模型输入为vposvposvpos数组;
然而考虑到稀疏矩阵AAA可能在形状以及非零元的数量(nnznnznnz)上存在较大差异,本文提出将vposvposvpos数组划分为块状(大小为bbb的块),以便于设计一个输入大小为常数的CNNs模型,这样模型即可无视稀疏矩阵的大小以及非零元的数量(nnznnznnz);
设tit_iti是矩阵AAA第iii个块上每个非零元的执行时间,则矩阵AAA的总执行时间Ttotal≈b∑i=1stiT_{\rm total}\approx b\sum_{i=1}^st_iTtotal≈b∑i=1sti,其中s=⌈nnzb⌉s=\left\lceil\frac{nnz}b\right\rceils=⌈bnnz⌉;
我们依次将vposvposvpos的每个块输入训练好的CNNs模型,根据模型输出可以得到对应每个块的执行时间;
若bbb无法被nnznnznnz整除,则最后一块b′<bb'<bb′<b直接丢弃掉即可;
本文的稀疏矩阵的nnznnznnz总是大于5M5\rm M5M,因此设定b=5000b=5000b=5000,因此至多有千分之一的块会被丢弃;
由于对vposvposvpos进行了分块,因此Algorithm 1\text{Algorithm 1}Algorithm 1中基于CSR的SpMV算法需要进行调整:
这种调整是用于为CNNs模型生成训练集,因为vposvposvpos的每一块都必须标注其对于每个非零元的执行时间;具体而言,输入矩阵AAA可以分解得到vposvposvpos数组的sss个块以及它们对应的每个非零元的执行时间(t[nnz]t[nnz]t[nnz]);
具体的调整后的块级算法见Algorithm 2\text{Algorithm 2}Algorithm 2:
- Algorithm 2\text{Algorithm 2}Algorithm 2中对于每个块,算法计算非零元与向量xxx中的对应位置元素的乘积,最终结果存储在输出向量yyy中(第141414与212121行);
- Algorithm 2\text{Algorithm 2}Algorithm 2中的计时部分为第111111行到第202020行;
3.2 网络架构 Network architecture
- 本文的CNNs模型是一个回归模型,而非预测模型;
- 本文的CNNs模型参考自若干先进的架构,如AlexNet,LeNet,VGG;
- 本文的模型架构表示:C表示卷积层,P表示池化层,因此可以用CPCP,CCPCCP来表示模型架构;
- 本文考虑使用dropout层来减少过拟合,一些情况下,正则化层会用在最后一个卷积层与池化层间来进行激活调整;
- 本文在网络的第二部分,使用全连接层(fully-connected,下简称为FC)来集中所有从CNNs部分中输出得到的特征,最终由FC进行最终的模型输出;
- 本文最终的设计两种不同的CNNs的架构:CNN-R1(CPCP)与CNN-R2(CCPCCP);
4 实验评估 Experimental evaluation
本节中将描述以下几项事宜:
- 训练集与测试集的生成;
- 本文提出的CNNs模型的超参数搜索(hyperparameter search);
- 模型训练过程,模型性能分析(根据验证集精确度以及损失函数相关的指标);
- 测试集评估结果;
- 模型的迁移;
实验硬件环境:
- The compute node where the networks were trained consisted of two Intel
Xeon E5-2698, with a total of 40 cores clocked at 2.20 GHz, and four
NVIDIA Tesla P100 GPUs with 16 GB of DRAM at 1.48 GHz intercon-
nected via NVLink. - The execution times corresponding to the SpMV operation were obtained first
on an Intel Xeon E5-2630 core at 2.40 GHz, hereafter referred to as HaSwell.
To test the model migration technique, the SpMV operation was then re-run
on an ARM Cortex-A57 core at 2.00 GHz embedded on a NVIDIA Jetson
TX2, hereafter a57.
- The compute node where the networks were trained consisted of two Intel
实验软件环境:
- Keras v2.2.4\text{Keras v2.2.4}Keras v2.2.4
- TensorFlow r1.10\text{TensorFlow r1.10}TensorFlow r1.10
- Hyperas v0.4.1\text{Hyperas v0.4.1}Hyperas v0.4.1
- 最终的ad hoc(点对点) SpMV\text{ad hoc(点对点) SpMV}ad hoc(点对点)SpMV基线模型是通过C\rm CC实现,编译器为GCC 5.3.0\text{GCC 5.3.0}GCC 5.3.0,optimization flags\text{optimization flags}optimization flags为usual\text{usual}usual;
模型训练与评估的流程图如Figure 3\text{Figure 3}Figure 3所示:
- 先输入大小为bbb的训练块进行超参数选择;
- 然后在训练块上进行训练;
- 然后在测试块上进行测试;
- 最后进行统计分析;
4.1 数据集获取 Obtain the dataset
训练集与测试集都是通过Algorithm 2\text{Algorithm 2}Algorithm 2生成得到的。
本文在SuiteSparse Matrix Collection(参考文献[18][18][18])中选择173173173个稀疏矩阵,非零元的数量在1M\rm 1M1M到10M\rm 10M10M之间。
其中108108108个用于训练,剩余656565用于测试,用于训练的部分中,划分出20%20\%20%作为验证集。
本文测试了不同的块大小(b∈{250,500,750,1000,3000,5000}b\in\{250,500,750,1000,3000,5000\}b∈{250,500,750,1000,3000,5000}),这样就可以生成大小不同的训练集,之所以不用b<250b<250b<250的数值,原因是此时执行时间会受inherent cache data locality effects影响而产生偏差。
4.2 模型建立与调优 Building and tuning the models
- 详见Table1\rm Table\space 1Table1,不做赘述,算是非常简单的模型了。
- 值得注意的是倒数两行的百分数,这些是给定超参数被Hyperas\text{Hyperas}Hyperas选择的次数的百分数,称为percentage of choice,这个笔者也不是很熟,可能需要去看一下Hyperas\text{Hyperas}Hyperas的文档。
4.3 训练过程 Training process
五折(与上文20%20\%20%验证集对应)交叉验证(注意虽然数据集中的矩阵数量有限,但是每个矩阵都会分块成100010001000个块,所以数据集还是比较大的)。
Figure 4a\text{Figure 4a}Figure 4a是验证集上的损失函数(MSE\rm MSEMSE),单位就是s2\rm s^2s2(平方秒);
Figure 4b\text{Figure 4b}Figure 4b是b=250b=250b=250的训练过程中训练集与验证集的损失函数变化情况(505050轮);
4.4 模型测试 Testing the models
模型测试的指标是相对平均误差(relative mean error,下简称为RME):
RME=1p∑i=1p∣predictedi−measuredi∣measuredi\text{RME}=\frac1p\sum_{i=1}^p\frac{|\text{predicted}_i-\text{measured}_i|}{\text{measured}_i} RME=p1i=1∑pmeasuredi∣predictedi−measuredi∣具体测试结果见Figure 5\text{Figure 5}Figure 5与Figure 6\text{Figure 6}Figure 6:
- Figure 5\text{Figure 5}Figure 5是不同块大小下的测试误差;
- Figure 6\text{Figure 6}Figure 6是补充实验的结果,即分别取Figure 5\text{Figure 5}Figure 5中两个CNNs对应测试误差最小的块大小又做了各种不同指标的测试结果(闲得蛋疼…);
4.5 跨架构的模型迁移 Cross-architecture model migration
本文为了验证CNNs模型的广泛适用性,将模型移植到不同架构上。
备注:
这里我理解是移植到不同的硬件架构上,而不是什么别的模型迁移,因为本文是在一种硬件上进行测试,运行时间跟硬件是关系很大的,但是这个事情就很离谱,如果硬件的底层逻辑相同,当然可以迁移,如果不同,又有什么意义呢?
Figure 7\text{Figure 7}Figure 7中展示的是在A57\text{A57}A57处理器上结果:
Figure 8\text{Figure 8}Figure 8即对应的A57\text{A57}A57处理器上的辅助实验结果:
5 相关工作 Related work
- 关于CNNs,Keras和Tensorflow的部分直接略过。(参考文献[13,14][13,14][13,14]分别是Keras和Tensorflow,参考文献[10,21,22][10,21,22][10,21,22]是CNNs的应用领域)
- 然后非常巧,本文刚好提到了笔者刚做的上一篇笔注的论文(参考文献[23][23][23]),即将稀疏矩阵作为图片来进行雅可比预条件子的预测。
- 参考文献[24][24][24]是使用CNNs来选取用于在SpMV中存储稀疏矩阵的最充分形式(most adequate storage format);
- 参考文献[25][25][25]是使用CNNs来确定SpMV的最优实现方法。
- 参考文献[26][26][26]也是类似的工作,不过不是将稀疏矩阵作为图片输入,而是经过预处理后只输入稀疏特征,然后预测SpMV的最好形式(best format);
- 参考文献[27][27][27]:使用MLPs进行算法性能的预测;
- 参考文献[28][28][28]:使用MLPs进行GPU上SpMV核的性能进行预测(不同的矩阵存储格式);
- 本文的创新点:
- 使用CNNs而非MLPs;
- 直接输入稀疏矩阵架构,而非与稀疏矩阵相关的矩阵指标;
- 块级处理的策略使得模型具有更好的延展性,且可以适应不同大小的矩阵和不同数量的非零元;
6 总结与展望 Conclusions and future work
- 测试集的RME约为1%1\%1%到7%7\%7%;
- 迁移到A57\text{A57}A57上后,误差增长到15%15\%15%;
- 其实说实在的,这种生搬硬套VGG,AlexNet,LeNet\rm VGG,AlexNet,LeNetVGG,AlexNet,LeNet的方法真的有科学依据吗?
致谢
This work was supported by project TIN2017-82972-R from the MINECO, Spain. Manuel F. Dolz was also supported by the Plan GenT project CDEIGENT/2018/014 from the Generalitat Valenciana, Spain. Maria Barreda was also supported by the POSDOC-A/2017/11 project from the Universitat Jaume I.
参考文献
- Abdelfattah A, Ltaief H, Keyes D (2015) High performance multi-GPU SpMV for multi-component PDE-based applications. In: Träff JL, Hunold S, Versaci F (eds) Euro-Par 2015: parallel processing. Springer, Berlin, pp 601–612
- Schiesser WE (2014) Computational mathematics in engineering and applied science: ODEs, DAEs, and PDEs. CRC Press, Boca Raton
- Vuduc R, Demmel JW, Yelick KA (2005) OSKI: a library of automatically tuned sparse matrix kernels. J Phys Conf Ser 16:521–530
- Williams S, Oliker L, Vuduc R, Shalf J, Yelick K, Demmel J (2007) Optimization of sparse matrix–vector multiplication on emerging multicore platforms. In: SC ’07: Proceedings of the 2007 ACM/IEEE Conference on Supercomputing, pp 1–12
- Elafrou A, Goumas G, Koziris N (2017) Performance analysis and optimization of sparse matrix–vector multiplication on modern multi- and many-core processors. In: 2017 46th International Conference on Parallel Processing (ICPP), pp 292–301
- Li S, Chang H, Zhang J, Zhang Y (2015) Automatic tuning of sparse matrix–vector multiplication on multicore clusters. Sci China Inf Sci 58(9):1–14
- Guo P, Wang L (2015) Accurate cross-architecture performance modeling for sparse matri–vector multiplication (SpMV) on GPUs. Concurr Comput Pract Exp 27(13):3281–3294
- Li K, Yang W, Li K (2015) Performance analysis and optimization for SpMV on GPU using probabilistic modeling. IEEE Trans Parallel Distrib Syst 26(1):196–205
- Eijkhout V, Pozo R (1994) Data structures and algorithms for distributed sparse matrix operations. Technical report
- Gu J, Wang Z, Kuen J, Ma L, Shahroudy A, Shuai B, Liu T, Wang X, Wang G, Cai J, Chen T (2018) Recent advances in convolutional neural networks. Pattern Recognit 77©:354–377
- Glorot X, Bordes A, Bengio Y (2011) Deep sparse rectifier neural networks. In: Gordon G, Dunson D, Dudík M (eds) Proceedings of the Fourteenth International Conference on Artificial Intelligence and Statistics, volume 15 of Proceedings of Machine Learning Research. Fort Lauderdale, FL, USA, 11–13. PMLR, pp 315–323
- Ioffe S, Szegedy C (2015) Batch normalization: accelerating deep network training by reducing internal covariate shift. In: Proceedings of the 32nd International Conference on International Conference on Machine Learning, Volume 37 (ICML’15). JMLR org, pp 448–456
- Keras: The Python Deep Learning library. https
【数值分析×机器学习】稀疏矩阵向量乘(SpMV)的运行时间预测(有点意思)相关推荐
- 稀疏矩阵向量乘(SpMV)
单精度稀疏矩阵向量乘(SpMV):Arm & GPU CPU版本(单节点) 串行优化 向量化编译选项 循环展开 CSRL格式 分块COO格式 基于OpenMP并行改写 基于MPI并行改写 CS ...
- 【数值分析×机器学习】以SVD的分解形式进行深度神经网络的训练(逐渐熟练)
英文标题:Learning Low-rank Deep Neural Networks via Singular Vector Orthogonality Regularization and Sin ...
- svm分类器训练详细步骤_「五分钟机器学习」向量支持机SVM——学霸中的战斗机...
大家好,我是爱讲故事的某某某. 欢迎来到今天的[五分钟机器学习]专栏内容 --<向量支持机SVM> 今天的内容将详细介绍SVM这个算法的训练过程以及他的主要优缺点,还没有看过的小伙伴欢迎去 ...
- 机器学习——支持向量回归(SVR)
机器学习--支持向量回归(SVR) educoder平台练习题 如果博客中图片加载失败可点击链接跳转至实训详情 https://www.educoder.net/shixuns/b6yi97f2/ch ...
- SLS机器学习介绍(05):时间序列预测
00系列文章目录 0.1 算法原理目录 SLS机器学习介绍(01):时序统计建模 SLS机器学习介绍(02):时序聚类建模 SLS机器学习介绍(03):时序异常检测建模 SLS机器学习介绍(04):规 ...
- 机器学习(二)多元线性回归算法预测房价
机器学习(二)多元线性回归算法预测房价 本篇文章已作为重庆交通大学19级微课<机器视觉>大作业提交,提前声明,避免抄袭误会 "garbage in garbage out&quo ...
- 数据科学与机器学习案例之客户的信用风险与预测
数据科学与机器学习案例之客户的信用风险与预测 项目来源 数据处理 机器学习算法 逻辑回归 所有特征 特征选择 glmnet svm 总结 项目来源 分享的项目是来源于暑期实习的一些心得,研究的问题是客 ...
- 基于机器学习的航空公司客户价值分析与流失预测
温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目背景 面对激烈的市场竞争,各个航空公司相继推出了更优惠的营销方式来吸引更多的客户,国内某航空公司面临着常旅 ...
- Python实现经典机器学习案例 良/恶性性乳腺癌肿瘤预测
Python实现经典机器学习案例 良/恶性性乳腺癌肿瘤预测 首先给出数据下载地址 http://note.youdao.com/groupshare/?token=C6B145FA919F41F8AC ...
最新文章
- 2022-2028年中国内衣用热熔胶膜行业发展现状调查及市场分析预测报告
- 软件测试黑盒测试实验心得_软件测试的基础知识
- 宏观经济学思维导图_巧用思维导图,提升初三化学专题复习课实效
- Notification详解
- mysql 层级 统计_MySQL系列(7)
- how to find your partner
- 如何实现省市关联的下拉列表
- 线性回归之最小二乘法——收藏
- 工业交换机ERPS环网协议工作原理介绍
- leetcode237题解
- 百度云安装mysql_mysql5.7 安装版本配置教程+百度云资源分享
- 判断两线段相交[nyoj 1016 德莱联盟]
- 搭建嵌入式开源开发环境
- Win10搭建我的世界Minecraft服务器「内网穿透远程联机」
- 初学者完成HBuilder X网站制作
- Git和小乌龟的下载安装及简单使用
- linux通过mailx发送邮件
- 深圳大学 (2020) 研究生基础综合英语口语测试
- java jsp eq_javaWeb核心技术第九篇之JSP
- 微软账户登不上解决方案
热门文章
- SSL证书部署后,为什么还是显示不安全?
- 【算法】详解二分查找算法(思路很简单,细节是魔鬼)
- phar的认识与使用
- 实习手册一(Python基于Tornado框架的接口响应服务)软件下载与环境配置
- 太原理工大学计算机科学与技术在哪个校区,太原理工大学有几个校区及校区地址...
- cobertura的使用
- 网络营销的新一员:微信营销
- AD使用总结--2__PCB中各层作用详解
- Swift5仿某宝购物车
- ubuntu 找不到mysql.h_ubuntu安装了mysql 但是编译报错 mysql.h: No such file or directory