Image 如何使用Keras Conv3D为3D数据实现简单的CNN
我正在尝试实现一个三维卷积神经网络与医学成像,是由10个连续的图像切片,是64x64的形状。它们是灰度图像。因此,我的输入维度是64 x 64 x 10,我的第一层是 模型=顺序 model.addConv3D32,内核大小=3,3,3,步幅=1,1,1,输入形状=64,64,10 model.addActivation'relu' model.addMaxPoolG3DPool_size=2,2,2 用这段代码我得到了错误 输入0与层conv3d_1不兼容:预期ndim=5,发现ndim=4 因此,我改变了我的输入到 模型=顺序 model.addConv3D32,内核大小=3,3,3,步幅=1,1,1,输入形状=64,64,10,1 model.addActivation'relu' model.addMaxPoolG3DPool_size=2,2,2 现在我得到了错误 ValueError:'NumpyArrayIterator'中的输入数据应具有排名4。您传递了一个形状为',128,64,64,10,1的数组Image 如何使用Keras Conv3D为3D数据实现简单的CNN,image,keras,convolution,Image,Keras,Convolution,我正在尝试实现一个三维卷积神经网络与医学成像,是由10个连续的图像切片,是64x64的形状。它们是灰度图像。因此,我的输入维度是64 x 64 x 10,我的第一层是 模型=顺序 model.addConv3D32,内核大小=3,3,3,步幅=1,1,1,输入形状=64,64,10 model.addActivation'relu' model.addMaxPoolG3DPool_size=2,2,2 用这段代码我得到了错误 输入0与层conv3d_1不兼容:预期ndim=5,发现ndim=4
我曾试图在Keras代码中覆盖这一点,但这会导致更多错误,而且我非常确定可以输入大量切片-我只是看不出问题出在哪里 这是我几天来的头痛 Keras会自动将图像中的通道数设置为深度,并使用它设置最终的过滤器大小。您应该改用Conv2D,因为您有3维图像,您可以将其理解为RGB图像 正如我所说,Keras会自动将深度固定为通道数。因此,如果您使用Conv2D,请将过滤器大小固定为5x5,它实际上将是5x5xnº通道 替换: model.addConv3D32,内核大小=3,3,3,步幅=1,1,1,输入形状=64,64,10 致: model.addConv2D32,内核大小=3,3,步幅=1,1,输入形状=64,64,10 您可以在该图像中看到实际发生的情况: 如果你想合并不同的频道,你必须用接收不同频道的KERA创建不同的塔,然后将它们组合在一起
你也可以看到发生了什么。这是我几天来一直头疼的问题 Keras会自动将图像中的通道数设置为深度,并使用它设置最终的过滤器大小。您应该改用Conv2D,因为您有3维图像,您可以将其理解为RGB图像 正如我所说,Keras会自动将深度固定为通道数。因此,如果您使用Conv2D,请将过滤器大小固定为5x5,它实际上将是5x5xnº通道 替换: model.addConv3D32,内核大小=3,3,3,步幅=1,1,1,输入形状=64,64,10 致: model.addConv2D32,内核大小=3,3,步幅=1,1,输入形状=64,64,10 您可以在该图像中看到实际发生的情况: 如果你想合并不同的频道,你必须用接收不同频道的KERA创建不同的塔,然后将它们组合在一起
您还可以看到正在发生的情况。Conv3D的输入形状有4个维度时间顺序、宽度、高度和通道 就你而言:
input_shape = (10, 64, 64, 1)
Conv3D的输入形状具有4维时间顺序、宽度、高度和通道 就你而言:
input_shape = (10, 64, 64, 1)
您能否编辑您的问题,说明如何初始化numpy数组,以及将什么传递给模型编译和拟合函数。您从何处得到此错误?在我看来,您以128的批大小对数据进行批处理,我认为您的输入形状应该是1,64,64,10,而不是64,64,10,1,尝试对它进行批处理,因为它看起来像是在代码中的某个地方对一些数组进行了批处理。需要看更多才能弄清楚。您能否编辑您的问题,说明如何初始化numpy数组,以及您将传递给模型编译和拟合函数的内容。您从何处得到此错误?在我看来,好像您在某个地方以128的批大小批处理数据,我认为您的输入形状应该类似于1,64,64,10不是64,64,10,1,尝试对其进行批处理,而不是一,因为在代码中的某个地方,您对某个数组进行了批处理。需要看更多才能弄清楚。