class_docstr: Implementation of the node embeddings as in Watch Your Step: Learning Node Embeddings via Graph Attention
  https://arxiv.org/pdf/1710.09599.pdf.
  
  This model requires specification of the number of random walks starting from each node, and the embedding dimension
  to use for the node embeddings.
  
  .. seealso::
  
     Example using Watch Your Step: `unsupervised representation learning <https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-embeddings.html>`__
  
     Appropriate data generator: :class:`.AdjacencyPowerGenerator`.
  
     Appropriate loss function: :func:`.graph_log_likelihood`.
  
  Args:
      generator (AdjacencyPowerGenerator): the generator
      num_walks (int): the number of random walks starting at each node to use when calculating the expected random
          walks. Defaults to `80` as this value was found to perform well by the authors of the paper.
      embedding dimension (int): the dimension to use for the node embeddings (must be an even number).
      attention_initializer (str or func, optional): The initialiser to use for the attention weights.
      attention_regularizer (str or func, optional): The regulariser to use for the attention weights.
      attention_constraint (str or func, optional): The constraint to use for the attention weights.
      embeddings_initializer (str or func, optional): The initialiser to use for the embeddings.
      embeddings_regularizer (str or func, optional): The regulariser to use for the embeddings.
      embeddings_constraint (str or func, optional): The constraint to use for the embeddings.
class_docstr_tok: ["Implementation","of","the","node","embeddings","as","in","Watch","Your","Step",":","Learning","Node","Embeddings","via","Graph","Attention","https",":","\/\/arxiv.org\/pdf\/1710.09599.pdf",".","This","model","requires","specification","of","the","number","of","random","walks","starting","from","each","node",",","and","the","embedding","dimension","to","use","for","the","node","embeddings",".","..","seealso",":",":","Example","using","Watch","Your","Step",":","`","unsupervised","representation","learning","<","https",":","\/\/stellargraph.readthedocs.io\/en\/stable\/demos\/embeddings\/watch-your-step-embeddings.html",">","`","__","Appropriate","data","generator",":",":","class",":","`",".AdjacencyPowerGenerator","`",".","Appropriate","loss","function",":",":","func",":","`",".graph_log_likelihood","`",".","Args",":","generator","(","AdjacencyPowerGenerator",")",":","the","generator","num_walks","(","int",")",":","the","number","of","random","walks","starting","at","each","node","to","use","when","calculating","the","expected","random","walks",".","Defaults","to","`","80","`","as","this","value","was","found","to","perform","well","by","the","authors","of","the","paper",".","embedding","dimension","(","int",")",":","the","dimension","to","use","for","the","node","embeddings","(","must","be","an","even","number",")",".","attention_initializer","(","str","or","func",",","optional",")",":","The","initialiser","to","use","for","the","attention","weights",".","attention_regularizer","(","str","or","func",",","optional",")",":","The","regulariser","to","use","for","the","attention","weights",".","attention_constraint","(","str","or","func",",","optional",")",":","The","constraint","to","use","for","the","attention","weights",".","embeddings_initializer","(","str","or","func",",","optional",")",":","The","initialiser","to","use","for","the","embeddings",".","embeddings_regularizer","(","str","or","func",",","optional",")",":","The","regulariser","to","use","for","the","embeddings",".","embeddings_constraint","(","str","or","func",",","optional",")",":","The","constraint","to","use","for","the","embeddings","."]
docstr: This function builds the layers for a keras model.
  
  returns:
      A tuple of (inputs, outputs) to use with a keras model.
docstr_tok: ["This","function","builds","the","layers","for","a","keras","model",".","returns",":","A","tuple","of","(","inputs",",","outputs",")","to","use","with","a","keras","model","."]
code: def in_out_tensors(self):
      """
      This function builds the layers for a keras model.
  
      returns:
          A tuple of (inputs, outputs) to use with a keras model.
      """
  
      input_rows = Input(
          batch_shape=(None,), name="row_node_ids", dtype="int64"
      )
      input_powers = Input(
          batch_shape=(None, self.num_powers, self.n_nodes)
      )
  
      vectors_left = self._left_embedding(input_rows)
  
      # all right embeddings are used in every batch. to avoid unnecessary lookups the right embeddings are stored
      # in a dense layer to enable efficient dot product between the left vectors in the current batch and all right
      # vectors
      outer_product = self._right_embedding(vectors_left)
  
      expected_walk = self.num_walks * self._attentive_walk(
          input_powers
      )
  
      # layer to add batch dimension of 1 to output
      expander = Lambda(lambda x: K.expand_dims(x, axis=1))
  
      output = Concatenate(axis=1)(
          [expander(expected_walk), expander(outer_product)]
      )
  
      return [input_rows, input_powers], output
  
imports: import tensorflow
  from tensorflow.keras.layers import Layer, Embedding, Input, Lambda, Concatenate, Dense
  from tensorflow.keras import backend
  from tensorflow.keras import initializers, constraints, regularizers
  import numpy
  import warnings
  from ..mapper.adjacency_generators import AdjacencyPowerGenerator
  from ..core.validation import require_integer_in_range
  from .misc import deprecated_model_function
label_desc: Use image node_id 3 for calling the WatchYourStep obj's underlying member method code with example usage: obj.in_out_tensors() and returns: list,  output