Keras模型。评估不正确的形状

时间:2017-08-01 02:53:01

标签: python neural-network keras

我对Keras的evaluate功能感到非常困惑。我想要计算的是我的测试集的MSE损失:

def iterate_and_store(optimizer, nepochs=10):
    model = Sequential()
    model.add(Dense(output_dim=8, input_dim=3, init="glorot_normal"))
    model.add(Activation("softplus"))
    model.add(Dense(output_dim=16, init="glorot_normal"))
    model.add(Activation("softplus"))
    model.add(Dense(output_dim=32, init="glorot_normal"))
    model.add(Activation("softplus"))
    model.add(Dense(output_dim=32, init="glorot_normal"))
    model.add(Activation("softplus"))
    model.add(Dense(output_dim=16, init="glorot_normal"))
    model.add(Activation("softplus"))
    model.add(Dense(output_dim=1))
    model.add(Activation("softplus"))

    model.compile(loss='MSE', optimizer=optimizer)

    training_loss = pd.DataFrame(model.fit(input_train, output_train, nb_epoch=nepochs, batch_size=32, verbose=2).history)
    self_pred = pd.DataFrame(model.predict(input_train), columns=['estimated'])
    test_pred = pd.DataFrame(model.predict(input_test), columns=['y_hat'])
    test_loss = pd.DataFrame(model.evaluate(output_test, test_pred, verbose=2))

但是,行test_loss = pd.DataFrame(model.evaluate(output_test, test_pred, verbose=2))会抛出此错误: ValueError: Error when checking model input: expected dense_input_40 to have shape (None, 3) but got array with shape (10000, 1)

evaluate方法不应该计算预测和测试集实际输出之间的MSE误差吗?

这些是我的训练和训练。测试输入和输出看起来像形状:

input_test.shape
Out[152]: (10000, 3)
output_test.shape
Out[153]: (10000, 1)
input_train.shape
Out[154]: (10000, 3)
output_train.shape
Out[155]: (10000, 1)

我尝试在输入和输出的每个组合中提供model.evaluate方法,但没有任何作用。我的所有数据都是10,000行,输入是3个变量,1个输出是连续的。

我只是想将比较低和较低的训练损失与应该有点凹陷的测试损失进行比较: enter image description here

1 个答案:

答案 0 :(得分:3)

如果您想生成这样的图表,请尝试在validation_data中提供model.fit(),以便将每个纪元的测试集MSE 保存到{{} 1}}对象。

例如,

History

应该给你这样的东西:

history_obj = model.fit(input_train, output_train, validation_data=(input_test, output_test))
print(pd.DataFrame(history_obj.history))