Python 为什么我在keras 3d CNN中的准确度总是0?
我对keras、cnn和deep learning都很陌生,所以如果解决方案很简单的话,我非常抱歉。我在这里真的走投无路了 所以-问题是,我有一个3D CNN,其中有50x50x50的立方体作为输入数据。我想把它们分为0或1,所以这是一个二进制分类问题。在将其装配到NN之前,我当然准备了数据,对其进行了重构、调整大小和规范化。因此,图像具有可比性(1个体素为2 mm),标准化为0到1的范围,大小相同 因此,当我试图将数据拟合到我的模型中时,结果并不那么令人鼓舞。精度总是显示为0,我在一个历元中获得的最高精度是Python 为什么我在keras 3d CNN中的准确度总是0?,python,tensorflow,keras,deep-learning,cnn,Python,Tensorflow,Keras,Deep Learning,Cnn,我对keras、cnn和deep learning都很陌生,所以如果解决方案很简单的话,我非常抱歉。我在这里真的走投无路了 所以-问题是,我有一个3D CNN,其中有50x50x50的立方体作为输入数据。我想把它们分为0或1,所以这是一个二进制分类问题。在将其装配到NN之前,我当然准备了数据,对其进行了重构、调整大小和规范化。因此,图像具有可比性(1个体素为2 mm),标准化为0到1的范围,大小相同 因此,当我试图将数据拟合到我的模型中时,结果并不那么令人鼓舞。精度总是显示为0,我在一个历元中获
精度:0.0159
,损失总是在3.2到3.5之间
我也改变了纪元的数量,但我有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))
model.add(BatchNormalization(center=True, scale=True))
model.add(Activation('softmax'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
print(training_patients[0])
model.summary()
model.fit(training_patients, training_labels, epochs=50, batch_size=50)
所以我想问,我的架构是否有问题?或者你认为问题更多的是在数据方面
我只有420张照片;其中3/4用于培训,1/4用于测试。这可能是问题所在吗?
我想稍后在基本模型稳定运行时增强图像。还是我必须先这么做
提前非常感谢 这对于有两类的分类问题没有意义:
model.add(Dense(256))
model.add(BatchNormalization(center=True, scale=True))
model.add(Activation('softmax'))
将其更改为:
model.add(Dense(1))
model.add(Activation('sigmoid'))
也可以考虑使用Relu'激活而不是<代码> '''卷积层的线性'< /代码>。
你能打印出你的输入的形状吗?它像一个符咒!非常感谢。但我仍然不太明白到底是什么问题,以及为什么它现在起作用。你能解释一下为什么以前没有意义吗?毕竟,我不只是想要一个工作程序,我想从我的错误中学到一些东西。批处理规范是一个复杂的操作,在这里根本没有意义。此外,输出层上的神经元数量几乎总是你拥有的类别数量(除非你有两个类别,你可以放1,并使用二进制交叉熵和sigmoid激活)。谢谢你,我想我现在明白了!