在部分输出中评估keras模型

时间:2019-08-01 22:29:52

标签: python-3.x tensorflow keras regression

我有一个使用Keras训练的多输出回归模型。以下是我的网络体系结构:

model.add(Dense(4048, input_dim=16128,, activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(3))

通过致电:

score = model.evaluate(X_test, y_test)

通过与数组大小3的地面实况进行比较,我可以获得测试数据和预测值(数组大小为3)的准确性和平均绝对误差。

我的问题是我如何仅对一个输出值评估测试数据,而忽略其他两个。 我不知何故想要评估平均均值误差以及单个绝对误差。

2 个答案:

答案 0 :(得分:1)

我建议使用以下两个选项之一:

a)使用Keras functional API定义两个分别用于评估和训练网络的模型model1model2

from keras.layers import Input, Dense, Concatenate
from keras.models import Model

a = Input((16128,))
h = Dense(4048, activation='relu')(a)
h = Dense(128, activation='relu')(h)
h1 = Dense(1)(h)
model1 = Model(a, h1)

h = Dense(2)(h)
h2 = Concatenate()([h1, h])
model2 = Model(a, h2)

# ... train on model2

# Evaluate on model1, which outputs the unit of interest
score = model1.evaluate(X_test, y_test)

b)定义您的custom Keras metrics,以便在计算指标时专门选择感兴趣的单位。

答案 1 :(得分:0)

感谢您的提示。我选择了选项b,并按如下所示实施了自定义指标:

def MAE_ROLL(y_true, y_pred):
 return K.mean(K.abs(y_pred[:, 0] - y_true[:, 0]))

def MAE_PITCH(y_true, y_pred):
 return K.mean(K.abs(y_pred[:, 1] - y_true[:, 1]))

def MAE_YAW(y_true, y_pred):
 return K.mean(K.abs(y_pred[:, 2] - y_true[:, 2]))

model.compile(loss=mean_absolute_error, optimizer='adam',metrics=[MAE_ROLL,MAE_PITCH,MAE_YAW])