【发布时间】:2021-05-27 12:35:21
【问题描述】:
我正在训练一个用于二进制分类的图像网络。输入图像被归一化以具有范围 [0,1] 内的像素值。此外,权重矩阵是从正态分布初始化的。但是,我最后一个具有 sigmoid 激活的 Dense 层的输出产生的值对于这两个类有非常微小的差异。比如——
output for class1- 0.377525 output for class2- 0.377539
类的差异出现在小数点后 4 位。是否有任何解决方法可以确保第 1 类的输出在 0 到 0.5 之间,而第 2 类的输出在 0.5 到 1 之间。
编辑:
这两种情况我都试过了。
案例 1 - 具有二元交叉熵的 Dense(1, 'sigmoid') 案例 2- 具有二元交叉熵的 Dense(2, 'softmax')
对于 case1,输出值的差异非常小,如上述问题中所述。因此,我将预测值的平均值作为分类阈值。这在某种程度上有效,但不是永久的解决方案。
对于案例 2 - 预测只过拟合一类。
示例代码:-
inputs = Input(shape = (128,156,1))
x = Conv2D(.....)(inputs)
x = BatchNormalization()(x)
x = Maxpooling2D()(x)
...
.
.
flat=Flatten()(x)
out = Dense(1,'sigmoid')(x)
model = Model(inputs,out)
model.compile(optimizer='adamax',loss='binary_crossentropy',metrics=['binary_accuracy'])
【问题讨论】:
-
你的输出是
Dense(2, activation='sigmoid')还是Dense(1, activation='sigmoid')? -
我已经编辑了这个问题。你提到的这两种方法我都试过了
标签: tensorflow keras classification sigmoid