Python 如何为keras上的3D CNN网络编码数据?
我目前正在处理数据(对应于蛋白质结构文件,pdb),即:Python 如何为keras上的3D CNN网络编码数据?,python,numpy,tensorflow,keras,Python,Numpy,Tensorflow,Keras,我目前正在处理数据(对应于蛋白质结构文件,pdb),即: 以一个给定点为中心的坐标 限制为3D框20*20*20,我将其分解为0.5*0.5*0.5的体素(意味着我的尺寸为404040),意味着我的“网格”为64000个体素 每个框都是独立的,并且以相同的方式配置(每次XYZ轴和中心相同时) 给定体素中的每个点具有20个给定值中的一个(对应于之前二值化的标签) 其想法是创建一个3D CNN网络,其中给定一个盒子及其内部内容,网络输出将预测对应于202020盒子类型的20个类别。要做到这一点,
- 以一个给定点为中心的坐标
- 限制为3D框20*20*20,我将其分解为0.5*0.5*0.5的体素(意味着我的尺寸为404040),意味着我的“网格”为64000个体素
- 每个框都是独立的,并且以相同的方式配置(每次XYZ轴和中心相同时)
- 给定体素中的每个点具有20个给定值中的一个(对应于之前二值化的标签)
(40,40,40)
(哪些元素将按体素大小缩放),并且将有20个输入通道
这意味着输入形状将等于:
(N,64000*3,20)==>(N,40,40,40,20)
Conv3D层的输出形状将由卷积过滤器确定。该过滤器将有5个维度:3个与内核形状对齐的卷积维度,以及输入和输出维度。但keras将为您处理这些尺寸,因此无需指定。Conv3D图层(过滤器)的第一个参数是输出尺寸的数量。您还需要指定内核形状或大小,通常是输入维度的一小部分(例如(4,4,4)
)
对于您的任务,网络输出将是一个softmax层,通常包括一些中间层,如maxpool或ReLU。要回答我自己的问题,编码实际上非常简单:(N,64000,23)=>(N,40,40,40,23)我昨天发布了一个答案,但不久后删除了它,因为它似乎很明显:)。不管怎样,我现在取消了它。是的,这正是我考虑过的结果。我甚至想补充一点,最后,我没有保留坐标有两个主要原因,第一个是20个向量值(实际上对应于二值化的标签)和坐标之间的权重差,第二个是因为它是一个带有体素的conv3D,坐标将被隐式学习(在我的例子中,因为每个坐标对应于检查坐标是否在体素中的那些体素的中心)。非常感谢你的回答,它证实了它按照我的想法工作