Python Keras模型。评估不正确的形状
我对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
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。请参阅我的答案以获取示例。