【问题标题】:3D image classification using 3D CNN使用 3D CNN 进行 3D 图像分类
【发布时间】:2020-04-01 03:00:46
【问题描述】:

我设计了一个 CNN 网络,以便在 keras 中使用“cifar10”数据集。 这是我的代码:

input_layer = Input(shape=(32,32,3))
x = Conv3D(32,(5,5,3),activation='relu',padding='same')(input_layer)
x = Conv3D(32,(5,5,3),activation='relu',padding='same')(x)
x = MaxPool3D(pool_size=2, padding='same')(x)
x = Conv3D(32,(5,5,3),activation='relu',padding='same')(x)
x = Conv3D(32,(5,5,3),activation='relu',padding='same')(x)
x = MaxPool3D(pool_size=2, padding='same')(x)
x = Flatten()(x)
x = Dense(128,kernel_initializer='random_normal', bias_initializer='zeros')(x)
x = Dense(128,kernel_initializer='random_normal', bias_initializer='zeros')(x)
output_layer = Dense(10,activation='softmax',kernel_initializer='random_normal', bias_initializer='zeros')(x)
Cifar10_CNN = Model(input_layer, output_layer)

当我构建模型时出现此错误:

Input 0 is incompatible with layer conv3d_5: expected ndim=5, found ndim=4

我该如何解决这个问题?

【问题讨论】:

  • 将 ndim=5 的正确输入提供给函数 conv3d_5,而不是 ndim=4 的输入。问题:函数 conv_3d_5 在哪里?哪个函数调用最后一个?你调查了吗?
  • 另一种解决方案可能是使用函数 conv3d_4。它存在吗?好吧,你有很多不同的方法可以解决这个问题:) 深入了解其余代码
  • @Leos313 是的,下划线后面的数字不能确定是哪一层导致错误。我第一次运行代码时它是“1”,我认为它指的是第一个 Conv3D 层。我更改了参数,但仍然得到相同的错误。在多次运行代码而不更改代码后,数字只是增加了。在“11”运行后它得到“11”。所以它不涉及任何层。我想知道它是什么。

标签: python-3.x keras conv-neural-network


【解决方案1】:

您可能应该阅读有关differences between Conv2D, Conv3D 的信息。尽管可能会令人困惑(假设图像实际上是 3 维的),但它们仍然被认为是 2D 的(在考虑 Keras 中的卷积时,您不会考虑通道维度。卷积无论如何都发生在通道维度上)。所以图片不需要Conv3D,你需要Conv2D

from tensorflow.keras.layers import Input, Dense, Conv2D, MaxPool2D, Flatten
from tensorflow.keras.models import Model

input_layer = Input(shape=(32,32,3))
x = Conv2D(32,(5,5),activation='relu',padding='same')(input_layer)
x = Conv2D(32,(5,5),activation='relu',padding='same')(x)
x = MaxPool2D(pool_size=2, padding='same')(x)
x = Conv2D(32,(5,5),activation='relu',padding='same')(x)
x = Conv2D(32,(5,5),activation='relu',padding='same')(x)
x = MaxPool2D(pool_size=2, padding='same')(x)
x = Flatten()(x)
x = Dense(128,kernel_initializer='random_normal', bias_initializer='zeros')(x)
x = Dense(128,kernel_initializer='random_normal', bias_initializer='zeros')(x)
output_layer = Dense(10,activation='softmax',kernel_initializer='random_normal', bias_initializer='zeros')(x)
Cifar10_CNN = Model(input_layer, output_layer)
print(Cifar10_CNN.summary())

【讨论】:

  • 非常感谢。那么我们在哪里使用 Conv3D?
  • 您可以阅读我附在答案中的那个链接。但简短的回答,例如关于激光雷达(激光)数据,实际上有 4 个维度(高度、宽度、深度、通道)。
猜你喜欢
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
相关资源
最近更新 更多