broccoli-ml 1.1.0__tar.gz → 1.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/PKG-INFO +1 -1
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/vit.py +18 -8
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/pyproject.toml +1 -1
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/LICENSE +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/README.md +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/__init__.py +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/activation.py +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/assets/2025_resnet_imagenet_1k_pretrained_state_dict.pkl +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/assets/cifar100_eigenvectors_size_2.pt +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/assets/cifar100_eigenvectors_size_3.pt +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/cnn.py +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/eigenpatches.py +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/linear.py +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/rope.py +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/tensor.py +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/transformer.py +0 -0
- {broccoli_ml-1.1.0 → broccoli_ml-1.2.0}/broccoli/utils.py +0 -0
@@ -53,12 +53,20 @@ class ClassificationHead(nn.Module):
|
|
53
53
|
A general classification head for a ViT
|
54
54
|
"""
|
55
55
|
|
56
|
-
def __init__(
|
56
|
+
def __init__(
|
57
|
+
self,
|
58
|
+
d_model,
|
59
|
+
n_classes,
|
60
|
+
linear_module=nn.Linear,
|
61
|
+
logit_projection_layer=nn.Linear,
|
62
|
+
batch_norm_logits=True,
|
63
|
+
):
|
57
64
|
super().__init__()
|
58
65
|
self.d_model = d_model
|
59
66
|
self.summarize = GetCLSToken()
|
60
|
-
self.projection =
|
61
|
-
|
67
|
+
self.projection = logit_projection_layer(d_model, n_classes)
|
68
|
+
|
69
|
+
if batch_norm_logits:
|
62
70
|
self.batch_norm = nn.BatchNorm1d(n_classes, affine=False)
|
63
71
|
else:
|
64
72
|
self.batch_norm = nn.Identity()
|
@@ -83,7 +91,7 @@ class SequencePoolClassificationHead(ClassificationHead):
|
|
83
91
|
"""
|
84
92
|
|
85
93
|
def __init__(self, d_model, linear_module, out_dim, batch_norm=True):
|
86
|
-
super().__init__(d_model, linear_module, out_dim,
|
94
|
+
super().__init__(d_model, linear_module, out_dim, batch_norm_logits=batch_norm)
|
87
95
|
self.summarize = SequencePool(d_model, linear_module)
|
88
96
|
# Rebuild the classification process with the correct summary module:
|
89
97
|
self.classification_process = nn.Sequential(
|
@@ -411,9 +419,10 @@ class ViT(nn.Module):
|
|
411
419
|
transformer_mlp_dropout=0.0,
|
412
420
|
transformer_msa_dropout=0.1,
|
413
421
|
transformer_stochastic_depth=0.1,
|
414
|
-
batch_norm_outputs=True,
|
415
|
-
linear_module=SpectralNormLinear,
|
416
422
|
head=SequencePoolClassificationHead,
|
423
|
+
batch_norm_logits=True,
|
424
|
+
logit_projection_layer=nn.Linear,
|
425
|
+
linear_module=nn.Linear,
|
417
426
|
):
|
418
427
|
|
419
428
|
super().__init__()
|
@@ -480,9 +489,10 @@ class ViT(nn.Module):
|
|
480
489
|
|
481
490
|
self.pool = head(
|
482
491
|
transformer_embedding_size,
|
483
|
-
linear_module,
|
484
492
|
image_classes,
|
485
|
-
|
493
|
+
linear_module=linear_module,
|
494
|
+
logit_projection_layer=logit_projection_layer,
|
495
|
+
batch_norm=batch_norm_logits,
|
486
496
|
)
|
487
497
|
|
488
498
|
@property
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|