class_docstr: Calculates the representation by passing the features through a linear embedding.
  Rough approximation of http://ceur-ws.org/Vol-1448/paper4.pdf
code: def connect_representation_graph(
      self, tf_features, n_components, n_features, node_name_ending
  ):
      # Weights are normalized before building the variable
      raw_weights = tf.random_normal(
          [n_features, n_components], stddev=1.0
      )
      normalized_weights = tf.nn.l2_normalize(raw_weights, 1)
  
      # Create variable nodes
      tf_linear_weights = tf.Variable(
          normalized_weights,
          name="linear_weights_{}".format(node_name_ending),
      )
      tf_repr = tf.sparse_tensor_dense_matmul(
          tf_features, tf_linear_weights
      )
  
      # Return repr layer and variables
      return tf_repr, [tf_linear_weights]
  
imports: import abc
  import tensorflow
label_desc: Use image node_id 1 for calling the LinearRepresentationGraph obj's underlying member method code with example usage: obj.connect_representation_graph(tf_features, n_components, n_features, node_name_ending) and returns: tf_repr,  list