我已经使用sigmoid函数训练了一个CNN模型,最后是密集层:
model.add(layers.Dense(1, activation='sigmoid'))
字符串
我还使用二进制交叉熵进行了编译:
model.compile(loss='binary_crossentropy',
optimizer = 'Adam',
metrics=[tf.keras.metrics.Precision(),tf.keras.metrics.Recall(),'accuracy'])
型
二值图像分类的f1分数很低,我的模型预测一个类优于另一个类。所以我决定在最后一层添加一个基于sigmoid函数输出概率的阈值:
c = load_img('/home/kenan/Desktop/COV19D/validation/covid/ct_scan_19/120.jpg',
color_mode='grayscale',
target_size = (512,512))
c=img_to_array(c)
c= np.expand_dims(c, axis=0)
pred = model.predict_proba(c)
pred
y_classes = ((model.predict(c)> 0.99)+0).ravel()
y_classes
型
我想在我的代码中使用'pred'作为类的概率,但它总是0或1,如下所示:
Out[113]: array([[1.]], dtype=float32)
型
为什么给予的不是1而是[0,1]的概率呢?有没有办法得到我的情况下的类概率,而不是0或1?
1条答案
按热度按时间ffx8fchx1#
不,你不能。在最后一层激活Sigmoid将输出0到1范围内的一个值。如果你想获得不同标签的类概率,你必须将最后一层激活更改为softmax。