我在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
答案 0 :(得分:0)
好的,您有一个2级分类问题,其中类中的样本数不平衡。这个问题在医学诊断中尤为常见,不仅给你带来很多麻烦。
您已经说明您要解决的具体问题是对肿瘤组织病理学图像进行分类。这些图像的图案非常丰富,因此总共1600张图像通常不足以学习有意义的特征和表示。微型计算机中的分布也是不平衡的,因此梯度总是会略微偏移(假设其他滤波器产生随机噪声,因为它们没有时间学习有意义的特征)朝向局部最小的一类分类。 / p>
但是,有几种技术可以改善性能:
600
类A
和1000
类B
图像的图片。因此,您可以为B类分配权重1.0
,为A类分配10/6
。