Keras model.predict() 为测试输入中的所有值返回相同的预测输出

Posted

技术标签:

【中文标题】Keras model.predict() 为测试输入中的所有值返回相同的预测输出【英文标题】:Keras model.predict() returning same prediction output for all values in test inputs 【发布时间】:2018-10-31 05:00:19 【问题描述】:

我正在使用 Keras 构建神经网络,模型编译成功,并且我已经对数据进行了归一化。

但是,当我使用 model.predict(xtest) 时,每个预测输出都会得到相同的值

def model_final():
    model = models.Sequential()
    model.add(layers.Dense(64, activation='relu',
                           input_shape=(xtrain.shape[1],),
                          kernel_regularizer = regularizers.l2(0.001)))
    model.add(layers.Dense(64, activation='relu',
                          kernel_regularizer = regularizers.l2(0.001)))
    model.add(layers.Dense(1))
    model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
    return model

model = model_final()

model_final = model.fit(xtrain, ytrain, epochs = 100, batch_size = 10, verbose = 0)

model_final_eval = model.evaluate(xtest, ytest)

我得到以下均方误差和 mae:

214/214 [==============================] - 3s 14ms/step
[1.9285373412534785e-06, 0.00061284683733987052]

然后,当我使用model.predict(xtest) 时,我得到以下输出:

array([[ 0.0014801],
       [ 0.0014801],
       [ 0.0014801],...

对于model.predict 中的所有值。

我假设数据集中所有值的完全相同的预测值不可能是正确的。

建议?

谢谢!

【问题讨论】:

你确定输入的都不一样吗? 您的数据是否针对该值加权,即您的测试数据是否主要包含 0 值和少量非零值,即使对数据进行归一化也不会减少对抽样的偏差。例如如果你有 100k 个数据点,其中 99k 是 0 和 1k 是非零的,你可以通过预测 0 来达到 99% 的准确率 @Kalyan - 是的,所有输入都不同 @ExpiredData - 实际上没有零值,因为我估算了缺失值。它是一个相对较小的数据集(总共大约 900 条记录)。 检查它是否与训练过的模型相同。即使我有同样的问题。在我的 model.py 文件中,我在训练和预测我使用 relu 作为激活时进行了 elu 激活,这导致了这种现象的发生。因此,在预测时检查所有层是否与训练模型层匹配。 【参考方案1】:

model 未经训练,您应该使用model_final.predict(...)

您是否在同一个脚本上调用predict?如果没有,您可能需要加载砝码。

【讨论】:

model_final 是模型历史,而不是经过训练的模型。不是吗?

以上是关于Keras model.predict() 为测试输入中的所有值返回相同的预测输出的主要内容,如果未能解决你的问题,请参考以下文章

Keras:model.evaluate vs model.predict 多类 NLP 任务中的准确率差异

keras 中 model.predict() 和 model.predict_generator() 之间的预测差异

Keras model.evaluate() 和 model.predict() 有啥区别?

model.predict(keras)输出中的类的顺序是啥?

Keras - model.predict 返回类而不是概率

model.predict 不适用于 Keras 自定义层(推理错误)