Tensorflow:如何实现累积最大值?

时间:2018-03-16 06:06:18

标签: python tensorflow vectorization

我正在尝试使用格式为:

的代码为我的损失函数实现最大缩图
x = cumulative product of returns tensor
z = cumulative max of x
g = minimum of z / x

但我仍然坚持如何计算Tensorflow中x的累积最大值。例如:给定数组[0,2,5,3,8,1,7],该数组的累积最大值为[0,2,5,5,8,8,8]。到目前为止,它创建了一个具有最大值的数组。

任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:4)

这是使用张量流while循环的cumulative_max的实现,它采用n=len(x)次迭代。代码以copy-paste runnable为例。

import tensorflow as tf

def tf_while_condition(x, loop_counter):
  return tf.not_equal(loop_counter, 0)

def tf_while_body(x, loop_counter):
  loop_counter -= 1
  y = tf.concat(([x[0]], x[:-1]), axis=0)
  z = tf.maximum(x, y)
  return z, loop_counter

x = tf.constant([0,2,5,3,8,1,7])

cumulative_max, _ = tf.while_loop(cond=tf_while_condition, 
                                  body=tf_while_body, 
                                  loop_vars=(x, x.shape[0]))

with tf.Session() as sess:
  print(sess.run(cumulative_max))

结果:

[0 2 5 5 8 8 8]

注意:如果你有一个大的向量来计算并且你不需要backprop,那么在back_prop=False中包含tf.while_loop可能是值得的。

理解TF while循环的关键是要理解基于python的函数tf_while_conditiontf_while_body只被调用一次以产生相关的tensorflow操作。这两个函数在循环中调用 NOT 。它们返回的操作将在sess.run计算期间在tensorflow图中循环执行。