+ if desc is None:
+ desc = f"epoch-{split}"
+ for batch in tqdm.tqdm(
+ zip(input.split(self.batch_size), policies.split(self.batch_size)),
+ dynamic_ncols=True,
+ desc=desc,
+ ):
+ yield batch
+
+ def vocabulary_size(self):
+ return self.nb_codes
+
+ def compute_error(self, model, split="train", nb_to_use=-1):
+ nb_total, nb_correct = 0, 0
+ for input in task.batches(split, nb_to_use):
+ result = input.clone()
+ ar_mask = result.new_zeros(result.size())
+ ar_mask[:, self.height * self.width :] = 1
+ result *= 1 - ar_mask
+ masked_inplace_autoregression(
+ model, self.batch_size, result, ar_mask, device=self.device
+ )
+ mazes, paths = self.seq2map(result)
+ nb_correct += maze.path_correctness(mazes, paths).long().sum()
+ nb_total += mazes.size(0)
+
+ return nb_total, nb_correct
+
+ def produce_results(self, n_epoch, model):
+ with torch.autograd.no_grad():
+ t = model.training
+ model.eval()
+
+ train_nb_total, train_nb_correct = self.compute_error(
+ model, "train", nb_to_use=1000
+ )
+ log_string(
+ f"accuracy_train nb_total {train_nb_total} nb_correct {train_nb_correct} accuracy {(100.0*train_nb_correct)/train_nb_total:.02f}%"
+ )
+
+ test_nb_total, test_nb_correct = self.compute_error(
+ model, "test", nb_to_use=1000
+ )
+ log_string(
+ f"accuracy_test nb_total {test_nb_total} nb_correct {test_nb_correct} accuracy {(100.0*test_nb_correct)/test_nb_total:.02f}%"
+ )
+
+ input = self.test_input[:48]
+ result = input.clone()
+ ar_mask = result.new_zeros(result.size())
+ ar_mask[:, self.height * self.width :] = 1
+ result *= 1 - ar_mask
+ masked_inplace_autoregression(
+ model, self.batch_size, result, ar_mask, device=self.device
+ )
+
+ mazes, paths = self.seq2map(input)
+ _, predicted_paths = self.seq2map(result)
+ filename = f"result_{n_epoch:04d}.png"
+ maze.save_image(
+ os.path.join(args.result_dir, filename),
+ mazes=mazes,
+ target_paths=paths,
+ predicted_paths=predicted_paths,
+ path_correct=maze.path_correctness(mazes, predicted_paths),
+ )
+ log_string(f"wrote {filename}")
+
+ model.train(t)
+
+
+######################################################################
+
+
+def picoclvr_pruner_horizontal_green(p):