code: def __init__(
      self, num_steps, embed_size=16, hidden_dim=96, edge_drop=0.1
  ):
      super(SudokuNN, self).__init__()
      self.num_steps = num_steps
  
      self.digit_embed = nn.Embedding(10, embed_size)
      self.row_embed = nn.Embedding(9, embed_size)
      self.col_embed = nn.Embedding(9, embed_size)
  
      self.input_layer = nn.Sequential(
          nn.Linear(3 * embed_size, hidden_dim),
          nn.ReLU(),
          nn.Linear(hidden_dim, hidden_dim),
          nn.ReLU(),
          nn.Linear(hidden_dim, hidden_dim),
          nn.ReLU(),
          nn.Linear(hidden_dim, hidden_dim),
      )
  
      self.lstm = nn.LSTMCell(hidden_dim * 2, hidden_dim, bias=False)
  
      msg_layer = nn.Sequential(
          nn.Linear(2 * hidden_dim, hidden_dim),
          nn.ReLU(),
          nn.Linear(hidden_dim, hidden_dim),
          nn.ReLU(),
          nn.Linear(hidden_dim, hidden_dim),
          nn.ReLU(),
          nn.Linear(hidden_dim, hidden_dim),
      )
  
      self.rrn = RRN(
          msg_layer, self.node_update_func, num_steps, edge_drop
      )
  
      self.output_layer = nn.Linear(hidden_dim, 10)
  
      self.loss_func = nn.CrossEntropyLoss()
  
file_path: dgl/examples/pytorch/rrn/sudoku.py
imports: import torch
  from rrn import RRN
  from torch import nn
label_desc: Use image node_id 1 to create a new SudokuNN object from inherited base classes: nn with example: obj = SudokuNN(num_steps, embed_size, hidden_dim, edge_drop)