我正在尝试使用格式为:
的代码为我的损失函数实现最大缩图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]
。到目前为止,它创建了一个具有最大值的数组。
任何提示都将不胜感激。
答案 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_condition
和tf_while_body
只被调用一次以产生相关的tensorflow操作。这两个函数在循环中调用 NOT 。它们返回的操作将在sess.run
计算期间在tensorflow图中循环执行。