一般来说,我对 keras、cnn 和深度学习相当陌生,所以如果解决方案非常简单,我非常抱歉。我真的陷入了死胡同。
所以,问题是,我有一个 3D CNN,其输入数据为 50x50x50 的立方体。我想将它们分类为0或1,所以这是一个二元分类问题。在将其拟合到神经网络之前,我当然准备了数据,对其进行重构、调整大小和标准化。因此,图像具有可比性(1 体素为 2 毫米),标准化为 0 到 1 范围且大小相同。
因此,当我尝试将数据拟合到我的模型中时,结果并不那么令人鼓舞。准确度始终显示为 0,我在单个 epoch 中获得的最高准确度是accuracy: 0.0159
,损失始终在 3.2 到 3.5 之间
我也改变了 epoch 的数量,但无论是 5 个还是 50 个都没关系。结果总是相同的。
这是我的 CNN 架构的代码
model = Sequential()
model.add(Conv3D(64, kernel_size=(5, 5, 5), activation='linear',
kernel_initializer='glorot_uniform', input_shape=shape))
model.add(BatchNormalization(center=True, scale=True))
model.add(LeakyReLU(.1))
model.add(Dropout(.25))
model.add(Conv3D(128, kernel_size=(3, 3, 3), activation='linear',
kernel_initializer='glorot_uniform'))
model.add(BatchNormalization(center=True, scale=True))
model.add(LeakyReLU(.1))
model.add(MaxPooling3D(pool_size=(3, 3, 3)))
model.add(Dropout(.25))
model.add(Conv3D(256, kernel_size=(3, 3, 3), activation='linear',
kernel_initializer='glorot_uniform'))
model.add(BatchNormalization(center=True, scale=True))
model.add(LeakyReLU(.1))
model.add(Dropout(.25))
model.add(Conv3D(512, kernel_size=(3, 3, 3), activation='linear',
kernel_initializer='glorot_uniform'))
model.add(BatchNormalization(center=True, scale=True))
model.add(LeakyReLU(.1))
model.add(MaxPooling3D(pool_size=(3, 3, 3)))
model.add(Dropout(.25))
model.add(Flatten())
model.add(Dense(256))
model.add(BatchNormalization(center=True, scale=True))
model.add(LeakyReLU(.1))
model.add(Dropout(.5))
model.add(Dense(512))
model.add(BatchNormalization(center=True, scale=True))
model.add(LeakyReLU(.1))
model.add(Dropout(.5))
model.add(Dense(256))
所以我想问一下,我的架构有什么问题吗?或者您认为问题更多出在数据方面?
我只有 420 张图像;其中 3/4 用于训练,1/4 用于测试。这可能是问题所在吗?当基本模型运行稳定时,我想稍后增强图像。或者我必须先这样做?
LEATH
相关分类