首页 > 解决方案 > Keras 在优化器中更新损失值

问题描述

我正在构建一个优化器(https://github.com/keras-team/keras/blob/master/keras/optimizers.py),它计算搜索方向,然后尝试几个不同的步长来找到损失最低的. 但是,在尝试根据损失本身的值更改步长时,我遇到了问题。似乎损失(这是一个取决于网络权重和数据的张量)在每个训练循环期间不能多次更新/重新计算,我觉得这很奇怪。

这是我在get_updates(self, loss, params) 中的相关代码:

    L1 = loss

    for p, direction in zip(params, directions):
        self.updates.append(K.update(p, p+length*direction))

    L2 = loss

    for p, direction in zip(params, directions):
        self.updates.append(K.update(p, tf.cond( L2<L1, lambda: p+0.5*length*direction, lambda: p))

问题是 L1 和 L2 是相同的,无论我尝试什么,在更新权重后我都无法获得更新的损失。我也试过 p = p+length*direction 和 p.assign() 但损失没有更新。有谁知道我如何获得损失的更新值?请注意,如果我保存损失值并使用 self.updates.append(K.update(self.prev_loss,loss)) 更新,我可以从上一个批次/时期中获得损失,但是因为数据会在批次之间发生变化我不再使用相同的损失函数,因此我对损失进行比较以确定步长是否应该更低是无效的。

标签: pythontensorflowkerasdeep-learningneural-network

解决方案


推荐阅读