为什么我的深度学习模型总是给出1类的输出?

时间:2018-01-12 01:10:53

标签: keras conv-neural-network

我在Keras上训练一个CNN模型来分类属于2个类的图像。我有大约600张0级和1000级1级图像。我的模型如下所示。问题是它总是给我带有更高样本的类的输出。我试图将最后一个激活函数更改为sigmoid,但它根本没有帮助。我还试图添加批量标准化以及正规化和退出。

def model(input_shape):
    #Define the input placeholder as a tensor with shape input_shape
    X_input = Input(input_shape)
    # First layer
    X = Conv2D(32,(5,5),strides=(1,1),padding='same',name='conv1')(X_input)
    X = BatchNormalization()(X)
    X = Activation('relu')(X)
    X = MaxPooling2D((3,3),strides=2,name='pool1')(X)

# Second layer
    X = Conv2D(32,(5,5),strides=(1,1),padding='same',name='conv2')(X)
    X = BatchNormalization()(X)
    X = Activation('relu')(X)
    X = AveragePooling2D((3,3),strides=2,name='pool2')(X)

# Third layer
    X = Conv2D(64,(5,5),strides=(1,1),padding='same',name='conv3')(X)
    X = BatchNormalization()(X)
    X = Activation('relu')(X)
    X = AveragePooling2D((3,3),strides=2,name='pool3')(X)

# Flatten
    X = Flatten()(X)
    X = Dense(64,activation='softmax',name='fc1')(X)
    X = dropout(0.5)(X)
    X = Dense(2,activation='softmax',name='fc2')(X)

# Create the model
    model = Model(inputs = X_input,outputs = X)

    return model

1 个答案:

答案 0 :(得分:0)

好的,您有一个2级分类问题,其中类中的样本数不平衡。这个问题在医学诊断中尤为常见,不仅给你带来很多麻烦。

您已经说明您要解决的具体问题是对肿瘤组织病理学图像进行分类。这些图像的图案非常丰富,因此总共1600张图像通常不足以学习有意义的特征和表示。微型计算机中的分布也是不平衡的,因此梯度总是会略微偏移(假设其他滤波器产生随机噪声,因为它们没有时间学习有意义的特征)朝向局部最小的一类分类。 / p>

但是,有几种技术可以改善性能:

  • 修剪较大的类,以便每个类中的样本数大致相同。因此,在您的情况下,将1000个样本的类减少到大约600个。
  • 如果您不想使用较少的数据进行培训,请尝试为每个课程分配权重Here是简短示例的链接。因此,在您的特定情况下,您拥有600A1000B图像的图片。因此,您可以为B类分配权重1.0,为A类分配10/6
  • 如上所述,1600个样本不足以学习有意义的功能。特别是当你有一个深度神经网络。那么,您可以尝试的是转移学习。可以找到一个非常详细的教程(有关SO文档的教程)here。请务必仔细查看教程中图层的可视化。
  • 另外,要测试模型的功能,您可能需要尝试故意过度拟合。可以找到快速核对清单here
相关问题