Promote hard fine-tune
Browse files- config.json +1 -1
- knot2vec.py +20 -10
- model.safetensors +2 -2
- results/eval-hard.json +46 -0
- results/eval-hard64.json +46 -0
- results/eval.json +24 -22
- results/map.png +2 -2
- results/probes.json +26 -26
- results/train.json +12 -11
config.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
"dim": 256,
|
| 4 |
"embed_dim": 256,
|
| 5 |
"heads": 8,
|
| 6 |
-
"max_crossings":
|
| 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,
|
| 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":
|
| 204 |
-
for
|
| 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, "
|
|
|
|
| 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,
|
| 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:
|
| 3 |
-
size
|
|
|
|
| 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.
|
| 8 |
-
"top5": 0.
|
| 9 |
-
"signature_accuracy": 0.
|
| 10 |
-
"determinant_within_10pct": 0.
|
| 11 |
-
"volume_mae": 1.
|
| 12 |
"top1_by_crossings": {
|
| 13 |
-
"3":
|
| 14 |
-
"5": 0.
|
| 15 |
"6": 1.0,
|
| 16 |
"7": 0.821,
|
| 17 |
-
"8": 0.
|
| 18 |
-
"9": 0.
|
| 19 |
-
"10": 0.
|
| 20 |
-
"11": 0.
|
| 21 |
-
"12": 0.
|
| 22 |
-
"13": 0.
|
| 23 |
}
|
| 24 |
},
|
| 25 |
"unseen": {
|
| 26 |
"n": 5184,
|
| 27 |
-
"top1": 0.
|
| 28 |
"top5": 0.976,
|
| 29 |
-
"signature_accuracy": 0.
|
| 30 |
-
"determinant_within_10pct": 0.
|
| 31 |
-
"volume_mae": 1.
|
| 32 |
"top1_by_crossings": {
|
| 33 |
"4": 0.75,
|
| 34 |
"5": 0.75,
|
| 35 |
-
"6":
|
| 36 |
"8": 0.917,
|
| 37 |
-
"9": 0.
|
| 38 |
"10": 0.779,
|
| 39 |
-
"11": 0.
|
| 40 |
-
"12": 0.
|
| 41 |
-
"13": 0.
|
| 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
|
|
Git LFS Details
|
results/probes.json
CHANGED
|
@@ -4,45 +4,45 @@
|
|
| 4 |
"by_crossings": {
|
| 5 |
"0": {
|
| 6 |
"n": 334,
|
| 7 |
-
"top1": 0.
|
| 8 |
},
|
| 9 |
"11": {
|
| 10 |
"n": 30554,
|
| 11 |
-
"top1": 0.
|
| 12 |
},
|
| 13 |
"21": {
|
| 14 |
"n": 7414,
|
| 15 |
-
"top1": 0.
|
| 16 |
},
|
| 17 |
"31": {
|
| 18 |
"n": 7375,
|
| 19 |
-
"top1": 0.
|
| 20 |
},
|
| 21 |
"41": {
|
| 22 |
"n": 6183,
|
| 23 |
-
"top1": 0.
|
| 24 |
}
|
| 25 |
},
|
| 26 |
"by_writhe_shift": {
|
| 27 |
"0": {
|
| 28 |
"n": 25800,
|
| 29 |
-
"top1": 0.
|
| 30 |
},
|
| 31 |
"1": {
|
| 32 |
"n": 18850,
|
| 33 |
-
"top1": 0.
|
| 34 |
},
|
| 35 |
"3": {
|
| 36 |
"n": 6298,
|
| 37 |
-
"top1": 0.
|
| 38 |
},
|
| 39 |
"6": {
|
| 40 |
"n": 900,
|
| 41 |
-
"top1": 0.
|
| 42 |
},
|
| 43 |
"11": {
|
| 44 |
"n": 12,
|
| 45 |
-
"top1": 0.
|
| 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.
|
| 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.
|
| 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.
|
| 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.
|
| 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.
|
| 84 |
}
|
| 85 |
},
|
| 86 |
"small": {
|
| 87 |
"up_to_7": {
|
| 88 |
"knots": 14,
|
| 89 |
-
"top1": 0.
|
| 90 |
"by_growth": {
|
| 91 |
"1": {
|
| 92 |
"n": 1555,
|
|
@@ -94,39 +94,39 @@
|
|
| 94 |
},
|
| 95 |
"2": {
|
| 96 |
"n": 561,
|
| 97 |
-
"top1": 0.
|
| 98 |
},
|
| 99 |
"4": {
|
| 100 |
"n": 595,
|
| 101 |
-
"top1": 0.
|
| 102 |
},
|
| 103 |
"8": {
|
| 104 |
"n": 89,
|
| 105 |
-
"top1": 0.
|
| 106 |
}
|
| 107 |
},
|
| 108 |
-
"errors_named_up_to_7": 0.
|
| 109 |
-
"errors_named_11_plus": 0.
|
| 110 |
},
|
| 111 |
"12_13": {
|
| 112 |
"knots": 14,
|
| 113 |
-
"top1": 0.
|
| 114 |
"by_growth": {
|
| 115 |
"1": {
|
| 116 |
"n": 1875,
|
| 117 |
-
"top1": 0.
|
| 118 |
},
|
| 119 |
"2": {
|
| 120 |
"n": 881,
|
| 121 |
-
"top1": 0.
|
| 122 |
},
|
| 123 |
"4": {
|
| 124 |
"n": 44,
|
| 125 |
-
"top1": 0.
|
| 126 |
}
|
| 127 |
},
|
| 128 |
"errors_named_up_to_7": 0.0,
|
| 129 |
-
"errors_named_11_plus": 0.
|
| 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":
|
| 3 |
-
"loss":
|
| 4 |
-
"contrastive": 0.
|
| 5 |
-
"invariants": 0.
|
| 6 |
-
"pair_top1": 0.
|
| 7 |
-
"minutes":
|
| 8 |
-
"data": "jgalego/knot2vec-diagrams",
|
| 9 |
-
"steps":
|
| 10 |
"batch_size": 512,
|
| 11 |
-
"learning_rate": 0.
|
| 12 |
"temperature": 0.05,
|
| 13 |
"aux_weight": 1.0,
|
|
|
|
| 14 |
"dim": 256,
|
| 15 |
"depth": 6,
|
| 16 |
-
"parameters":
|
| 17 |
-
"runtime_s":
|
| 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 |
}
|