为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

catspeake 2023-10-18 15:45:36
一般来说,我对 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'卷积层。


查看完整回答
反对 回复 2023-10-18
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信