Tensorflow tf.reduce_min如何从某些索引而不是整个张量中获取最小值



>我正在尝试使用tensorflow学习DQN。在我的操作空间中,我为每个状态都有有效和无效的操作。我将q_target网络设置为

t1 = tf.layers.dense(s_, 20, tf.nn.relu, w,b, name='t1')
q_next = tf.layers.dense(t1, n_actions, w,b, name='t2')

我怎样才能让它在张量流中工作,这样

q_target = r + self.gamma * max(q_next(valid_actions))

例如:

q_target = [1, 2, 3;4, 5, 6], 
valid_actions = [true,true,false;false,true,false],
output: max(q_next_valid) = [2;5]

谢谢!

基于您的示例方案。

您可以尝试使用tf.math.reduce_max()方法实现这一点。

import tensorflow as tf  # Tensorflow 2.1.0
q_target = [[1, 2, 3],[4, 5, 6]] 
valid_actions = [[True,True,False],[False,True,False]]
valid_actions = tf.cast(valid_actions, dtype = tf.int32)
# output: max(q_next_valid) = [2;5]
tf.math.reduce_max(q_target*valid_actions, axis=1, keepdims=False) # <tf.Tensor: shape=(2,), dtype=int32, numpy=array([2, 5], dtype=int32)>
tf.math.reduce_max(q_target*valid_actions, axis=1, keepdims=True)  # <tf.Tensor: shape=(2, 1), dtype=int32, numpy= array([[2],[5]], dtype=int32)>

我将您的布尔值转换为整数,以便我可以将其乘以将错误归零q_target。而且当你设置keepdims = True它将保留原始的张量秩,因此当False时,它将把张量的秩减少 1。

您可以在此链接的文档中找到有关tf.math.reduce_max()的更多信息。

最新更新