class_docstr: Memory Network agent.
  
  Tips:
  - time features are necessary when memory order matters
  - multiple hops allow multiple steps of reasoning, but also seem to make it
      easier to learn to read the memories if you have at least two hops
  - 'adam' seems to work very poorly compared to 'sgd' for hogwild training
class_docstr_tok: ["Memory","Network","agent",".","Tips",":","-","time","features","are","necessary","when","memory","order","matters","-","multiple","hops","allow","multiple","steps","of","reasoning",",","but","also","seem","to","make","it","easier","to","learn","to","read","the","memories","if","you","have","at","least","two","hops","-","'adam","'","seems","to","work","very","poorly","compared","to","'sgd","'","for","hogwild","training"]
docstr: Add the time features to the dictionary before building the model.
docstr_tok: ["Add","the","time","features","to","the","dictionary","before","building","the","model","."]
code: def build_dictionary(self):
      """
      Add the time features to the dictionary before building the model.
      """
      d = super().build_dictionary()
      if self.use_time_features:
          # add time features to dictionary before building the model
          for i in range(self.memsize):
              d[self._time_feature(i)] = 100_000_000 + i
      return d
  
imports: from typing import Optional
  from parlai.core.params import ParlaiParser
  from parlai.core.opt import Opt
  from functools import lru_cache
  import torch
  from parlai.core.torch_ranker_agent import TorchRankerAgent
  from .modules import MemNN, opt_to_kwargs
label_desc: Use image node_id 3 for calling the MemnnAgent obj's underlying member method code with example usage: obj.build_dictionary() and returns: d