class_docstr: The fully connected layer used by the classification head in pointnet.
  
  Note:
    Differently from the standard Keras Conv2 layer, the order of ops is:
      1. fully connected layer
      2. batch normalization layer
      3. ReLU activation unit
class_docstr_tok: ["The","fully","connected","layer","used","by","the","classification","head","in","pointnet",".","Note",":","Differently","from","the","standard","Keras","Conv2","layer",",","the","order","of","ops","is",":","1.","fully","connected","layer","2.","batch","normalization","layer","3",".","ReLU","activation","unit"]
docstr: Builds the layer with a specified input_shape.
docstr_tok: ["Builds","the","layer","with","a","specified","input_shape","."]
code: def build(self, input_shape: tf.Tensor):
      """Builds the layer with a specified input_shape."""
      self.dense = tf.keras.layers.Dense(
          self.channels, input_shape=input_shape
      )
      self.bn = tf.keras.layers.BatchNormalization(
          momentum=self.momentum
      )
  
imports: from typing import Optional
  import tensorflow
  from tensorflow_graphics.util import export_api
label_desc: Use image node_id 2 for calling the PointNetDenseLayer obj's underlying member method code with example usage: obj.build(input_shape) without return types