Commit 9bb455d
authored
fix(training): restore efficientnet-lite0 fine-tuning quality lost in timm swap (#16)
Switching the efficientnet-lite0 backbone to timm silently dropped three
model-level defaults that the previous package applied, regressing FixMatch
fine-tuning AUROC (~0.96 -> ~0.81 on the internal benchmark):
- Classifier head over-scaling (main cause): timm initialises the head with
TF-EfficientNet's 1/sqrt(fan_in+fan_out) scale tuned for 1000 classes, which
is ~num_classes too large for the 2-class head (weight std ~0.4 vs PyTorch's
~0.016). The overconfident fresh head makes ~all unlabeled images clear the
FixMatch p_cutoff from step 1 with random pseudo-labels, poisoning the
backbone. Reset the classifier to PyTorch's default init after create_model.
- Unapplied bn_momentum: cfg.bn_momentum (= 1 - ema_m, ~0.01) was computed and
validated but never set on the model, so BatchNorm ran at timm's 0.1 default
(~10x too fast for the small batch size). Apply it to both models' BatchNorm.
- Unapplied seed: cfg.seed was defined and validated but set_seeds was never
called, so training was not reproducible. Seed all RNGs after validation.
Add a regression test asserting the classifier head weight std stays near
PyTorch's Linear bound.1 parent 1ce094a commit 9bb455d
3 files changed
Lines changed: 76 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
| |||
83 | 84 | | |
84 | 85 | | |
85 | 86 | | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
86 | 92 | | |
87 | 93 | | |
88 | 94 | | |
| |||
116 | 122 | | |
117 | 123 | | |
118 | 124 | | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
119 | 134 | | |
120 | 135 | | |
121 | 136 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
98 | 122 | | |
99 | 123 | | |
100 | 124 | | |
| |||
136 | 160 | | |
137 | 161 | | |
138 | 162 | | |
139 | | - | |
| 163 | + | |
140 | 164 | | |
141 | 165 | | |
142 | 166 | | |
| |||
148 | 172 | | |
149 | 173 | | |
150 | 174 | | |
151 | | - | |
| 175 | + | |
152 | 176 | | |
153 | 177 | | |
154 | 178 | | |
155 | 179 | | |
156 | 180 | | |
157 | | - | |
158 | | - | |
159 | | - | |
160 | | - | |
161 | | - | |
162 | | - | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
163 | 192 | | |
164 | 193 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
0 commit comments