jgalego commited on
Commit
c5d096a
·
verified ·
1 Parent(s): fa30a59

Promote hard fine-tune

Browse files
config.json CHANGED
@@ -3,7 +3,7 @@
3
  "dim": 256,
4
  "embed_dim": 256,
5
  "heads": 8,
6
- "max_crossings": 64,
7
  "target_mean": [
8
  4.885252952575684,
9
  17.482948303222656
 
3
  "dim": 256,
4
  "embed_dim": 256,
5
  "heads": 8,
6
+ "max_crossings": 128,
7
  "target_mean": [
8
  4.885252952575684,
9
  17.482948303222656
knot2vec.py CHANGED
@@ -182,11 +182,11 @@ class Knot2Vec(nn.Module, PyTorchModelHubMixin):
182
  return self.run(pds, batch_size)["embedding"]
183
 
184
 
185
- def scramble(link, max_crossings):
186
  """Another diagram of the same knot, from random Reidemeister moves."""
187
  while True:
188
  view = link.copy()
189
- view.backtrack(random.randint(2, 40))
190
  if random.random() < 0.5:
191
  view.simplify("basic")
192
  if 0 < len(view.crossings) <= max_crossings:
@@ -199,13 +199,10 @@ def diagrams(job):
199
  random.seed(f"{args.seed}:{name}")
200
  link = snappy.Link(pd)
201
  rows = [{"name": name, "pd": pd, "split": "train"}] if seen else []
 
202
  rows += [
203
- {"name": name, "pd": scramble(link, args.max_crossings), "split": "train"}
204
- for _ in range(args.views if seen else 0)
205
- ]
206
- rows += [
207
- {"name": name, "pd": scramble(link, args.max_crossings), "split": "test"}
208
- for _ in range(args.test_views)
209
  ]
210
  for row in rows:
211
  gauss(row["pd"])
@@ -307,6 +304,12 @@ def train(args):
307
  target_mean=targets.mean(0).tolist(),
308
  target_std=(targets.std(0) + 1e-6).tolist(),
309
  ).to(device)
 
 
 
 
 
 
310
  targets = torch.tensor((targets - targets.mean(0)) / (targets.std(0) + 1e-6), device=device)
311
  signatures = torch.tensor(
312
  [(knots[n]["signature"] + MAX_SIGNATURE) // 2 for n in names], device=device
@@ -389,6 +392,7 @@ def train(args):
389
  "learning_rate": args.lr,
390
  "temperature": args.temperature,
391
  "aux_weight": args.aux_weight,
 
392
  "dim": args.dim,
393
  "depth": args.depth,
394
  "parameters": sum(p.numel() for p in model.parameters()),
@@ -433,6 +437,8 @@ def evaluate(args):
433
  index = {n: i for i, n in enumerate(knots["name"])}
434
  gallery = model.embed(knots["pd"]).to(device)
435
  test = table(args.data, "diagrams", "test")
 
 
436
  if args.limit:
437
  test = test.select(random.Random(0).sample(range(len(test)), min(args.limit, len(test))))
438
  out = model.run(test["pd"])
@@ -441,7 +447,8 @@ def evaluate(args):
441
  truth = {key: torch.tensor(knots[key])[gold] for key in
442
  ("seen", "crossing_number", "signature", "determinant", "volume")}
443
  hits1, hits5 = top[:, 0] == gold, (top == gold[:, None]).any(1)
444
- result = {"model": args.model, "gallery": len(index), "chance_top1": round(1 / len(index), 6)}
 
445
  for group, mask in (("seen", truth["seen"]), ("unseen", ~truth["seen"])):
446
  if not mask.any():
447
  continue
@@ -467,7 +474,7 @@ def evaluate(args):
467
  Path(args.output).mkdir(parents=True, exist_ok=True)
468
  knot_map(gallery, knots, Path(args.output) / "map.png")
469
  if args.push:
470
- push_result(args.repo, "eval", result, args.revision)
471
  HfApi().upload_file(
472
  path_or_fileobj=Path(args.output) / "map.png",
473
  path_in_repo="results/map.png",
@@ -570,6 +577,7 @@ def main():
570
  data_parser.add_argument("--test-views", type=int, default=4, help="test diagrams per knot")
571
  data_parser.add_argument("--holdout", type=float, default=0.1, help="share of unseen knots")
572
  data_parser.add_argument("--max-crossings", type=int, default=64)
 
573
  data_parser.add_argument("--seed", type=int, default=0)
574
  data_parser.add_argument("--output", default="out/data")
575
  data_parser.add_argument("--repo", default=DATA)
@@ -587,6 +595,7 @@ def main():
587
  train_parser.add_argument("--dim", type=int, default=256)
588
  train_parser.add_argument("--depth", type=int, default=6)
589
  train_parser.add_argument("--max-crossings", type=int, default=64)
 
590
  train_parser.add_argument("--seed", type=int, default=0)
591
  train_parser.add_argument("--output", default="out/model")
592
  train_parser.add_argument("--repo", default=REPO)
@@ -600,6 +609,7 @@ def main():
600
  eval_parser.add_argument("--limit", type=int, default=None, help="number of test diagrams")
601
  eval_parser.add_argument("--repo", default=REPO, help="where --push stores the result")
602
  eval_parser.add_argument("--revision", default=None, help="model branch")
 
603
  eval_parser.add_argument("--output", default="out/eval", help="where the knot map goes")
604
  eval_parser.add_argument("--push", action="store_true")
605
  eval_parser.set_defaults(run=evaluate)
 
182
  return self.run(pds, batch_size)["embedding"]
183
 
184
 
185
+ def scramble(link, max_crossings, max_moves=40):
186
  """Another diagram of the same knot, from random Reidemeister moves."""
187
  while True:
188
  view = link.copy()
189
+ view.backtrack(random.randint(2, max_moves))
190
  if random.random() < 0.5:
191
  view.simplify("basic")
192
  if 0 < len(view.crossings) <= max_crossings:
 
199
  random.seed(f"{args.seed}:{name}")
200
  link = snappy.Link(pd)
201
  rows = [{"name": name, "pd": pd, "split": "train"}] if seen else []
202
+ splits = ["train"] * (args.views if seen else 0) + ["test"] * args.test_views
203
  rows += [
204
+ {"name": name, "pd": scramble(link, args.max_crossings, args.max_moves), "split": split}
205
+ for split in splits
 
 
 
 
206
  ]
207
  for row in rows:
208
  gauss(row["pd"])
 
304
  target_mean=targets.mean(0).tolist(),
305
  target_std=(targets.std(0) + 1e-6).tolist(),
306
  ).to(device)
307
+ if args.init:
308
+ # Copy the weights; embeddings for longer diagrams keep their fresh rows.
309
+ weights = model.state_dict()
310
+ for key, value in Knot2Vec.from_pretrained(args.init).state_dict().items():
311
+ weights[key][: len(value)] = value
312
+ model.load_state_dict(weights)
313
  targets = torch.tensor((targets - targets.mean(0)) / (targets.std(0) + 1e-6), device=device)
314
  signatures = torch.tensor(
315
  [(knots[n]["signature"] + MAX_SIGNATURE) // 2 for n in names], device=device
 
392
  "learning_rate": args.lr,
393
  "temperature": args.temperature,
394
  "aux_weight": args.aux_weight,
395
+ "init": args.init,
396
  "dim": args.dim,
397
  "depth": args.depth,
398
  "parameters": sum(p.numel() for p in model.parameters()),
 
437
  index = {n: i for i, n in enumerate(knots["name"])}
438
  gallery = model.embed(knots["pd"]).to(device)
439
  test = table(args.data, "diagrams", "test")
440
+ longest = model.positions.num_embeddings // 2
441
+ test = test.filter(lambda row: len(row["pd"]) <= longest)
442
  if args.limit:
443
  test = test.select(random.Random(0).sample(range(len(test)), min(args.limit, len(test))))
444
  out = model.run(test["pd"])
 
447
  truth = {key: torch.tensor(knots[key])[gold] for key in
448
  ("seen", "crossing_number", "signature", "determinant", "volume")}
449
  hits1, hits5 = top[:, 0] == gold, (top == gold[:, None]).any(1)
450
+ result = {"model": args.model, "data": args.data, "max_crossings": longest,
451
+ "gallery": len(index), "chance_top1": round(1 / len(index), 6)}
452
  for group, mask in (("seen", truth["seen"]), ("unseen", ~truth["seen"])):
453
  if not mask.any():
454
  continue
 
474
  Path(args.output).mkdir(parents=True, exist_ok=True)
475
  knot_map(gallery, knots, Path(args.output) / "map.png")
476
  if args.push:
477
+ push_result(args.repo, args.result, result, args.revision)
478
  HfApi().upload_file(
479
  path_or_fileobj=Path(args.output) / "map.png",
480
  path_in_repo="results/map.png",
 
577
  data_parser.add_argument("--test-views", type=int, default=4, help="test diagrams per knot")
578
  data_parser.add_argument("--holdout", type=float, default=0.1, help="share of unseen knots")
579
  data_parser.add_argument("--max-crossings", type=int, default=64)
580
+ data_parser.add_argument("--max-moves", type=int, default=40, help="Reidemeister moves")
581
  data_parser.add_argument("--seed", type=int, default=0)
582
  data_parser.add_argument("--output", default="out/data")
583
  data_parser.add_argument("--repo", default=DATA)
 
595
  train_parser.add_argument("--dim", type=int, default=256)
596
  train_parser.add_argument("--depth", type=int, default=6)
597
  train_parser.add_argument("--max-crossings", type=int, default=64)
598
+ train_parser.add_argument("--init", default=None, help="model repo or folder to start from")
599
  train_parser.add_argument("--seed", type=int, default=0)
600
  train_parser.add_argument("--output", default="out/model")
601
  train_parser.add_argument("--repo", default=REPO)
 
609
  eval_parser.add_argument("--limit", type=int, default=None, help="number of test diagrams")
610
  eval_parser.add_argument("--repo", default=REPO, help="where --push stores the result")
611
  eval_parser.add_argument("--revision", default=None, help="model branch")
612
+ eval_parser.add_argument("--result", default="eval", help="results/<result>.json for --push")
613
  eval_parser.add_argument("--output", default="out/eval", help="where the knot map goes")
614
  eval_parser.add_argument("--push", action="store_true")
615
  eval_parser.set_defaults(run=evaluate)
model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:786f8b9cb77a3b430caaa584312e3db9a5939c4f480c5b038963634b642d205a
3
- size 19708148
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:98ac2a4175b287b9ddf642ab689e897c7b56ac3df721c78609bbff43a408840e
3
+ size 19904756
results/eval-hard.json ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "jgalego/knot2vec",
3
+ "data": "jgalego/knot2vec-diagrams-hard",
4
+ "max_crossings": 128,
5
+ "gallery": 12965,
6
+ "chance_top1": 7.7e-05,
7
+ "seen": {
8
+ "n": 46676,
9
+ "top1": 0.773,
10
+ "top5": 0.916,
11
+ "signature_accuracy": 0.88,
12
+ "determinant_within_10pct": 0.238,
13
+ "volume_mae": 1.39,
14
+ "top1_by_crossings": {
15
+ "3": 1.0,
16
+ "5": 0.75,
17
+ "6": 0.875,
18
+ "7": 0.786,
19
+ "8": 0.583,
20
+ "9": 0.71,
21
+ "10": 0.618,
22
+ "11": 0.719,
23
+ "12": 0.739,
24
+ "13": 0.787
25
+ }
26
+ },
27
+ "unseen": {
28
+ "n": 5184,
29
+ "top1": 0.771,
30
+ "top5": 0.91,
31
+ "signature_accuracy": 0.849,
32
+ "determinant_within_10pct": 0.23,
33
+ "volume_mae": 1.552,
34
+ "top1_by_crossings": {
35
+ "4": 0.5,
36
+ "5": 0.75,
37
+ "6": 1.0,
38
+ "8": 0.417,
39
+ "9": 0.5,
40
+ "10": 0.515,
41
+ "11": 0.726,
42
+ "12": 0.741,
43
+ "13": 0.787
44
+ }
45
+ }
46
+ }
results/eval-hard64.json ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "jgalego/knot2vec",
3
+ "data": "jgalego/knot2vec-diagrams-hard",
4
+ "max_crossings": 64,
5
+ "gallery": 12965,
6
+ "chance_top1": 7.7e-05,
7
+ "seen": {
8
+ "n": 40047,
9
+ "top1": 0.84,
10
+ "top5": 0.962,
11
+ "signature_accuracy": 0.91,
12
+ "determinant_within_10pct": 0.253,
13
+ "volume_mae": 1.29,
14
+ "top1_by_crossings": {
15
+ "3": 1.0,
16
+ "5": 0.667,
17
+ "6": 1.0,
18
+ "7": 0.808,
19
+ "8": 0.656,
20
+ "9": 0.769,
21
+ "10": 0.691,
22
+ "11": 0.789,
23
+ "12": 0.806,
24
+ "13": 0.854
25
+ }
26
+ },
27
+ "unseen": {
28
+ "n": 4412,
29
+ "top1": 0.84,
30
+ "top5": 0.958,
31
+ "signature_accuracy": 0.881,
32
+ "determinant_within_10pct": 0.243,
33
+ "volume_mae": 1.45,
34
+ "top1_by_crossings": {
35
+ "4": 0.5,
36
+ "5": 0.75,
37
+ "6": 1.0,
38
+ "8": 0.5,
39
+ "9": 0.526,
40
+ "10": 0.642,
41
+ "11": 0.793,
42
+ "12": 0.82,
43
+ "13": 0.854
44
+ }
45
+ }
46
+ }
results/eval.json CHANGED
@@ -1,44 +1,46 @@
1
  {
2
  "model": "jgalego/knot2vec",
 
 
3
  "gallery": 12965,
4
  "chance_top1": 7.7e-05,
5
  "seen": {
6
  "n": 46676,
7
- "top1": 0.881,
8
- "top5": 0.976,
9
- "signature_accuracy": 0.917,
10
- "determinant_within_10pct": 0.267,
11
- "volume_mae": 1.237,
12
  "top1_by_crossings": {
13
- "3": 1.0,
14
- "5": 0.75,
15
  "6": 1.0,
16
  "7": 0.821,
17
- "8": 0.833,
18
- "9": 0.756,
19
- "10": 0.769,
20
- "11": 0.844,
21
- "12": 0.864,
22
- "13": 0.889
23
  }
24
  },
25
  "unseen": {
26
  "n": 5184,
27
- "top1": 0.88,
28
  "top5": 0.976,
29
- "signature_accuracy": 0.891,
30
- "determinant_within_10pct": 0.248,
31
- "volume_mae": 1.39,
32
  "top1_by_crossings": {
33
  "4": 0.75,
34
  "5": 0.75,
35
- "6": 0.75,
36
  "8": 0.917,
37
- "9": 0.65,
38
  "10": 0.779,
39
- "11": 0.806,
40
- "12": 0.86,
41
- "13": 0.893
42
  }
43
  }
44
  }
 
1
  {
2
  "model": "jgalego/knot2vec",
3
+ "data": "jgalego/knot2vec-diagrams",
4
+ "max_crossings": 128,
5
  "gallery": 12965,
6
  "chance_top1": 7.7e-05,
7
  "seen": {
8
  "n": 46676,
9
+ "top1": 0.874,
10
+ "top5": 0.978,
11
+ "signature_accuracy": 0.926,
12
+ "determinant_within_10pct": 0.264,
13
+ "volume_mae": 1.21,
14
  "top1_by_crossings": {
15
+ "3": 0.75,
16
+ "5": 0.5,
17
  "6": 1.0,
18
  "7": 0.821,
19
+ "8": 0.861,
20
+ "9": 0.727,
21
+ "10": 0.731,
22
+ "11": 0.84,
23
+ "12": 0.851,
24
+ "13": 0.884
25
  }
26
  },
27
  "unseen": {
28
  "n": 5184,
29
+ "top1": 0.867,
30
  "top5": 0.976,
31
+ "signature_accuracy": 0.896,
32
+ "determinant_within_10pct": 0.246,
33
+ "volume_mae": 1.373,
34
  "top1_by_crossings": {
35
  "4": 0.75,
36
  "5": 0.75,
37
+ "6": 1.0,
38
  "8": 0.917,
39
+ "9": 0.8,
40
  "10": 0.779,
41
+ "11": 0.782,
42
+ "12": 0.852,
43
+ "13": 0.878
44
  }
45
  }
46
  }
results/map.png CHANGED

Git LFS Details

  • SHA256: f2f6b79f47f5fbfcb1d57728cdca89cff4b230403a1f3cfce084206b7b8285d6
  • Pointer size: 131 Bytes
  • Size of remote file: 272 kB

Git LFS Details

  • SHA256: 1994d09f1d88a37add2cfb3254933f4896384bb20e38525d0343710a47aa27c9
  • Pointer size: 131 Bytes
  • Size of remote file: 269 kB
results/probes.json CHANGED
@@ -4,45 +4,45 @@
4
  "by_crossings": {
5
  "0": {
6
  "n": 334,
7
- "top1": 0.988
8
  },
9
  "11": {
10
  "n": 30554,
11
- "top1": 0.946
12
  },
13
  "21": {
14
  "n": 7414,
15
- "top1": 0.87
16
  },
17
  "31": {
18
  "n": 7375,
19
- "top1": 0.794
20
  },
21
  "41": {
22
  "n": 6183,
23
- "top1": 0.67
24
  }
25
  },
26
  "by_writhe_shift": {
27
  "0": {
28
  "n": 25800,
29
- "top1": 0.938
30
  },
31
  "1": {
32
  "n": 18850,
33
- "top1": 0.848
34
  },
35
  "3": {
36
  "n": 6298,
37
- "top1": 0.773
38
  },
39
  "6": {
40
  "n": 900,
41
- "top1": 0.711
42
  },
43
  "11": {
44
  "n": 12,
45
- "top1": 0.583
46
  }
47
  }
48
  },
@@ -52,41 +52,41 @@
52
  "kept": 1.0,
53
  "mean_crossings": 32.6,
54
  "mean_writhe_shift": 3.5,
55
- "top1": 0.894
56
  },
57
  "r2_only": {
58
  "n": 2592,
59
  "kept": 1.0,
60
  "mean_crossings": 32.6,
61
  "mean_writhe_shift": 0.0,
62
- "top1": 0.877
63
  },
64
  "moves_40": {
65
  "n": 2592,
66
  "kept": 1.0,
67
  "mean_crossings": 48.8,
68
  "mean_writhe_shift": 2.8,
69
- "top1": 0.61
70
  },
71
  "moves_60": {
72
  "n": 2591,
73
  "kept": 1.0,
74
  "mean_crossings": 60.1,
75
  "mean_writhe_shift": 3.3,
76
- "top1": 0.273
77
  },
78
  "moves_80": {
79
  "n": 138,
80
  "kept": 0.053,
81
  "mean_crossings": 62.1,
82
  "mean_writhe_shift": 3.8,
83
- "top1": 0.188
84
  }
85
  },
86
  "small": {
87
  "up_to_7": {
88
  "knots": 14,
89
- "top1": 0.874,
90
  "by_growth": {
91
  "1": {
92
  "n": 1555,
@@ -94,39 +94,39 @@
94
  },
95
  "2": {
96
  "n": 561,
97
- "top1": 0.829
98
  },
99
  "4": {
100
  "n": 595,
101
- "top1": 0.713
102
  },
103
  "8": {
104
  "n": 89,
105
- "top1": 0.674
106
  }
107
  },
108
- "errors_named_up_to_7": 0.328,
109
- "errors_named_11_plus": 0.441
110
  },
111
  "12_13": {
112
  "knots": 14,
113
- "top1": 0.907,
114
  "by_growth": {
115
  "1": {
116
  "n": 1875,
117
- "top1": 0.966
118
  },
119
  "2": {
120
  "n": 881,
121
- "top1": 0.799
122
  },
123
  "4": {
124
  "n": 44,
125
- "top1": 0.568
126
  }
127
  },
128
  "errors_named_up_to_7": 0.0,
129
- "errors_named_11_plus": 0.992
130
  }
131
  }
132
  }
 
4
  "by_crossings": {
5
  "0": {
6
  "n": 334,
7
+ "top1": 0.979
8
  },
9
  "11": {
10
  "n": 30554,
11
+ "top1": 0.935
12
  },
13
  "21": {
14
  "n": 7414,
15
+ "top1": 0.85
16
  },
17
  "31": {
18
  "n": 7375,
19
+ "top1": 0.777
20
  },
21
  "41": {
22
  "n": 6183,
23
+ "top1": 0.702
24
  }
25
  },
26
  "by_writhe_shift": {
27
  "0": {
28
  "n": 25800,
29
+ "top1": 0.927
30
  },
31
  "1": {
32
  "n": 18850,
33
+ "top1": 0.838
34
  },
35
  "3": {
36
  "n": 6298,
37
+ "top1": 0.774
38
  },
39
  "6": {
40
  "n": 900,
41
+ "top1": 0.731
42
  },
43
  "11": {
44
  "n": 12,
45
+ "top1": 0.75
46
  }
47
  }
48
  },
 
52
  "kept": 1.0,
53
  "mean_crossings": 32.6,
54
  "mean_writhe_shift": 3.5,
55
+ "top1": 0.868
56
  },
57
  "r2_only": {
58
  "n": 2592,
59
  "kept": 1.0,
60
  "mean_crossings": 32.6,
61
  "mean_writhe_shift": 0.0,
62
+ "top1": 0.855
63
  },
64
  "moves_40": {
65
  "n": 2592,
66
  "kept": 1.0,
67
  "mean_crossings": 48.8,
68
  "mean_writhe_shift": 2.8,
69
+ "top1": 0.676
70
  },
71
  "moves_60": {
72
  "n": 2591,
73
  "kept": 1.0,
74
  "mean_crossings": 60.1,
75
  "mean_writhe_shift": 3.3,
76
+ "top1": 0.576
77
  },
78
  "moves_80": {
79
  "n": 138,
80
  "kept": 0.053,
81
  "mean_crossings": 62.1,
82
  "mean_writhe_shift": 3.8,
83
+ "top1": 0.514
84
  }
85
  },
86
  "small": {
87
  "up_to_7": {
88
  "knots": 14,
89
+ "top1": 0.873,
90
  "by_growth": {
91
  "1": {
92
  "n": 1555,
 
94
  },
95
  "2": {
96
  "n": 561,
97
+ "top1": 0.809
98
  },
99
  "4": {
100
  "n": 595,
101
+ "top1": 0.718
102
  },
103
  "8": {
104
  "n": 89,
105
+ "top1": 0.742
106
  }
107
  },
108
+ "errors_named_up_to_7": 0.361,
109
+ "errors_named_11_plus": 0.392
110
  },
111
  "12_13": {
112
  "knots": 14,
113
+ "top1": 0.892,
114
  "by_growth": {
115
  "1": {
116
  "n": 1875,
117
+ "top1": 0.953
118
  },
119
  "2": {
120
  "n": 881,
121
+ "top1": 0.778
122
  },
123
  "4": {
124
  "n": 44,
125
+ "top1": 0.636
126
  }
127
  },
128
  "errors_named_up_to_7": 0.0,
129
+ "errors_named_11_plus": 0.997
130
  }
131
  }
132
  }
results/train.json CHANGED
@@ -1,19 +1,20 @@
1
  {
2
- "step": 19999,
3
- "loss": 0.6226,
4
- "contrastive": 0.1426,
5
- "invariants": 0.48,
6
- "pair_top1": 0.961,
7
- "minutes": 101.8,
8
- "data": "jgalego/knot2vec-diagrams",
9
- "steps": 20000,
10
  "batch_size": 512,
11
- "learning_rate": 0.0003,
12
  "temperature": 0.05,
13
  "aux_weight": 1.0,
 
14
  "dim": 256,
15
  "depth": 6,
16
- "parameters": 4924943,
17
- "runtime_s": 6109,
18
  "device": "NVIDIA A10G"
19
  }
 
1
  {
2
+ "step": 9999,
3
+ "loss": 1.1689,
4
+ "contrastive": 0.5045,
5
+ "invariants": 0.6644,
6
+ "pair_top1": 0.869,
7
+ "minutes": 92.2,
8
+ "data": "jgalego/knot2vec-diagrams-hard",
9
+ "steps": 10000,
10
  "batch_size": 512,
11
+ "learning_rate": 0.0001,
12
  "temperature": 0.05,
13
  "aux_weight": 1.0,
14
+ "init": "jgalego/knot2vec",
15
  "dim": 256,
16
  "depth": 6,
17
+ "parameters": 4974095,
18
+ "runtime_s": 5533,
19
  "device": "NVIDIA A10G"
20
  }