欢迎来到天天文库
浏览记录
ID:27866602
大小:163.00 KB
页数:12页
时间:2018-12-06
《各深度学习框架之间性能差异比较分析.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、各深度学习框架之间性能差异比较分析 微软数据科学家IliaKarmanov最新测试的结果显示,亚马逊MXNet在CNN、RNN与NLP情感分析任务上性能强劲,而TensorFlow仅擅长于特征提取。 项目内的测试代码并非专门为深度学习性能而编写,目的仅在于简单比较一下各框架之间的性能差异。 以下为该项目详情。 我们做这个榜单的初衷是为了好玩,所以省略了很多重要部分的比较。比如:帮助和支持,自定义图层(可以创建一个胶囊网络吗?),数据加载器,调试,不同的平台支持,分布式训练等等。 我们不确定是否能对框架的整体性能提出
2、任何建议,因为本项目主要还是在演示如何在不同的框架中创建相同的神经网络。 例如,使用Caffe2在Python中创建CNN,然后在Julia中使用KNet复制这个网络,或者也可以在PyTorch中尝试创建一个RNN并在Tensorflow中复制它。你可以在Chainer中进行一些特征提取,然后在CNTK中复制这个操作。 因为MicrosoftAzure深度学习虚拟机NC6上的框架已经更新到了最新版本,所以notebooks代码选择在上面运行,仅占用了显卡NvidiaK80GPU一半的性能。 测试目标 创建深度学习框架的R
3、osettaStone(译者注:一个非常好用的外语学习软件),使数据科学家能够轻松地将他们的专业知识从一个框架转移到另一个框架(通过翻译,而不是从头开始学习)。另外,是为了更加透明地在模型训练时间和默认选项方面进行比较。 许多在线教程使用非常低级别的API,虽然这些API非常详细,但对于大多数用例来说,并没有多大意义,因为大多数时候有更高级别的帮助程序可用。在这里,我们直接忽略冲突的默认值的条件下,尝试采用最高级别的API,以便在框架之间进行更容易的比较。 下面的结果将证明,一旦使用更高级的API,代码结构变得非常相似,并且
4、可以粗略地表示为: 加载数据;x_train,x_test,y_train,y_test=cifar_for_library(channel_first=?,one_hot=?) 生成CNN/RNN网络结构(通常在最后一层上不激活) 指定损失函数(交叉熵与softmax是一起指定的),优化器并初始化网络权重+会话 用mini-batch的方式来训练训练集并使用自定义迭代器(所有框架都使用公共的数据库) 在测试集的mini-batch上面进行预测计算准确率 本质上,我们是在比较一系列确定性的数学运算(尽管是随机初始化)
5、,所以比较跨框架的准确性就是没有意义了。相反,它会提示我们去检查想要的匹配(?),以确保我们正在比较的是相同的模型架构。 测试结果 在CIFAR-10数据集上训练CNN(VGG类型)网络 性能对比-图像识别 该模型的输入是标准的CIFAR-10数据集,包含五万个训练图像和一万个测试图像,均匀分布在10个类别中。每个32×32像素的图像转化为张量的形式(3,32,32),像素值从0-255归一化到0-1。例如:汽车图像的相关参数y=(0,1,0,0,0,0,0,0,0,0),其标签是=[飞机,汽车,鸟,猫,
6、鹿,狗,青蛙,马,船,卡车] 在IMDB数据集上训练RNN(GRU,门控循环单元) 性能对比-自然语言处理(情感分析) 这个模型的输入是标准的IMDB电影评论数据集,包含两万五千个训练评论和两万五千个测试评论,统一分为2个等级(正面/负面)。下载的评论已经是单词索引的张量形式,例如(如果你喜欢像南方公园这样的成人喜剧漫画)将被表示为(123456378)。 遵循Keras框架的处理方法,其中起始字符被设置为1,词汇外(使用3万大小的词汇库)被表示为2,因此词索引从3开始。通过零填充/截断的方式,把每条评论都固定到15
7、0个字。 在可能的情况下,我会尝试使用cudnn的方式来优化RNN(由CUDNN=True开关来控制),因为我们有一个可以轻易降低到CuDNN水平的简单的RNN。例如,对于CNTK,我们使用optimized_rnnstack而不是Recurrence(LSTM())函数。虽然它不太灵活,但是速度要快得多。 例如,对于CNTK,我们不能再使用类似层归一化的更复杂的变量。在PyTorch中,这是默认启用的。但是对于MXNet,我无法找到这样的RNN函数,而是使用稍慢的FusedRNN函数。 Keras最近刚得到了cudnn的
8、支持,但是只有Tensorflow后端可以使用(而不是CNTK后端)。Tensorflow有许多RNN变种,其中包括他们自己定制的内核。这里有一个很好的基准,我将尝试更新使用CudnnLSTM的样例而不是当前的方法。 注:CNTK框架是支持动态轴,这意味着我们
此文档下载收益归作者所有