损失图和判断是否收敛的标准
The loss plot and the criteria for determining whether it converges
我一直在运行使用 tensorflow 作为后端的 keras u-net 实现。在实验中,我运行 60个epochs。损失图如下所示,我可以假设程序已经收敛了吗?在我看来损失没有显着变化。
这是与定义优化器和启动训练过程相关的代码。
optimizer = SGD(lr=0.001, momentum=0.9, decay=0.0005, nesterov=False)
autoencoder.compile(loss=customized_loss, optimizer=optimizer, metrics= [customized_dice])
nb_epoch = 60
batch_size = 32
model.fit(imgs_train, imgs_mask_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1,callbacks=[model_checkpoint])
它正在收敛 - 最初收敛很快,然后变慢 - 这很正常,它可以放慢很多但仍然有意义地改善。 60 个 epoch 可能会很长,也可能不会很长,具体取决于网络中的参数数量和训练数据量。在您决定收敛之前,您基本上不希望在大量时期内出现下降趋势。
一个很好的经验法则可能类似于 "number of epochs since lowest loss was seen > total number of epochs / 4"。
另一个问题是是否过度训练。您需要为此查看验证损失。从训练中保留 1/10 或 1/5 的数据并将其用于验证,当验证损失开始持续增加时,您就过度训练了。
我一直在运行使用 tensorflow 作为后端的 keras u-net 实现。在实验中,我运行 60个epochs。损失图如下所示,我可以假设程序已经收敛了吗?在我看来损失没有显着变化。
这是与定义优化器和启动训练过程相关的代码。
optimizer = SGD(lr=0.001, momentum=0.9, decay=0.0005, nesterov=False)
autoencoder.compile(loss=customized_loss, optimizer=optimizer, metrics= [customized_dice])
nb_epoch = 60
batch_size = 32
model.fit(imgs_train, imgs_mask_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1,callbacks=[model_checkpoint])
它正在收敛 - 最初收敛很快,然后变慢 - 这很正常,它可以放慢很多但仍然有意义地改善。 60 个 epoch 可能会很长,也可能不会很长,具体取决于网络中的参数数量和训练数据量。在您决定收敛之前,您基本上不希望在大量时期内出现下降趋势。
一个很好的经验法则可能类似于 "number of epochs since lowest loss was seen > total number of epochs / 4"。
另一个问题是是否过度训练。您需要为此查看验证损失。从训练中保留 1/10 或 1/5 的数据并将其用于验证,当验证损失开始持续增加时,您就过度训练了。