>我正在尝试使用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()
的更多信息。