首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带丢弃的贝叶斯推理,验证集

带丢弃的贝叶斯推理,验证集
EN

Stack Overflow用户
提问于 2019-09-19 07:45:49
回答 1查看 36关注 0票数 0

我已经使用Keras (1)实现了贝叶斯SegNet。为此,我使用了以下自定义损失函数,该函数对验证损失执行贝叶斯推断:

代码语言:javascript
复制
def custom_loss_Bayesian(y_true, y_pred):

    train_loss = K.categorical_crossentropy(y_true, y_pred)                    

    output_list = []
    for i in range(n_MoteCarlo_Samples):                                       
        output_list.append(K.categorical_crossentropy(y_true, y_pred))

    Monty_sample_bin = K.stack(output_list,axis=0)  
    val_loss_Bayesian=K.mean(Monty_sample_bin,axis=0)

    return K.in_train_phase(train_loss, val_loss_Bayesian)

它工作得很好,但这种方法有一个很大的问题。通过增加蒙特卡罗样本的数量,训练过程需要更长的时间。这可能是因为验证损失的循环是为每个训练批次计算的,但并没有在任何地方使用。我只需要在每个时代结束后的val_loss_Bayesian。有没有更聪明的方法来做这件事?请注意,我希望使用ModelCheckpoint来保存具有最低val_loss_Bayesian的权重集。我试图通过lovecambi来实现这个解决方案,就像在2中一样,这样就可以根据批号选择lovecambi,但它不起作用。似乎在编译模型时,损失函数中的属性不能更改。任何建议都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-09-21 03:25:03

根据1中的讨论,Keras似乎在计算训练损失的同时计算每批的验证损失。然而,在训练过程中,只有运行平均值不断地报告在训练日志中。因此,上面给出的代码片段正在做它应该做的工作。它正在记录日志,因为正在计算每个小批次的验证损失。如果我需要在每个时期监控贝叶斯推理,我必须付出计算代价。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58001987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档