使用二元交叉熵作为损失函数的DNN输出解释

我有一个使用Tensorflow进行图像分类的深度神经网络(DNN),它使用二元交叉熵作为损失函数,并在tf.keras.preprocessing.image_dataset_from_directory调用中使用对应的标签模式“binary”。当我训练模型并对图像进行推理时,预测输出类似于[[-3.5601902]]或[[2.1026382]]。我该如何解释这些输出,以确定模型将图像分配到哪个类别?我认为答案可能是实现一个softmax函数,但我的尝试没有成功。

对tf.keras.preprocessing.image_dataset的调用:

train_ds = tf.keras.preprocessing.image_dataset_from_directory(images_directory,label_mode="binary",validation_split=0.2,subset="training",seed=123,image_size=(img_height, img_width),batch_size=batch_size)val_ds = tf.keras.preprocessing.image_dataset_from_directory(images_directory,label_mode="binary",validation_split=0.2,subset="validation",seed=123,image_size=(img_height, img_width),batch_size=batch_size)

以及模型

model = Sequential([layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),layers.Conv2D(16, 3, padding='same', activation='relu'),layers.MaxPooling2D(),layers.Conv2D(32, 3, padding='same', activation='relu'),layers.MaxPooling2D(),layers.Conv2D(64, 3, padding='same', activation='relu'),layers.MaxPooling2D(),layers.Flatten(),layers.Dense(128, activation='relu'),layers.Dense(num_classes)])model.compile(optimizer='adam',          loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),          metrics=['accuracy'])

也欢迎对模型提出任何建议。


回答:

你试图实现的目标有点令人困惑。

如果你在进行二元分类(我认为你是在做这个),那么你的输出层的尺寸不应该是‘num_classes’,而应该是1,并且使用sigmoid作为激活函数。如果你这样做了,输出‘p’将是类别1的概率,而1-‘p’则是类别0的概率。看起来你将多类别分类的方法和二元分类混在了一起。

我能说的唯一一点是,这些值是logit输出。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注