我正在尝试使用 tensorflow.keras 构建二进制分类器,目前无法确定让模型仅生成 0 和 1 的解决方案。
用于编译我的 tensorflow 模型的代码。
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
def build_model(train_dataset):
model = keras.Sequential([
layers.Dense(10, activation='relu', input_shape=[len(train_dataset.keys())]),
layers.Dense(1, activation='sigmoid')
])
optimizer = 'adam'
model.compile(loss='binary_crossentropy',
optimizer=optimizer,
metrics=[tf.keras.metrics.Precision(), tf.keras.metrics.Recall(), tf.keras.metrics.Accuracy()])
return model
model = build_model(X)
调用后model.fit(X,y),model.predict(X_test)将生成一个数字数组作为预测值:
array([[8.3726919e-01],
[9.1233850e-04],
[8.3726919e-01],
...,
[4.6819448e-05],
[1.5565268e-08],
[0.0000000e+00]], dtype=float32)
我目前对该问题的解决方案是从 sigmoid 激活函数中获取输出为 (0,1) 范围内的数字;然后将值转换为 0 或 1
reset_predictions = []
for p in predictions:
if p >= 0.5:
reset_predictions.append(1)
else:
reset_predictions.append(0)
然而,这并不理想;我希望实现的是模型在没有外部功能的情况下为我分类 0 或 1。