     dimBatch = srcWordBatch.size();
   }
 
-  //auto buildEncoderGRU = [=](const std::string& prefix){
-  //  ParametersGRU encParams;
-  //  encParams.Uz = g->param(prefix + "_Uz", {dimEncState, dimEncState},
-  //                          init=glorot_uniform);
-  //  encParams.Ur = g->param(prefix + "_Ur", {dimEncState, dimEncState},
-  //                          init=glorot_uniform);
-  //
-  //  encParams.Wz = g->param(prefix + "_Wz", {dimSrcEmb, dimEncState},
-  //                          init=glorot_uniform);
-  //  encParams.Wr = g->param(prefix + "_Wr", {dimSrcEmb, dimEncState},
-  //                          init=glorot_uniform);
-  //
-  //  encParams.bz = g->param(prefix + "_bz", {1, dimEncState}, init=zeros);
-  //  encParams.br = g->param(prefix + "_br", {1, dimEncState}, init=zeros);
-  //
-  //  encParams.Ux = g->param(prefix + "_Ux", {dimEncState, dimEncState},
-  //                          init=glorot_uniform);
-  //  encParams.Wx = g->param(prefix + "_Wx", {dimSrcEmb, dimEncState},
-  //                          init=glorot_uniform);
-  //  encParams.bx = g->param(prefix + "_bx", {1, dimEncState}, init=zeros);
-  //
-  //  return RNN<GRU>(encParams);
-  //};
+  auto buildEncoderGRU = [=](const std::string& prefix){
+    ParametersGRU encParams;
+    encParams.Uz = g->param(prefix + "_Uz", {dimEncState, dimEncState},
+                            init=glorot_uniform);
+    encParams.Ur = g->param(prefix + "_Ur", {dimEncState, dimEncState},
+                            init=glorot_uniform);
+  
+    encParams.Wz = g->param(prefix + "_Wz", {dimSrcEmb, dimEncState},
+                            init=glorot_uniform);
+    encParams.Wr = g->param(prefix + "_Wr", {dimSrcEmb, dimEncState},
+                            init=glorot_uniform);
+  
+    encParams.bz = g->param(prefix + "_bz", {1, dimEncState}, init=zeros);
+    encParams.br = g->param(prefix + "_br", {1, dimEncState}, init=zeros);
+  
+    encParams.Ux = g->param(prefix + "_Ux", {dimEncState, dimEncState},
+                            init=glorot_uniform);
+    encParams.Wx = g->param(prefix + "_Wx", {dimSrcEmb, dimEncState},
+                            init=glorot_uniform);
+    encParams.bx = g->param(prefix + "_bx", {1, dimEncState}, init=zeros);
+  
+    return RNN<GRU>(encParams);
+  };
 
-  //auto buildEncoderGRU = [=](const std::string& prefix){
-  //  ParametersGRUFast encParams;
-  //  encParams.U = g->param(prefix + "_U", {dimEncState, 3 * dimEncState},
-  //                         init=glorot_uniform);
-  //
-  //  encParams.W = g->param(prefix + "_W", {dimSrcEmb, 3 * dimEncState},
-  //                         init=glorot_uniform);
-  //
-  //  encParams.b = g->param(prefix + "_b", {1, 3 * dimEncState}, init=zeros);
-  //
-  //  return RNN<GRUFast>(encParams);
-  //};
+  auto buildEncoderGRU2 = [=](const std::string& prefix){
+    ParametersGRUFast encParams;
+    encParams.U = g->param(prefix + "_U", {dimEncState, 3 * dimEncState},
+                           init=glorot_uniform);
+  
+    encParams.W = g->param(prefix + "_W", {dimSrcEmb, 3 * dimEncState},
+                           init=glorot_uniform);
+  
+    encParams.b = g->param(prefix + "_b", {1, 3 * dimEncState}, init=zeros);
+  
+    return RNN<GRUFast>(encParams);
+  };
 
-  auto buildEncoderGRU = [=](const std::string& prefix){
+  auto buildEncoderGRU3 = [=](const std::string& prefix){
     auto U = g->param(prefix + "_U", {dimEncState, 2 * dimEncState},
                       init=glorot_uniform);
 

               const SentBatch& srcSentenceBatch) {
  g->clear();

  int dimSrcVoc = 30000;
  int dimSrcEmb = 128;
  int dimEncState = 1024;
  int dimBatch = 1;


}

SentBatch generateBatch(size_t batchSize) {
  size_t length = rand() % 40 + 10;
  return SentBatch(length, WordBatch(batchSize));
}

