如何解决使用模型训练进行多标签图像分类以进行多分类?
我目前正在通过这个kaggle项目进行工作,以对白细胞进行多图像分类(共有4类:嗜中性粒细胞,嗜酸性粒细胞,淋巴细胞和单核细胞)。
对一种类型的白细胞进行分类非常简单。我使用来自keras的CNN构建了模型。我想进一步解决这个问题,并尝试在多标签图像分类中实现该模型。
例如,如果我将此图像输入模型:https://webpath.med.utah.edu/jpeg5/HEME002.jpg 我希望我的模型输出白细胞的存在,在这种情况下,它应该输出“存在中性粒细胞和淋巴细胞”。
问题在于,该数据集中的所有图像都是具有单个白细胞的图像,而这正是模型的训练对象。从未见过图像中包含一个或多个白细胞。
我的问题是可以采用这种模型吗?如何将其外推到与一种类型的白细胞多的图像一起工作?
我将在此处使用此代码:
bnmomemtum=0.85
def fire(x,squeeze,expand):
y = Conv2D(filters=squeeze,kernel_size=1,activation='relu',padding='same')(x)
y = BatchNormalization(momentum=bnmomemtum)(y)
y1 = Conv2D(filters=expand//2,padding='same')(y)
y1 = BatchNormalization(momentum=bnmomemtum)(y1)
y3 = Conv2D(filters=expand//2,kernel_size=3,padding='same')(y)
y3 = BatchNormalization(momentum=bnmomemtum)(y3)
return concatenate([y1,y3])
def fire_module(squeeze,expand):
return lambda x: fire(x,expand)
x = Input(shape=[IMG_SIZE,IMG_SIZE,3])
y = BatchNormalization(center=True,scale=False)(x)
y = Activation('relu')(y)
y = Conv2D(kernel_size=5,filters=12,padding='same',use_bias=True,activation='relu')(x)
y = BatchNormalization(momentum=bnmomemtum)(y)
y = fire_module(12,24)(y)
y = MaxPooling2D(pool_size=2)(y)
y = fire_module(24,48)(y)
y = MaxPooling2D(pool_size=2)(y)
y = fire_module(32,64)(y)
y = MaxPooling2D(pool_size=2)(y)
y = fire_module(24,48)(y)
y = MaxPooling2D(pool_size=2)(y)
y = fire_module(18,36)(y)
y = MaxPooling2D(pool_size=2)(y)
y = fire_module(12,24)(y)
y = GlobalAveragePooling2D()(y)
y = Dense(NUM_CLASSES,activation='sigmoid')(y)
model = Model(x,y)
model.compile(optimizer=optimizers.RMSprop(lr=2e-5),loss='binary_crossentropy',metrics=['accuracy'])
model.summary()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。