zoukankan      html  css  js  c++  java
  • Caffe、Tensorflow和Pytorch通道维度顺序小结

    N: batch;

    C: channel

    H: height

    W: width

    Caffe 的Blob通道顺序是:NCHW;

    Tensorflow的tensor通道顺序:默认是NHWC, 也支持NCHW,使用cuDNN会更快;

    Pytorch中tensor的通道顺序:NCHW

    TensorRT中的tensor 通道顺序: NCHW

    numpy image: H x W x C
    torch image: C X H X W

    目前世面上深度学习框架比较多,常用的有三大类:Caffe、Tensorflow和Pytorch,这三种深度学习框架都主要在英伟达显卡上面进行训练和测试,很奇怪的是,它们之间的通道维度顺序并没有保持一致,在多个框架中替换着使用,很容易让人混淆了,所以做一个小结。

    Caffe 的通道顺序是NCHW;

    Tensorflow的通道顺序默认是NHWC(但可以设置成NCHW),NHWC 的访存局部性更好(每三个输入像素即可得到一个输出像素),NCHW 则必须等所有通道输入准备好才能得到最终输出结果,需要占用较大的临时空间。

    TensorFlow 为什么选择 NHWC 格式作为默认格式?因为早期开发都是基于 CPU,使用 NHWC 比 NCHW 稍快一些(不难理解,NHWC 局部性更好,cache 利用率高)。

    NCHW 则是 Nvidia cuDNN 默认格式,使用 GPU 加速时用 NCHW 格式速度会更快(也有个别情况例外)。

    最佳实践:设计网络时充分考虑两种格式,最好能灵活切换,在 GPU 上训练时使用 NCHW 格式,在 CPU 上做预测时使用 NHWC 格式。

    Pytorch的通道顺序是NCHW

    参考链接:https://blog.csdn.net/edward_zcl/article/details/102661617

    原文链接:https://blog.csdn.net/u013289254/article/details/105278293


    以pytorch为例,注意:

    torch.nn只支持小批量处理(mini-batches)。整个torch.nn包只支持小批量样本的输入,不支持单个样本的输入。

    比如,nn.Conv2d 接受一个4维的张量,即nSamples x nChannels x Height x Width

    如果是一个单独的样本,只需要使用input.unsqueeze(0)来添加一个“假的”批大小维度。




    如果这篇文章帮助到了你,你可以请作者喝一杯咖啡

  • 相关阅读:
    javascript中有关this的解析题
    变量声明
    js事件
    js用法
    dom对象
    数据的三大储存格式
    函数
    全局环境
    循环语句及案例
    条件语句
  • 原文地址:https://www.cnblogs.com/sddai/p/14447105.html
Copyright © 2011-2022 走看看