class_docstr: A Keras Layer for Dynamic Embedding Lookup.
  
  This is useful when the gradient descent update is required for embedding
  lookup. The input of this layer is a `Tensor` of string keys and it outputs
  the embedding output as a float `Tensor`.
class_docstr_tok: ["A","Keras","Layer","for","Dynamic","Embedding","Lookup",".","This","is","useful","when","the","gradient","descent","update","is","required","for","embedding","lookup",".","The","input","of","this","layer","is","a","`","Tensor","`","of","string","keys","and","it","outputs","the","embedding","output","as","a","float","`","Tensor","`","."]
code: def build(self, input_shape):
      del input_shape  # Not used.
      # Creates a placeholder variable for the dynamic_embedding_lookup() such
      # that the gradients can be passed into _dynamic_embedding_lookup_grad().
      self.grad_placeholder = self.add_weight(
          name="grad_placeholder",
          shape=[1],
          dtype=tf.float32,
          trainable=True,
          initializer=tf.keras.initializers.zeros,
      )
  
file_path: neural-structured-learning/research/carls/dynamic_embedding_ops.py
imports: import typing
  from research.carls import context
  from research.carls import dynamic_embedding_config_pb2
  from research.carls.kernels import gen_carls_ops
  import tensorflow
label_desc: Use image node_id 2 for calling the DynamicEmbeddingLookup obj's underlying member method code with example usage: obj.build(input_shape) without return types