Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为keras上的3D CNN网络编码数据?_Python_Numpy_Tensorflow_Keras - Fatal编程技术网

Python 如何为keras上的3D CNN网络编码数据?

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个类别。要做到这一点,

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

  • 以一个给定点为中心的坐标
  • 限制为3D框20*20*20,我将其分解为0.5*0.5*0.5的体素(意味着我的尺寸为404040),意味着我的“网格”为64000个体素
  • 每个框都是独立的,并且以相同的方式配置(每次XYZ轴和中心相同时)
  • 给定体素中的每个点具有20个给定值中的一个(对应于之前二值化的标签)
其想法是创建一个3D CNN网络,其中给定一个盒子及其内部内容,网络输出将预测对应于202020盒子类型的20个类别。要做到这一点,网络的输入形状应该是4D,这就是我对如何编码我的numpy数组有一些疑问的地方:

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

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

来自Conv3D层上keras API的输入形状(这是该层所需的关键字)

带形状的5+D张量:批处理形状+(通道,conv_dim1,conv_dim2,conv_dim3)如果数据格式='channels_first'或带形状的5+D张量:批处理形状+(conv_dim1,conv_dim2,conv_dim3,通道)如果数据格式='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。

要回答我自己的问题,编码实际上非常简单:(N,64000,23)=>(N,40,40,40,23)我昨天发布了一个答案,但不久后删除了它,因为它似乎很明显:)。不管怎样,我现在取消了它。是的,这正是我考虑过的结果。我甚至想补充一点,最后,我没有保留坐标有两个主要原因,第一个是20个向量值(实际上对应于二值化的标签)和坐标之间的权重差,第二个是因为它是一个带有体素的conv3D,坐标将被隐式学习(在我的例子中,因为每个坐标对应于检查坐标是否在体素中的那些体素的中心)。非常感谢你的回答,它证实了它按照我的想法工作