class_docstr: The PointNet 'Vanilla' classifier (i.e. without spatial transformer).
class_docstr_tok: ["The","PointNet","'Vanilla","'","classifier","(","i.e",".","without","spatial","transformer",")","."]
docstr: The classification model training loss.
  
  Note:
    see tf.nn.sparse_softmax_cross_entropy_with_logits
  
  Args:
    labels: a tensor with shape `[B,]`
    logits: a tensor with shape `[B,num_classes]`
  
  Returns:
    A tensor with the same shape as labels and of the same type as logits.
docstr_tok: ["The","classification","model","training","loss",".","Note",":","see","tf.nn.sparse_softmax_cross_entropy_with_logits","Args",":","labels",":","a","tensor","with","shape","`","[","B",",","]","`","logits",":","a","tensor","with","shape","`","[","B",",","num_classes","]","`","Returns",":","A","tensor","with","the","same","shape","as","labels","and","of","the","same","type","as","logits","."]
code: def loss(labels: tf.Tensor, logits: tf.Tensor) -> tf.Tensor:
      """The classification model training loss.
  
      Note:
        see tf.nn.sparse_softmax_cross_entropy_with_logits
  
      Args:
        labels: a tensor with shape `[B,]`
        logits: a tensor with shape `[B,num_classes]`
  
      Returns:
        A tensor with the same shape as labels and of the same type as logits.
      """
      cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits
      residual = cross_entropy(labels, logits)
      return tf.reduce_mean(input_tensor=residual)
  
imports: from typing import Optional
  import tensorflow
  from tensorflow_graphics.util import export_api
label_desc: Use image node_id 3 for calling the PointNetVanillaClassifier obj's underlying member method code with example usage: obj.loss(labels, logits) and returns: tf