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

Python Keras模型。评估不正确的形状,python,neural-network,keras,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_di

我对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\u loss=pd.DataFrame(model.evaluate(output\u test,test\u pred,verbose=2))
抛出以下错误:
ValueError:检查模型输入时出错:预期密集输入\u 40具有形状(无,3),但获得具有形状(10000,1)的数组。

方法不应该计算预测和测试集实际输出之间的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)
我试着输入
模型。评估
方法的每一个输入和输出组合,但没有任何效果。我所有的数据是10000行,输入是3个变量,输出是连续的

我只想比较一下越来越低的训练损失和测试损失,测试损失应该是这样的:

如果要生成这样的图形,请尝试在
model.fit()
中提供
validation\u data
,以便将每个历元的测试集MSE保存到
History
对象中

比如说,

history_obj = model.fit(input_train, output_train, validation_data=(input_test, output_test))
print(pd.DataFrame(history_obj.history))
应该给你这样的东西:

       loss  val_loss
0  0.234606  0.171870
1  0.219808  0.172064
2  0.208841  0.173415
3  0.202653  0.175946
4  0.199899  0.178934
5  0.195881  0.180141
6  0.192053  0.179317
7  0.189094  0.178707
8  0.185856  0.176857
9  0.182251  0.173282

如果要生成这样的图形,请尝试在
model.fit()
中提供
validation\u数据
,以便将每个历元的测试集MSE保存到
历史
对象中

比如说,

history_obj = model.fit(input_train, output_train, validation_data=(input_test, output_test))
print(pd.DataFrame(history_obj.history))
应该给你这样的东西:

       loss  val_loss
0  0.234606  0.171870
1  0.219808  0.172064
2  0.208841  0.173415
3  0.202653  0.175946
4  0.199899  0.178934
5  0.195881  0.180141
6  0.192053  0.179317
7  0.189094  0.178707
8  0.185856  0.176857
9  0.182251  0.173282

否。
evaluate()
的参数与
fit()
相同,即
model.evaluate(输入测试、输出测试)
。阅读。使用您的建议会出现以下错误:
PandasError:DataFrame构造函数调用不正确
虽然我不知道为什么,因为所有数据都是numpy数组
model.evaluate()
如果编译模型时没有给出
metrics
选项,则返回标量。无法从标量构造
数据帧。顺便说一句,修复这个问题没有帮助,因为它只给出最终的MSE,而不是每个历元的MSE。请参阅我的答案以获取示例。否。
evaluate()
的参数与
fit()
相同,即
model.evaluate(输入测试、输出测试)
。阅读。使用您的建议会出现以下错误:
PandasError:DataFrame构造函数调用不正确
虽然我不知道为什么,因为所有数据都是numpy数组
model.evaluate()
如果编译模型时没有给出
metrics
选项,则返回标量。无法从标量构造
数据帧。顺便说一句,修复这个问题没有帮助,因为它只给出最终的MSE,而不是每个历元的MSE。请参阅我的答案以获取示例。