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)
您感到困惑,因为您的模型实际上输出的是对数,而不是概率(在[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]值。
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |