tensorflow && caffe conv2D GPU版

clipboard.png

图片来自论文:https://hal.archives-ouvertes.fr/file/index/docid/112631/filename/p1038112283956.pdf


caffe 跟 tensorflow对二维卷积的实现都是基于im2col的思路,上两图为caffe的实现,输入格式采用的是NWHC,tensorflow的原理基本相同,但在最后的实现中,采用的都是NCWH格式,所以在gen_nn_ops中矩阵的维度跟上图有一些不同,即把卷积操作转化为矩阵的乘法运算,而矩阵的乘法运算在【cuda C 编程手册】中介绍的很清晰了,用tiled算法很容易可以完成加速,运算速度非常快。
tensorflow的源码脉络:

tf.contrib.slim.conv2d
----tf.contrib.layers.conv2d
--------tf.layers.conv2d()
------------tf.nn.conv2d()
----------------tf.nn_ops.conv2d(...) 
--------------------tf.gen_nn_ops.conv2d(...) (文件编译自动生成,害我在github上找了半天)
--------------------_op_def_lib.apply_op("Conv2D", ...) 

最后的实现用C++在文件conv_ops.cc中(尼玛,套这么多层有毛意思):
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/conv_ops.cc
tensorflow的python接口中,大部分常用的深度神经网络算子都是在tf.nn中实现的,也是python接口中最底层的,一些其他的应用在上边做了一些其他的封装,比如 models中的slim,keras等,来看下tf.gen_nn_ops.conv2d(...)具体是怎么实现的卷积操作:


除了给出卷积层的实现,还有卷基层的梯度计算实现:



最后用的cudnn函数库实现。

到了矩阵乘法,剩下的用cuda来做就比较容易实现了【cuda C 编程手册】或者上篇简书【cuda 矩阵乘法运算并行】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CNN on TensorFlow 本文大部分内容均参考于: An Intuitive Explanation o...
    _Randolph_阅读 7,727评论 2 31
  • 从古至今,状元们极多,留名极少,为何? 第一份名单:傅以渐、王式丹、毕沅、林召堂、王云锦、刘子壮、陈沆、刘福姚、刘...
    独行侠者阅读 1,301评论 0 2
  • 今天是7月的第一天,距离2017年的司法考试只剩下不到80天了。而此时此刻,我才刚刚上完经济法的精讲视频,还有历年...
    大叔开始留胡子了阅读 325评论 0 0
  • 今天心情特别好!第一次收到粉丝来消息问问题!呵呵,我可能有点大惊小怪了,不过很开心的,欢迎欢迎热烈欢迎!可惜我现在...
    海归程序猿奶爸阅读 9,276评论 2 1
  • 她的世界满是怀疑他的世界都是真理她的世界平稳一杯水他的世界洒落半吊子虚伪她的世界要有冒险和危险他的世界要是安稳和今...
    易长安_阅读 255评论 0 0