Keras 模型在评估时返回预测

时间:2021-05-22 19:01:21

标签: python tensorflow machine-learning keras deep-learning

我有一个包含多个字段的数据集,但只有两个与我的机器学习实施相关。其余的不应考虑用于预测,但可能会揭示有趣的相关性。

调用model.evaluate时有没有办法返回预测结果? 例如:

[loss, accuracy, predicted_results] = model.evaluate(input, results)

1 个答案:

答案 0 :(得分:1)

AFAIK,我们无法使用 xmodel.evaluate 进行预测,它只是返回 lossaccsource。但根据您的需要,您可以编写自定义类并定义必要的调用,例如 .evaluate.predict。让我们定义一个简单的模型来演示。

训练和跑步

import tensorflow as tf
import numpy as np  

img = tf.random.normal([20, 32], 0, 1, tf.float32)
tar = np.random.randint(2, size=(20, 1))

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(10, input_dim = 32, 
                       kernel_initializer ='normal', activation= 'relu'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', 
              optimizer='adam', metrics=['accuracy'])
model.fit(img, tar, epochs=2, verbose=2)

Epoch 1/2
1/1 - 1s - loss: 0.7083 - accuracy: 0.5000
Epoch 2/2
1/1 - 0s - loss: 0.6983 - accuracy: 0.5000

现在,对于您的要求,我们可以做如下处理:

class Custom_Evaluate:
    def __init__(self, model):
        self.model = model 
    def eval_predict(self, x, y):
        loss, acc = self.model.evaluate(x, y)
        pred = self.model.predict(x)
        return loss, acc, pred 

custom_evaluate = Custom_Evaluate(model)
loss, acc, pred = custom_evaluate.eval_predict(img, tar)
print(loss, acc)
print(pred)
0.6886215806007385 0.6499999761581421
[[0.5457604 ]
 [0.6126752 ]
 [0.53668976]
 [0.40323135]
 [0.37159938]
 [0.5520069 ]
 [0.4959099 ]
 [0.5363802 ]
 [0.5033434 ]
 [0.65680957]
 [0.6863682 ]
 [0.44409862]
 [0.4672098 ]
 [0.49656072]
 [0.620726  ]
 [0.47991502]
 [0.58834356]
 [0.5245693 ]
 [0.5359181 ]
 [0.4575624 ]]