python - 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)) 更新,我可以从上一个批次/时期中获得损失,但是因为数据会在批次之间发生变化我不再使用相同的损失函数,因此我对损失进行比较以确定步长是否应该更低是无效的。
解决方案
推荐阅读
- python - Plotly:如何使用日期时间索引在中心绘制一条线的范围?
- flask-sqlalchemy - SQLAlchemy 错误:无效事务。如何找到错误的根源?
- regex - 正则表达式在单词第一次出现时停止
- visual-studio-code - 编辑器自定义:如何更改布尔关键字的颜色?
- nginx - 如何在集群边缘和客户端证书身份验证中使用 SSL 终止公开 GKE TCP 服务
- sql - 合并行连接值
- elasticsearch - 在dict中增加嵌套的json数组,然后将输出数组对象传递给elasticsearch
- python - 如何使用python获取mongodb中键的值
- asp.net - 使用 asp.net-core 的 React SPA 在部署之间不更新(缓存)
- django - 在另一个应用程序中使用应用程序模型的对象字段作为表单 ChoiceField