我有一个多任务神经网络。我想确保当我在模型上调用
Model.evaluate()
时,我看到的分数是损失的总和。然而,它返回的是标量而不是列表,所以我不确定这个损失是什么。根据文档,对于多个输出或损失,应返回标量列表。下面是一个最小的可重现示例
import numpy as np
from keras.layers import Input, Dense
from keras.models import Model
X = np.random.random((10, 10))
y = {'pi': np.random.random((10,)), 'u': np.random.random((10,))}
in_layer = Input(shape=X.shape[1:])
out1 = Dense(1, name='pi')(in_layer)
out2 = Dense(1, name='u')(in_layer)
model = Model(inputs=in_layer, outputs=[out1,out2])
model.compile(loss={'pi': 'mean_squared_error', 'u': 'mean_squared_error'}, optimizer = 'adam')
model.fit(X,y)
print(model.evaluate(X, y)) # Returns a float.
我尝试将
y
作为列表传递,但我仍然得到相同的结果。 print(model.metrics_names)
返回'loss'
。
为此,您需要单独指定指标,否则 Model.evaluate 将聚合结果。对编译函数进行以下更改:
model.compile(
loss={'pi': 'mean_squared_error', 'u': 'mean_squared_error'},
optimizer='adam',
metrics={'pi': 'mean_squared_error', 'u': 'mean_squared_error'}
)
查看此链接,了解有关 API 的更多信息。