【问题标题】:Keras Model return predictions when evaluatingKeras 模型在评估时返回预测
【发布时间】:2026-01-20 14:25:01
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    AFAIK,我们无法使用model.evaluate 预测x,它只返回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 ]]
    

    【讨论】: