class_docstr: A model containing a CNN with N Conv2D layers.
  
  All layers share the same activation function, bias setup (use bias or not), and
  LayerNormalization setup (use layer normalization or not).
  
  Note that there is no flattening nor an additional dense layer at the end of the
  stack. The output of the network is a 3D tensor of dimensions [width x height x num
  output filters].
class_docstr_tok: ["A","model","containing","a","CNN","with","N","Conv2D","layers",".","All","layers","share","the","same","activation","function",",","bias","setup","(","use","bias","or","not",")",",","and","LayerNormalization","setup","(","use","layer","normalization","or","not",")",".","Note","that","there","is","no","flattening","nor","an","additional","dense","layer","at","the","end","of","the","stack",".","The","output","of","the","network","is","a","3D","tensor","of","dimensions","[","width","x","height","x","num","output","filters","]","."]
code: def call(self, inputs, **kwargs):
      return self.cnn(tf.cast(inputs, self.expected_input_dtype))
  
file_path: ray/python/ray/rllib/core/models/tf/primitives.py
imports: from typing import Callable, Dict, List, Optional, Tuple, Union
  from ray.rllib.models.utils import get_activation_fn, get_initializer_fn
  from ray.rllib.utils.framework import try_import_tf
label_desc: Use image node_id 2 for calling the TfCNN obj's underlying member method code with example usage: obj.call(inputs) and returns: self