Если моя модель обучена с использованием сигмоиды на последнем слое и binary_crossentropy, могу ли я указать вероятность классов, а не 0/1?

#label #classification #prediction #binary-data #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 по классификации двоичных изображений низкая, и моя модель предсказывает один класс по сравнению с другим. Поэтому я решил добавить пороговое значение, основанное на вероятности вывода моей сигмоидной функции на последнем слое:

 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)gt; 0.99) 0).ravel()  y_classes  

Я хочу использовать «pred» в своем коде в качестве вероятности класса, но она всегда равна либо 0, либо 1, как показано ниже:

 Out[113]: array([[1.]], dtype=float32)  

почему это не дает вероятности предсказания класса между [0,1] вместо 1? есть ли способ получить вероятность класса в моем случае, а не 0 или 1?