模型训练阶段:具有相同数据集的validation_data

时间:2018-05-02 18:19:07

标签: r keras

我希望有人向我解释为什么当我使用与训练数据集相同的validation_data进行训练时,我会得到两条不同且不叠加的曲线?

x <- matrix(rnorm(50 * 10), nrow = 50)
y <- matrix(rnorm(50), nrow = 50)

model <- keras_model_sequential()
model %>%
  layer_dense(units = 1, input_shape = dim(x)[2]) %>%
  layer_dropout(rate = 1) %>%
  layer_activation("linear")

model %>% compile(
  loss = "mse",
  optimizer = "adam",
  metrics = "mse"
)

history <- model %>% fit(x, y, batch_size = 1, epochs = 10, verbose = 1, validation_data = list(x, y))
plot(history)

enter image description here

1 个答案:

答案 0 :(得分:0)

以下是可能发生这种情况的一些原因:

  1. 计算 loss ,并在培训期间 。这意味着在损失计算之间存在梯度更新,因此下一次对小批量的损失是 不同 模型的损失。另一方面, val_loss 相同之后 计算 strong>整个数据集的模型。这就是为什么它们的价值不同。

    直观地说,就像这样:

    Epoch 1:
      batch_1 -> nnet_1 -> loss_1 -> optimize nnet_1 to nnet_2
      batch_2 -> nnet_2 -> loss_2 -> optimize nnet_2 to nnet_3
      ...
      batch_n -> nnet_n -> loss_n -> optimize nnet_n-1 to nnet_n
    loss = loss_1 + loss_2 + ... + loss_n
    val_loss = loss of the nnet_n over whole dataset
    

    你看他们的计算方式有何不同?

  2. 在培训期间(计算 loss 时),启用 dropout 。培训(验证阶段,计算 val_loss 后, 辍学 将被停用。