猿问

为什么我在 keras 3d CNN 中的准确率始终为 0?

一般来说,我对 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 用于测试。这可能是问题所在吗?当基本模型运行稳定时,我想稍后增强图像。或者我必须先这样做?


catspeake
浏览 120回答 1
1回答

LEATH

这对于具有两个类别的分类问题没有意义:model.add(Dense(256)) model.add(BatchNormalization(center=True, scale=True)) model.add(Activation('softmax'))改成这样:model.add(Dense(1)) model.add(Activation('sigmoid'))还可以考虑使用'relu'激活而不是'linear'卷积层。
随时随地看视频慕课网APP

相关分类

Python
我要回答