我一直在运行一个以tensorflow作为后端的keras u-net实现。在实验中,我运行了 60 个 epoch。损失图如下所示,我可以假设程序已经收敛了吗?在我看来,损失并没有显着变化。
这是与定义优化器和启动训练过程相关的代码。
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])
最佳答案
它正在收敛 - 初始收敛很快,然后减慢 - 这是正常的,它可以减慢很多,但仍然有意义地改进。六十个时期可能很长,也可能不太长,具体取决于网络中参数的数量和训练数据量。在决定收敛之前,您希望在相当长的时期内基本上没有下降趋势。
一个很好的经验法则可能是“自看到最低损失以来的历元数 > 历元总数/4”。
另一个问题是是否训练过度。您需要考虑这一点的验证损失。保留 1/10 或 1/5 的训练数据并将其用于验证,当验证损失开始持续增加时,说明您训练过度。
关于tensorflow - 损失图以及判断是否收敛的标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41410007/