gpt4 book ai didi

python - 使用 Tensorflow 后端时,如何打印 Keras 的 SGD 优化器变体的中间状态

转载 作者:太空宇宙 更新时间:2023-11-03 20:52:16 25 4
gpt4 key购买 nike

我想编写 Keras 的 SGD 的一个变体,它允许在指定的迭代中离散改变步长。我正在使用 Tensorflow 后端。

为了帮助调试,我试图让优化器的 get_updates 方法向我打印消息,但我似乎无法做到这一点。我已经尝试过标准打印语句和 tf.Print,但都不起作用。直接来自 Keras SGD 优化器 cldass 的相关代码如下所示:

@interfaces.legacy_get_updates_support
def get_updates(self, loss, params):
print (" -------------------------> Getting updates <------------------------------------------")
grads = self.get_gradients(loss, params)
self.updates = [K.update_add(self.iterations, 1)]
tf.Print(self.iterations,
[self.iterations],
message="-------------------------------> GETTING UPDATES <----------------------------------------")

lr = self.lr
if self.initial_decay > 0:
lr = lr * (1. / (1. + self.decay * K.cast(self.iterations,
K.dtype(self.decay))))

# momentum
shapes = [K.int_shape(p) for p in params]
moments = [K.zeros(shape) for shape in shapes]
self.weights = [self.iterations] + moments
for p, g, m in zip(params, grads, moments):
v = self.momentum * m - lr * g # velocity
self.updates.append(K.update(m, v))

if self.nesterov:
new_p = p + self.momentum * v - lr * g
else:
new_p = p + v

# Apply constraints.
if getattr(p, 'constraint', None) is not None:
new_p = p.constraint(new_p)

self.updates.append(K.update(p, new_p))
return self.updates

虽然 print 语句确实成功地转发了一条消息,但仅此而已。我希望每次更新参数时都能看到输出(即每批之后)。相反,我只看到第一个训练周期之前的打印输出。

我做错了什么?我是否仍然被图形计算的困难(对我来说)所困扰?另外,tf.Print 不应该产生一些文本输出吗?

最佳答案

我想我知道这是怎么回事......

  1. 我的 print 语句仅在调用 get_updates 时产生输出。它仅被调用一次,并返回用于实际计算更新的图(子图?)。

  2. 我的tf.Print没有产生输出,因为我从未明确地将它放入计算图中

关于python - 使用 Tensorflow 后端时,如何打印 Keras 的 SGD 优化器变体的中间状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56242341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com