【问题标题】:How to encode data for a 3D CNN network on keras?如何在 keras 上为 3D CNN 网络编码数据?
【发布时间】:2021-03-27 20:44:43
【问题描述】:

我目前正在处理以下数据(对应于蛋白质结构文件,pdb):

  • 以一个给定点为中心的坐标。
  • 限制为 3D 框 20 * 20 * 20,我将其分解为 0.5 * 0.5 * 0.5 的体素(意味着我的尺寸为 404040),这意味着我有64 000 个体素的“网格”。
  • 每个框都是独立的,并且以相同的方式配置(每次都有一个 XYZ 轴和中心相同)
  • 给定体素中的每个点都有 20 个给定值之一(对应于之前二值化的标签)

这个想法是创建一个 3D CNN 网络,其中给定一个盒子及其里面的内容,网络输出将预测对应于 202020 盒子类型的 20 个类。为此,网络的输入形状应该是 4D,这就是我对如何编码我的 numpy 数组有一些疑问:

(N, 64000*3, 20) ==> (N, ?,?,?, 20) (我放置每个坐标的情况)

如何以一种通过坐标封装每个点的方式进行编码?

【问题讨论】:

  • 回答我自己,编码其实很简单:(N, 64000, 23) ==> (N, 40, 40, 40, 23)
  • 我昨天发布了一个答案,但不久后将其删除,因为它似乎很明显:)。无论如何,我现在取消删除它。

标签: python numpy tensorflow keras


【解决方案1】:

来自 keras API 的 documentation 在 Conv3D 层上关于输入形状(这是层的必需关键字)

5+D 张量,形状:batch_shape + (channels, conv_dim1, conv_dim2, conv_dim3) if data_format='channels_first' 或 5+D 张量,形状:batch_shape + (conv_dim1, conv_dim2, conv_dim3, channels) if data_format=' channels_last'。

这意味着在每个样本中,您需要指定立方体的 3 个输入维度,在您的情况下,这将等于形状 (40,40,40)(哪些元素将按体素大小进行缩放)并且将有 20输入通道。

这意味着输入形状将等于: (N, 64000*3, 20) ==> (N, 40, 40, 40, 20)

Conv3D 层的输出形状将由卷积过滤器确定。过滤器将有 5 个维度:3 个与内核形状对齐的卷积维度,以及输入和输出维度。但是 keras 会为您处理这些尺寸,因此无需指定它。 Conv3D 层(过滤器)的第一个参数是输出维数。您还需要指定内核形状或大小,通常是输入尺寸的一小部分(例如(4,4,4))。

对于您的任务,网络输出将是一个 softmax 层,通常包括一些中间层,例如 maxpool 或 ReLU。

【讨论】:

  • 是的,这正是我考虑后的结果。我什至要补充一点,最后,我没有保留坐标有两个主要原因,首先是 20 个向量值(实际上对应于二值化标签)与坐标之间的权重差异,其次是因为它是一个带有体素的 conv3D,坐标将被隐式学习(在我的情况下,因为每个坐标对应于那些体素的中心,在这些体素中检查坐标是否在体素中)。非常感谢您的回答,它确认它按我想的方式工作
猜你喜欢
  • 2018-08-03
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多