tensorflow - 我应该对 3D 灰度图像使用 2D 还是 3D 卷积?

标签 tensorflow machine-learning conv-neural-network tpu

我正在使用一个 TFRecord 数据集,该数据集由 3D 对象横截面的多个灰度图像组成,最终形状为 [32, 256, 256]。 32的尺寸代表横截面的数量,它明显小于其他尺寸。

因此,我想知道是否可以将数据视为具有 32 个 channel 的 2D 数据,而不是将数据视为具有一个 channel 的 3D 数据,这尤其有助于所需的计算资源。我现在在 Google Colab 中将 TensorFlow 与 TPU 结合使用,并且使用 tf.layers.conv2d 而不是 tf.layers.conv3d 可以通过减少填充来节省大量内存.

这两种方法之间是否有任何显着差异,或者是否有我应该遵循的约定?使用 conv2d 会以任何方式损害我的准确性吗?

最佳答案

与完全连接的 2D 层相比,卷积层的主要好处之一是权重是 2D 区域的局部权重,并在所有 2D 位置(即滤波器)上共享。这意味着图像中的辨别模式即使出现多次或出现在不同位置,也只能被学习一次。 IE。它对翻译有一定的不变性。

对于 3D 信号,您需要确定是否需要滤波器输出对深度不变,也就是说,区分性特征可能出现在图像中的任何一个或多个深度处,或者特征的深度位置是否存在是相对固定的。前者需要 3D 卷积,后者则可以使用具有大量 channel 的 2D 卷积。

例如(这是我编的 - 我没有研究过),假设您对某人的肺部进行了 3D 扫描,并且您正在尝试对是否存在肿瘤进行分类。为此,您需要 3D 卷积,因为代表“肿瘤”的滤波器组合需要对该肿瘤的 X、Y 和 Z 位置保持不变。如果在这种情况下使用 2D 卷积,则训练集必须在所有不同 Z 位置都有肿瘤的示例,否则网络将对 Z 位置非常敏感。

顺便说一句:CNN 与 LSTM 是另一种处理 3D 数据的方法。

关于tensorflow - 我应该对 3D 灰度图像使用 2D 还是 3D 卷积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58897321/

相关文章:

machine-learning - 为什么我只能通过 tf.nn.conv2d 获得一个 channel 输出?

python - Tensorflow 对象检测 API 训练和导出图

tensorflow - 通过 Google Cloud ML 部署 Keras 模型

machine-learning - 使用占位符作为 tensorflow 变量(出现错误!)

machine-learning - 逻辑回归分类器训练计数

machine-learning - 用于预测文本的二元模型

tensorflow - 是否可以使可训练变量不可训练?

tensorflow - 在 Keras 中定义 steps_per_epoch

machine-learning - 卷积核是预定义的还是 CNN 在训练期间定义它们

tensorflow - 与 tf.nn.conv2d_transpose 相比,为什么 tf.keras.layers.Conv2DTranspose 不需要 output_shape?