anchor.diff:  let seqLen = 32
   let tok = TextTokenizer(text)
   let dataset = tok.dataset(text, seqLen)
  -let loader = dataset.loader(batchSize=4)
  +let loader = dataset.loader(batchSize=4, shuffle=true)
   
   let rnn = RNN(tok.length, 512, numLayers=2, batchFirst=true)
   let net =
  
positive.code:         r.hidden <- dsharp.stack(newhs)
          if batchFirst then output.transpose(0, 1) else output
  
  
  // let rnn = RNN(32, 10, bidirectional=true, numLayers=2, bias=false, dropout=0.3)
  // let x = dsharp.randn([4; 16; 32])
  // print rnn.hidden.shape
  // let h = x --> rnn
  // print rnn.hidden.shape
  // print h.shape 
  // rnn.reset()
  
  let text = "A merry little surge of electricity piped by automatic alarm from the mood organ beside his bed awakened Rick Deckard."
  
  type TextTokenizer(?example) = 
  
negative.code: let optimizer = Adam(net, lr=dsharp.tensor(0.0005))
  
  
  // let epochs = 5
  // let start = System.DateTime.Now
  // for epoch = 1 to epochs do
  //     for i, x, t in loader.epoch() do
  //         let input =  x.[*,..seqLen-2]
  //         let target = t.[*,1..]
  //         rnn.reset()
  //         net.reverseDiff()
  //         let output = input --> net
  //         let loss = dsharp.crossEntropyLoss(output.view([-1;tok.length]), target.view(-1))
  //         loss.reverse()
  //         optimizer.step()
  //         print loss
  
  // WORK IN PROGRESS