X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=main.py;h=549e7ea83712b2ec1fa5dec57707e98a8964123c;hb=1506fb905b0f83034107e8e8dc336d10bdb1a7a7;hp=6c2759961155245694d28983825f9dee85246075;hpb=70d2428cd6e4caaf5c81c6cb77961866405a4cd5;p=culture.git diff --git a/main.py b/main.py index 6c27599..549e7ea 100755 --- a/main.py +++ b/main.py @@ -29,12 +29,7 @@ parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) -parser.add_argument( - "--task", - type=str, - default="world", - help="file, byheart, learnop, guessop, mixing, memory, twotargets, addition, picoclvr, mnist, maze, snake, stack, expr, rpl, grid, qmlp, greed", -) +parser.add_argument("--task", type=str, default="world", help="world") parser.add_argument("--log_filename", type=str, default="train.log", help=" ") @@ -78,119 +73,14 @@ parser.add_argument("--dropout", type=float, default=0.1) parser.add_argument("--deterministic_synthesis", action="store_true", default=False) -############################## -# filetask - -parser.add_argument("--filetask_train_file", type=str, default=None) - -parser.add_argument("--filetask_test_file", type=str, default=None) - -############################## -# rpl options - -parser.add_argument("--rpl_nb_starting_values", type=int, default=3) - -parser.add_argument("--rpl_max_input", type=int, default=9) - -parser.add_argument("--rpl_prog_len", type=int, default=8) - -parser.add_argument("--rpl_nb_runs", type=int, default=5) - -parser.add_argument("--rpl_no_prog", action="store_true", default=False) - -############################## -# grid options - -parser.add_argument("--grid_size", type=int, default=6) - -parser.add_argument("--grid_fraction_play", type=float, default=0) - -############################## -# picoclvr options - -parser.add_argument("--picoclvr_nb_colors", type=int, default=5) - -parser.add_argument("--picoclvr_height", type=int, default=12) - -parser.add_argument("--picoclvr_width", type=int, default=16) - -parser.add_argument("--picocvlr_prune_properties", type=str, default="none") - -############################## -# Maze options - -parser.add_argument("--maze_height", type=int, default=13) - -parser.add_argument("--maze_width", type=int, default=21) - -parser.add_argument("--maze_nb_walls", type=int, default=15) - -############################## -# Snake options - -parser.add_argument("--snake_height", type=int, default=9) - -parser.add_argument("--snake_width", type=int, default=12) - -parser.add_argument("--snake_nb_colors", type=int, default=5) +parser.add_argument("--nb_gpts", type=int, default=5) -parser.add_argument("--snake_length", type=int, default=200) - -############################## -# ByHeart options - -parser.add_argument("--byheart_separation", type=int, default=1) - -############################## -# Stack options - -parser.add_argument("--stack_nb_steps", type=int, default=100) - -parser.add_argument("--stack_nb_stacks", type=int, default=3) - -parser.add_argument("--stack_nb_digits", type=int, default=3) - -parser.add_argument("--stack_fraction_values_for_train", type=float, default=None) - -############################## -# Expr options - -parser.add_argument("--expr_nb_variables", type=int, default=5) - -parser.add_argument("--expr_sequence_length", type=int, default=40) - -parser.add_argument("--expr_operand_max", type=int, default=9) - -parser.add_argument("--expr_result_max", type=int, default=99) - -parser.add_argument("--expr_input_file", type=str, default=None) - -############################## -# Mixing - -parser.add_argument("--mixing_hard", action="store_true", default=False) - -parser.add_argument("--mixing_deterministic_start", action="store_true", default=False) - -############################## -# greed options - -parser.add_argument("--greed_height", type=int, default=5) - -parser.add_argument("--greed_width", type=int, default=7) - -parser.add_argument("--greed_T", type=int, default=25) - -parser.add_argument("--greed_nb_walls", type=int, default=5) - -parser.add_argument("--greed_nb_coins", type=int, default=2) +parser.add_argument("--check", action="store_true", default=False) ###################################################################### args = parser.parse_args() -assert args.picocvlr_prune_properties in {"none", "train+eval", "eval"} - if args.result_dir is None: args.result_dir = f"results_{args.task}" @@ -203,114 +93,6 @@ default_task_args = { "nb_train_samples": 250000, "nb_test_samples": 10000, }, - "file": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 250000, - "nb_test_samples": 10000, - }, - "addition": { - "model": "352M", - "batch_size": 25, - "nb_train_samples": 250000, - "nb_test_samples": 10000, - }, - "byheart": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 50000, - "nb_test_samples": 10000, - }, - "expr": { - "model": "352M", - "batch_size": 25, - "nb_train_samples": 2500000, - "nb_test_samples": 10000, - }, - "grid": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 250000, - "nb_test_samples": 10000, - }, - "qmlp": { - "model": "37M", - "batch_size": 10, - "nb_train_samples": 100000, - "nb_test_samples": 1000, - }, - "guessop": { - "model": "352M", - "batch_size": 25, - "nb_train_samples": 1000000, - "nb_test_samples": 10000, - }, - "learnop": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 50000, - "nb_test_samples": 10000, - }, - "maze": { - "model": "37M", - "batch_size": 5, - "nb_train_samples": 100000, - "nb_test_samples": 10000, - }, - "picoclvr": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 250000, - "nb_test_samples": 10000, - }, - "rpl": { - "model": "352M", - "batch_size": 5, - "nb_train_samples": 2500000, - "nb_test_samples": 10000, - }, - "snake": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 250000, - "nb_test_samples": 10000, - }, - "stack": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 100000, - "nb_test_samples": 1000, - }, - "twotargets": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 50000, - "nb_test_samples": 10000, - }, - "memory": { - "model": "37M", - "batch_size": 100, - "nb_train_samples": 25000, - "nb_test_samples": 1000, - }, - "mixing": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 250000, - "nb_test_samples": 10000, - }, - "mnist": { - "model": "37M", - "batch_size": 10, - "nb_train_samples": 60000, - "nb_test_samples": 10000, - }, - "greed": { - "model": "37M", - "batch_size": 25, - "nb_train_samples": 25000, - "nb_test_samples": 10000, - }, } if args.task in default_task_args: @@ -405,24 +187,9 @@ for n in vars(args): ###################################################################### - -def picoclvr_pruner_horizontal_green(p): - return not ("green" in p and ("left" in p or "right" in p)) - - -picoclvr_pruner_train = ( - picoclvr_pruner_horizontal_green - if args.picocvlr_prune_properties in {"train+eval"} - else None -) - -picoclvr_pruner_eval = ( - (lambda p: not picoclvr_pruner_horizontal_green(p)) - if args.picocvlr_prune_properties in {"train+eval", "eval"} - else None -) - -###################################################################### +if args.check: + args.nb_train_samples = 500 + args.nb_test_samples = 100 if args.physical_batch_size is None: args.physical_batch_size = args.batch_size @@ -801,6 +568,8 @@ def create_quizzes( other_models=other_models, ) + print(nb_correct) + to_keep = new_quizzes[nb_correct == len(other_models) - 1] log_string(f"keep {to_keep.size(0)} quizzes") kept.append(to_keep) @@ -813,7 +582,7 @@ def create_quizzes( task.save_image( new_quizzes[:96], args.result_dir, - f"world_new_{n_epoch:04d}_{model.id:02d}.png", + f"world_quiz_{n_epoch:04d}_{model.id:02d}.png", log_string, ) @@ -822,7 +591,7 @@ def create_quizzes( models = [] -for k in range(5): +for k in range(args.nb_gpts): model = mygpt.MyGPT( vocabulary_size=vocabulary_size, dim_model=args.dim_model, @@ -846,22 +615,31 @@ log_string(f"nb_parameters {nb_parameters} ({int(nb_parameters/1e6)}M)") ###################################################################### accuracy_to_make_quizzes = 0.975 +nb_new_quizzes_for_train = 1000 +nb_new_quizzes_for_test = 100 + +if args.check: + accuracy_to_make_quizzes = 0.0 + nb_new_quizzes_for_train = 10 + nb_new_quizzes_for_test = 10 for n_epoch in range(args.nb_epochs): + # select the model with lowest accuracy models.sort(key=lambda model: model.main_test_accuracy) - model = models[0] log_string( f"training model {model.id} main_test_accuracy {model.main_test_accuracy}" ) + # improve it one_epoch(model, task) log_string( f"train_set_composition world {task.nb_batch_samples_world} quizzes {task.nb_batch_samples_quizzes}" ) + # test it run_tests(model, task, deterministic_synthesis=False) if model.main_test_accuracy >= accuracy_to_make_quizzes: @@ -872,8 +650,8 @@ for n_epoch in range(args.nb_epochs): model, other_models, task, - nb_for_train=1000, - nb_for_test=100, + nb_for_train=nb_new_quizzes_for_train, + nb_for_test=nb_new_quizzes_for_test, )