【问题标题】:How to get Recall and Precision from Tensorflow binary image classification如何从 Tensorflow 二值图像分类中获得召回率和精度
【发布时间】:2021-12-29 13:41:32
【问题描述】:

如何从 Tensorflow 二值图像分类中获得召回率和精度?

我使用这段代码来评估我的验证数据集,但我得到了损失和准确性

model.evaluate(validationDataset)

这样的输出

3/3 [==============================] - 1s 262ms/step - loss: 0.1850 - accuracy: 0.9459
[0.18497566878795624, 0.9459459185600281]

如何轻松获得Recall和Precision?

至少我有这个代码的混淆表

tf.math.confusion_matrix(labels=validation_label, predictions=prediction_result).numpy()

输出:

array([[3,  1],
       [ 0, 2]], dtype=int32)

预测结果代码:

prediction_result = (model.predict(val_ds) > 0.5).astype("int32")

输出:

array([[0],
       [1],
       [1],
       [0],
       [1],
       [0]], dtype=int32)

验证标签代码:

validation_label = np.concatenate([y for x, y in val_ds], axis=0)

输出:

array([0, 1, 1, 0, 1, 0], dtype=int32)

环境:

  • 谷歌合作实验室
  • 张量流 2.7.0
  • Python 3.7.12

数据集结构:
/培训/
---/COVID19/
------/img1.jpg
------/img2.jpg
------/img3.jpg
---/正常/
------/img4.jpg
------/img5.jpg
------/img6.jpg

制作数据集代码:

batch_size = 32
img_height = 300    
img_width = 300
epochs = 10
input_shape = (img_width, img_height, 3)
AUTOTUNE = tf.data.AUTOTUNE


dataset_url = "https://storage.googleapis.com/fdataset/Dataset.tgz"
data_dir = tf.keras.utils.get_file('training', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)

image_count = len(list(data_dir.glob('*/*.jpg')))
print(image_count)

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  seed=123,
  subset="training",
  validation_split=0.8,
  image_size=(img_width, img_height),
  batch_size=batch_size)

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  seed=123,
  subset="validation",
  validation_split=0.2,
  image_size=(img_width, img_height),
  batch_size=batch_size)

train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)

模型:

model = tf.keras.Sequential()
base_model = tf.keras.applications.DenseNet121(input_shape=input_shape,include_top=False)
base_model.trainable=True
model.add(base_model)
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(16,activation='relu'))
model.add(tf.keras.layers.Dense(1, activation="sigmoid"))

损失函数:“binary_crossentropy”
优化器:RMSprop
指标:“准确性”

【问题讨论】:

    标签: python tensorflow machine-learning computer-vision tensorflow2.0


    【解决方案1】:

    您可以使用以下代码来获得精确度和召回率以及损失和准确度:

    model.compile(optimizer='rmsprop',
           loss='binary_crossentropy',
                  metrics=['accuracy',
            tf.keras.metrics.Recall(),
         tf.keras.metrics.Precision()])
    

    【讨论】:

    • 它非常适合二进制分类,如果我可以再问一次,如果我使用多类分类,如果我像这样使用它,这将是一个错误,因为像这样的不同形状“ValueError: Shapes (32 , 10) 和 (32, 1) 不兼容”,怎么解决?
    • 它适用于多类分类,您需要在最后一层定义 num_of calsses 以及在 compile 方法中的激活和损失函数。
    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 2019-09-06
    • 1970-01-01
    • 2017-09-28
    • 2018-05-24
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多