tf.keras.model.predict() 生成数据范围之外的值是否常见/正常?

Kve*_*ven 1 python keras tensorflow tf.keras tensorflow2.0

tf.keras.model.predict()生成给定数据范围之外的值是否正常?

我从model.predict(). 模型中使用的目标预测列中的数据仅包含 1 或 0。我本来希望model.predict()生成一个介于 0 和 1 之间的值。

当我将新的类似数据放入model.predict()尝试进行分类时,我经常得到一个小于 0 或大于 1 的值。我是否应该认为这意味着所有大于 0.5 的值更有可能是 1 并且越高值更有可能是 1?

这是我的代码:

    epoch_count = 1    
    model = tf.keras.Sequential([
      feature_layer,
      layers.Dense(128, activation='relu'),
      layers.Dense(128, activation='relu'),
      layers.Dense(1)
    ])
    
    model.compile(optimizer='adam',
                  loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
                  metrics=['accuracy'])
    
    model.fit(train_ds,
              validation_data=val_ds,
              epochs=epoch_count)
Run Code Online (Sandbox Code Playgroud)

Mat*_*gro 6

您感到困惑,因为您的模型实际上输出的是对数,而不是概率(在[0, 1]范围内)。

由于您使用的tf.keras.losses.BinaryCrossentropy(from_logits=True)是损失,因此您已将其配置为接受 logits(这就是这样from_logits=True做的),这意味着在损失内部sigmoid正在应用激活。

训练后,如果您想在该[0, 1]范围内获得输出,则应应用sigmoid激活。你可以这样做:

model.add(Activation('sigmoid'))
Run Code Online (Sandbox Code Playgroud)

在此之后,一旦您predict在模型上,您将获得[0, 1]值。