- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经常在tensorflow代码中看到transpose的实现。我想知道为什么有人会想要将 NHWC 张量转置为 NCHW。请给我一个很好的例子及其背后的原因。
最佳答案
而不是引用文档。您应该阅读 CUDA 的工作原理并思考如何实现大多数操作。
NCHW 通常比 NHWC 更快的原因是 CUDA 内核的编写方式。在 CUDA 中你需要指定每个线程在做什么
const int threads = 32;
dim3 block(threads, threads);
dim3 grid(up2(W / 2, threads), up2(H, threads), B);
kernel<Dtype> <<< grid, block>>> (args ...)
这里有 3 个索引 threadId.z, threadId.y, threadId.x
。这些线程被组织成 warp(硬件设计)。
并且您想要合并内存事务,这意味着线程的排序方式使 GPU 可以很好地快速运行。
总结一下:你想让“threadId.x”成为最内循环,你应该组织数据布局,以便它以合并的方式读取它们。理想的数据结构应该可以访问
b * C * H * W + c * H * W + h * W + w
其中小写字母表示索引,大写字母表示形状(例如,0 <= w < W)。
在卷积运算(最常用层的一部分)中,您实际上是在每个 channel 中裁剪一个区域,计算与另一个 channel 中的一个区域(来自另一个张量)的点产生。所以需要快速运行的索引是 height-idx 和 width-idx。最后,您将沿 channel 轴添加(如卷积公式所建议的那样)。这也解释了为什么考虑 NWHC、NCWH 没有区别。
这会影响您对数据的排序方式。这就是您想要我上面描述的内存布局的原因。
最糟糕的布局是:
H, C, B, in threadId.z, threadId.y, threadId.x
最好的布局是:
B, C, H in threadId.z, threadId.y, threadId.x
对于 GEMM 也是(大部分)也是如此(这里一个矩阵应该是转置的)。没有可用的 CuDNN 源。但您可能有兴趣调查 cutlass .
关于tensorflow - 将张量从 NHWC 转置到 NCHW 有什么充分的理由吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48439017/
在tensorflow中,使用函数tf.summary.image,我们可以在tensorboard中显示图像。 image( name, tensor, max_outputs=3, collect
我在 GPU 上训练了我的 NCHW 模型并保存了最佳状态。 我现在想对 CPU 进行推断,它显然只支持 NHWC(我得到了一个错误提及)。 我是否必须使用 NHWC 重新训练我的模型,或者有没有办法
经常在tensorflow代码中看到transpose的实现。我想知道为什么有人会想要将 NHWC 张量转置为 NCHW。请给我一个很好的例子及其背后的原因。 最佳答案 而不是引用文档。您应该阅读 C
在 pytorch 中,我们需要 NCHW 格式的图像,但我的图像是 NHWC。 将此图像输入 CNN 的程序是什么? (我发现 this solution 建议使用“permute”,但我应该在哪里
将张量从 NHWC 格式转换为 NCHW 格式(反之亦然)的最佳方法是什么? 是否有专门执行此操作的操作,或者我需要使用拆分/连接类型操作的某种组合? 最佳答案 您需要做的就是将维度从 NHWC 排列
正在关注 Tensorflow's best practices for performance ,我正在使用 NCHW 数据格式,但我不确定要在 tensorflow.nn.conv2d 中使用的过
The official TensorFlow performance guide指出: Most TensorFlow operations used by a CNN support both N
我目前正在尝试为 OCR 任务训练 CRNN(卷积循环神经网络)。我通常保持默认的数据格式,即 NHWC( channel 最后)。但是由于一些部署限制,我想使用 NCHW( channel 优先)数
我是一名优秀的程序员,十分优秀!