【问题标题】:Evaluate keras model on part of output在部分输出上评估 keras 模型
【发布时间】:2019-12-10 13:35:28
【问题描述】:

我有一个使用 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)的准确度和平均绝对误差。

我的问题是如何仅根据一个输出值评估测试数据,而忽略其他两个。 我想以某种方式评估平均平均误差以及个别绝对误差。

【问题讨论】:

    标签: python-3.x tensorflow keras regression


    【解决方案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 以在计算指标时专门选择感兴趣的单位。

    【讨论】:

      【解决方案2】:

      感谢您的提示。我采用了选项 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])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多