Tensorflow二进制图像分类的概率

时间:2020-06-17 18:33:13

标签: python tensorflow keras

我尝试遵循Image Classification Tutorial,但不幸的是,创建模型后,它并没有告诉您如何使用模型。

我当前用于创建模型的代码是:

model = Sequential([
    tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_SIZE, IMG_SIZE ,3)),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(64, 3, padding='same', activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=['accuracy'])

在我的第一次尝试中,我没有在最后一个Dense层上使用activation='sigmoid',但是从模型中得到的预测例如是[[332.9539]],但我不知道该如何解释。

在阅读this答案后,我添加了Sigmoid激活以接收介于0和1之间的值,但是不幸的是,在训练模型时,其精度一直保持在0.5以上。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

如果将S型激活添加到最后一层,则由于模型不再产生logit,因此需要从损失实例中删除from_logits=True

model.compile(optimizer='adam',
              loss=tf.keras.losses.BinaryCrossentropy(),
              metrics=['accuracy'])