【问题标题】:Tensorflow return error for each output value每个输出值的Tensorflow返回错误
【发布时间】:2021-07-20 09:46:31
【问题描述】:

我有一个具有 3 个输出值的神经网络(回归)。在训练期间,我得到一个 RMSE 值,表示对测试数据的预测性能。有没有一种方法可以代替测试数据的每个输出值得到错误?也就是说,我得到 3 个 RMSE 值,每个输出一个。

model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(64, activation=tf.nn.relu),
  tf.keras.layers.Dense(32, activation=tf.nn.relu),
  tf.keras.layers.Dense(16, activation=tf.nn.relu),
  tf.keras.layers.Dense(3)
])

model.compile(optimizer='adam', loss=root_mean_squared_error)

def root_mean_squared_error(y_true, y_pred):
    return tf.sqrt(tf.losses.mean_squared_error(y_true, y_pred))

【问题讨论】:

  • 我认为你需要创建 3 个不同的层与最后一层平行连接,但只有一层,即tf.keras.layers.Dense(16, activation="relu").stackoverflow.com/questions/59940812/… 可能会有所帮助。

标签: tensorflow


【解决方案1】:

这可以使用函数式 API 来完成。假设我们想要获得两个不同的输出,并且输出是一个连续输出(回归问题),目标变量为 target1,target2。然后模型可以构建为:

Example:

def build_model():
   input_layer =  keras.Input(shape=(train.shape[1],))
   dense1 = layers.Dense(64, activation="relu")(input_layer)
   dense2 = layers.Dense(32, activation="relu")(dense1)
   # first output is fed from dense1(target1 variable)
   output1 = layers.Dense(1, activation="linear", name="target1")(dense2)

   dense3 = layers.Dense(32, activation="relu")(dense1) # getting the 
   # second output is fed from dense3(target2 variable)
  output2 = layers.Dense(1, activation="linear", name="target2")(dense3)

   # Define the model with input layer and a list of output layers.

   model = keras.Model(inputs=input_layer, outputs=[output1, output2])

   return model

   # Now compile the model
   # specify the optimizer

   model.compile(
            optimizer = keras.optimizers.Adam(),
            loss = {"target1":"mse", "target2":"mse"},
            metrics={'target1':tf.keras.metrics.RootMeanSquaredError(),
          'target2':tf.keras.metrics.RootMeanSquaredError()},
               )

现在,Y 数据或目标数据必须是包含 Y1,Y2 的元组或列表,其中 Y1 和 Y2 是 numpy 一维数组。

    # fit the model.
    # Train the model for 10 epochs
    history = model.fit(train_X, train_Y,
    epochs=100, batch_size=10, validation_data=(validation_X, validation_Y))

在训练期间会看到损失“mse”和度量“rmse”。

预测计算如下:

Y_pred = model.predict(test_X)
target1_pred = Y_pred[0]
target2_pred = Y_pred[1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2013-07-23
    • 2020-07-24
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多