- to_keep = new_c_quizzes[
- torch.randint(3, (new_c_quizzes.size(0),), device=new_c_quizzes.device)
- == 0
- ]
-
- kept.append(to_keep)
-
- log_string(
- f"keep c_quizzes {to_keep.size(0)}/{new_c_quizzes.size(0)} ({to_keep.size(0)*100/new_c_quizzes.size(0):.02f}%) total {sum([ x.size(0) for x in kept])}/{nb_to_generate}"
- )
+ nb_correct = torch.randint(
+ len(models) + 1, nb_correct.size(), device=new_c_quizzes.device
+ )
+
+ for n in range(nb_correct.max() + 1):
+ recorded[n].append(new_c_quizzes[nb_correct == n].clone())
+
+ nv = F.one_hot(nb_correct, num_classes=len(models) + 1).sum(0)
+ nv = " ".join([str(x.item()) for x in nv])
+
+ log_string(f"keep c_quizzes kept {nv} total {nb_validated()} / {nb_to_create}")
+
+ # concatenate and shuffle
+ for n in recorded.keys():
+ if len(recorded[n]) > 0:
+ q = torch.cat(recorded[n], dim=0)
+ q = q[torch.randperm(q.size(0), device=q.device)]
+ recorded[n] = q
+ else:
+ del recorded[n]
+
+ new_c_quizzes = torch.cat(
+ [recorded[n] for n in range(args.min_to_validate, args.max_to_validate + 1)],
+ dim=0,
+ )