我有一个使用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)的准确性和平均绝对误差。
我的问题是我如何仅对一个输出值评估测试数据,而忽略其他两个。 我不知何故想要评估平均均值误差以及单个绝对误差。
答案 0 :(得分:1)
我建议使用以下两个选项之一:
a)使用Keras functional API定义两个分别用于评估和训练网络的模型model1
和model2
:
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])