我希望有人向我解释为什么当我使用与训练数据集相同的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)
答案 0 :(得分:0)
以下是可能发生这种情况的一些原因:
计算 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
你看他们的计算方式有何不同?
在培训期间(计算 loss
时),启用 dropout 。培训(验证阶段,计算 val_loss
后, 辍学 将被停用。