仅预测单个班级

我使用VGG16实施迁移学习以对糖尿病性视网膜病疾病二元分类进行分类。即使在平衡了类之后,我的模型也只能预测单个类。为什么会这样。以下是我的代码

base_model=VGG16(weights='imagenet',include_top=False) #imports the mobilenet model and discards the last 1000 neuron layer.

x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,activation='relu')(x) #we add dense layers so that the model can learn more complex functions and classify for better results.
x=Dense(1024,activation='relu')(x) #dense layer 2
x=Dense(512,activation='relu')(x) #dense layer 3
preds=Dense(1,activation='softmax')(x) #final layer with softmax activation
vgg=Model(inputs=base_model.input,outputs=preds)
a158abc 回答:仅预测单个班级

似乎您在输出中使用了softmax激活功能。在对具有多个可能类别的输入进行分类时,通常会使用Softmax,因为它会输出概率分布(即所有元素的总和为1)。首先,对每个元素求幂,然后将每个元素除以所有元素的总和。

但是,如果只有一个输出单位,则它将必须始终输出1,因为它将计算exp(x_1)/ exp(x_1)= 1

对于您正在执行的二进制分类任务,我建议改为使用sigmoid输出激活函数:

base_model=VGG16(weights='imagenet',include_top=False) #imports the mobilenet model and discards the last 1000 neuron layer.

x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,activation='relu')(x) #we add dense layers so that the model can learn more complex functions and classify for better results.
x=Dense(1024,activation='relu')(x) #dense layer 2
x=Dense(512,activation='relu')(x) #dense layer 3
preds=Dense(1,activation='sigmoid')(x) #final layer with softmax activation
vgg=Model(inputs=base_model.input,outputs=preds)

这假定训练数据集中的标签为0和1。

本文链接:https://www.f2er.com/2662665.html

大家都在问