class_docstr: Conditional Random Field layer (tf.keras)
  `CRF` can be used as the last layer in a network (as a classifier). Input shape (features)
  must be equal to the number of classes the CRF can predict (a linear layer is recommended).
  
  Note: the loss and accuracy functions of networks using `CRF` must
  use the provided loss and accuracy functions (denoted as loss and viterbi_accuracy)
  as the classification of sequences are used with the layers internal weights.
  
  Args:
      num_labels (int): the number of labels to tag each temporal input.
  
  Input shape:
      nD tensor with shape `(batch_size, sentence length, num_classes)`.
  
  Output shape:
      nD tensor with shape: `(batch_size, sentence length, num_classes)`.
code: def viterbi_accuracy(self):
      def accuracy(y_true, y_pred):
          shape = tf.shape(y_pred)
          sequence_lengths = tf.ones(shape[0], dtype=tf.int32) * (
              shape[1]
          )
          viterbi_sequence, _ = tf.contrib.crf.crf_decode(
              y_pred, self.transitions, sequence_lengths
          )
          output = tf.keras.backend.one_hot(
              viterbi_sequence, self.output_dim
          )
          return tf.keras.metrics.categorical_accuracy(y_true, output)
  
      accuracy.func_name = "viterbi_accuracy"
      return accuracy
  
file_path: nlp-architect/nlp_architect/nn/tensorflow/python/keras/layers/crf.py
imports: import tensorflow
label_desc: Use image node_id 7 for calling the CRF obj's underlying member method code with example usage: obj.viterbi_accuracy() and returns: accuracy, tf