class_docstr: Discrete filtered Q-network.
  
  This produces filtered Q values according to the method used in the discrete
  BCQ algorithm (https://arxiv.org/pdf/1910.01708.pdf - section 4).
class_docstr_tok: ["Discrete","filtered","Q-network",".","This","produces","filtered","Q","values","according","to","the","method","used","in","the","discrete","BCQ","algorithm","(","https",":","\/\/arxiv.org\/pdf\/1910.01708.pdf","-","section","4",")","."]
code: def __call__(self, o_t: tf.Tensor) -> tf.Tensor:
      q_t = self.q_network(o_t)
      g_t = tf.nn.softmax(self.g_network(o_t))
      normalized_g_t = g_t / tf.reduce_max(g_t, axis=-1, keepdims=True)
  
      # Filter actions based on g_network outputs.
      min_q = tf.reduce_min(q_t, axis=-1, keepdims=True)
      return tf.where(normalized_g_t >= self._threshold, q_t, min_q)
  
imports: import sonnet
  import tensorflow
label_desc: Use image node_id 2 for calling the DiscreteFilteredQNetwork obj's underlying member method code with example usage: obj.__call__(o_t) and returns: tf