一般来说,我对 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 用于测试。这可能是问题所在吗?当基本模型运行稳定时,我想稍后增强图像。或者我必须先这样做?
1 回答
LEATH
TA贡献1936条经验 获得超6个赞
这对于具有两个类别的分类问题没有意义:
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'
卷积层。
添加回答
举报
0/150
提交
取消