【问题标题】:How can I print intermediate states for a variation of a Keras' SGD optimizer when using Tensorflow backend使用 Tensorflow 后端时,如何打印 Keras 的 SGD 优化器变体的中间状态
【发布时间】:2019-05-21 16:07:03
【问题描述】:

我想写一个 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 不应该产生一些文本输出吗?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    我想我知道这里发生了什么.....

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

    2. 我的tf.Print 不产生任何输出,因为我从未明确地将其放入计算图中

    【讨论】:

      【解决方案2】:

      为了在图形模式下使用tf.print,您可以直接使用tf.print 作为tf.Print 的替代品,您只需在执行a 之前强制执行tf.print 操作model function 中的张量。详情可以查看here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-15
        • 2018-05-09
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多