我一直在使用tensorflow作为后端运行keras u-net实现。在实验中,我运行了60个时代。损失图如下所示,我可以假设程序已收敛吗?在我看来,损失并没有显着变化。
这是与定义优化程序和启动培训过程相关的代码。
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])
答案 0 :(得分:0)
它正在收敛 - 初始收敛很快,然后它减慢 - 这是正常的,它可以减慢很多并且仍然有意义地改善。 60个时期可能会或可能不会很长,具体取决于您的网络中的参数数量和培训数据量。在您决定融合之前,您希望在大量时期内基本没有下降趋势。
一个非常好的经验法则可能类似于“自从看到最低损失后的时期数量>时期总数/ 4”。
另一个问题是它是否过度训练。您需要查看验证丢失。阻止来自训练数据的1/10或1/5,并将其用于验证,当验证损失开始持续增加时,你就会过度训练。