TVM不用多解释了,深度学习领域的编译器,直接从其他框架训练好的模型编译到目标平台上的可执行代码,速度和显存的都有大幅优化,该项目目前由DMLC组维护,正在快速迭代中。
原先我组的模型线上部署都是采用Caffe2+ONNX的形式,近来想进一步控制成本,TVM无疑能够满足我们的需求。但是,由于我组最近使用的模型se_resnet_101_ibn_a中包含了一个instance_norm
和batch_norm
融合的特殊结构(IBN结构可参考该论文),而目前TVM暂不支持instance_norm
,所以只能自己来进行实现了。
几年前,我写过一个关于t-SNE
原理的介绍博客,在日常的工作中,涉及到数据可视化的时候一般都会想到去使用这个工具。但是使用归使用,大部分人却很少去思考为什么要用t-SNE
,怎样“正确”的使用t-SNE
。有的同学可能会觉得奇怪,就一个可视化分析的方法而已,怎么还涉及到了用法的“正确”与“错误”了呢?事实上,正是因为很多人对t-SNE
的细节不甚了解,将其他传统的可视化方法的认知套用在了t-SNE
上,犯了错误还浑然不知,进而得出了一些看似正确合理的结论。
在上一篇文章中,我们介绍了多种解释CNN模型的分类结果的方法,也提到了他们共同的局限性:当模型对我们来说完全为一个黑盒时就无能为力了。针对这个问题,本文介绍另一套办法,即使我们对模型一无所知也能够对它的行为作出解释。
在当前深度学习的领域,有一个非常不好的风气:一切以经验论,好用就行,不问为什么,很少深究问题背后的深层次原因。从长远来看,这样做就埋下了隐患。举个例子,在1980年左右的时候,美国五角大楼启动了一个项目:用神经网络模型来识别坦克(当时还没有深度学习的概念),他们采集了100张隐藏在树丛中的坦克照片,以及另100张仅有树丛的照片。一组顶尖的研究人员训练了一个神经网络模型来识别这两种不同的场景,这个神经网络模型效果拔群,在测试集上的准确率竟然达到了100%!于是这帮研究人员很高兴的把他们的研究成果带到了某个学术会议上,会议上有个哥们提出了质疑:你们的训练数据是怎么采集的?后来进一步调查发现,原来那100张有坦克的照片都是在阴天拍摄的,而另100张没有坦克的照片是在晴天拍摄的……也就是说,五角大楼花了那么多的经费,最后就得到了一个用来区分阴天和晴天的分类模型。
(代码见文末)
在上一篇文章《复杂网络大师赛第四名技术分享(篇一:思路与分析)》中,我们大概介绍了一下这次复杂网络大师赛的基本情况,并简要的分析了官方的评价算法和我自己的思路。其中很重要的一个环节就是利用官方的评价算法来优化节点重要性的序列,但是这个方法有一个硬伤,就是对评价算法的效率要求非常高。而官方提供的groovy
版本仅仅用来计算鲁棒值还好,如果想在它的基础上进行改造,用于寻找更优的序列就有点不切实际了。
复杂网络一直是个很有意思的领域,虽然它现在没有深度学习那么火爆,但这么多年来一直在稳步的发展,更是与人们生活的方方面面都息息相关,计算机科学自然不用多说,物理化学、生物医药甚至传播学都有复杂网络的应用场景。而且,复杂网络的论文大多都发表在物理相关的期刊上,这也侧面说明了复杂网络和物理学的紧密联系。