Skip to content

fix(trainer): predict_label references undefined opt and (+3 more) - #92

Open
andrewwhitecdw wants to merge 3 commits into
NVlabs:masterfrom
andrewwhitecdw:bugfix/trainer-assorted-4f71f1bb
Open

fix(trainer): predict_label references undefined opt and (+3 more)#92
andrewwhitecdw wants to merge 3 commits into
NVlabs:masterfrom
andrewwhitecdw:bugfix/trainer-assorted-4f71f1bb

Conversation

@andrewwhitecdw

@andrewwhitecdw andrewwhitecdw commented Jul 27, 2026

Copy link
Copy Markdown

Small fixes in trainer.py:

fix: predict_label references undefined opt and falls through

Fix: Apply patch:

--- a/trainer.py
+++ b/trainer.py
@@ -75,7 +75,7 @@ def update_teacher(model_s, model_t, alpha=0.999):
     param_t.data.mul_(alpha).add_(1 - alpha, param_s.data)
 
-def predict_label(teacher_models, inputs, num_class, alabel, slabel, teacher_style=0):
+def predict_label(teacher_models, inputs, num_class, alabel, slabel, teacher_style=0, alpha=0.5):
 # teacher_style:
 # 0: Our smooth dynamic label
 # 1: Pseudo label, hard dynamic label
@@ -94,7 +94,7 @@ def predict_label(teacher_models, inputs, num_class, alabel, slabel, teacher_styl
             if count==0:
                 outputs_t = outputs_t1 + outputs_t2
             else:
-                outputs_t = outputs_t * opt.alpha  # old model decay
+                outputs_t = outputs_t * alpha  # old model decay
                 outputs_t += outputs_t1 + outputs_t2
             count +=2
     elif teacher_style == 1:  # dynamic one-hot  label
@@ -109,7 +109,7 @@ def predict_label(teacher_models, inputs, num_class, alabel, slabel, teacher_styl
             if count==0:
                 outputs_t = outputs_t1 + outputs_t2
             else:
-                outputs_t = outputs_t * opt.alpha  # old model decay
+                outputs_t = outputs_t * alpha  # old model decay
                 outputs_t += outputs_t1 + outputs_t2
             count +=2
         _, dlabel = torch.max(outputs_t.data, 1)
@@ -141,7 +141,7 @@ def predict_label(teacher_models, inputs, num_class, alabel, slabel, teacher_styl
             if count==0:
                 outputs_t = outputs_t1 + outputs_t2
             else:
-                outputs_t = outputs_t * opt.alpha  # old model decay
+                outputs_t = outputs_t * alpha  # old model decay
                 outputs_t += outputs_t1 + outputs_t2
             count +=2
         mask = torch.zeros(outputs_t.shape)
@@ -151,7 +151,7 @@ def predict_label(teacher_models, inputs, num_class, alabel, slabel, teacher_styl
             mask[i, slabel[i]] = 1
         outputs_t = outputs_t*mask
     else:
-        print('not valid style. teacher-style is in [0-3].')
+        raise ValueError('not valid style. teacher-style is in [0-4].')
 
     s = torch.sum(outputs_t, dim=1, keepdim=True)
     s = s.expand_as(outputs_t)
@@ -284,7 +284,7 @@ class DGNet_Trainer(nn.Module):
             if hyperparameters['ID_style'] == 'normal':
                 _, p_a_student = self.id_a(scale2(x_ba_copy))
                 p_a_student = log_sm(p_a_student)
-                p_a_teacher = predict_label(self.teacher_model, scale2(x_ba_copy), num_class = hyperparameters['ID_class'], alabel = l_a, slabel = l_b, teacher_style = hyperparameters['teacher_style'])
+                p_a_teacher = predict_label(self.teacher_model, scale2(x_ba_copy), num_class = hyperparameters['ID_class'], alabel = l_a, slabel = l_b, teacher_style = hyperparameters['teacher_style'], alpha = hyperparameters.get('alpha', 0.5))
                 self.loss_teacher = self.criterion_teacher(p_a_student, p_a_teacher) / p_a_student.size(0)
 
                 _, p_b_student = self.id_b(scale2(x_ab_copy))
                 p_b_student = log_sm(p_b_student)
-                p_b_teacher = predict_label(self.teacher_model, scale2(x_ab_copy), num_class = hyperparameters['ID_class'], alabel = l_b, slabel = l_a, teacher_style = hyperparameters['teacher_style'])
+                p_b_teacher = predict_label(self.teacher_model, scale2(x_ab_copy), num_class = hyperparameters['ID_class'], alabel = l_b, slabel = l_a, teacher_style = hyperparameters['teacher_style'], alpha = hyperparameters.get('alpha', 0.5))
                 self.loss_teacher += self.criterion_teacher(p_b_student, p_b_teacher) / p_b_student.size(0)
             elif hyperparameters['ID_style'] == 'AB':
                 # normal teacher-student loss
@@ -293,12 +293,12 @@ class DGNet_Trainer(nn.Module):
                 p_a_student = log_sm(p_ba_student[0])
                 with torch.no_grad():
-                    p_a_teacher = predict_label(self.teacher_m
...(truncated)

fix: predict_label references undefined opt.alpha causing NameError

Fix: Apply patch:

--- a/trainer.py
+++ b/trainer.py
@@ -96,7 +96,7 @@
 # 4: Dynamic Soft Two-label
 # alabel is appearance label
-def predict_label(teacher_models, inputs, num_class, alabel, slabel, teacher_style=0):
+def predict_label(teacher_models, inputs, num_class, alabel, slabel, teacher_style=0, alpha=0.0):
     if teacher_style == 0:
         count = 0
         sm = nn.Softmax(dim=1)
@@ -108,7 +108,7 @@
             if count==0:
                 outputs_t = outputs_t1 + outputs_t2
             else:
-                outputs_t = outputs_t * opt.alpha  # old model decay
+                outputs_t = outputs_t * alpha  # old model decay
                 outputs_t += outputs_t1 + outputs_t2
             count +=2
@@ -122,7 +122,7 @@
             if count==0:
                 outputs_t = outputs_t1 + outputs_t2
             else:
-                outputs_t = outputs_t * opt.alpha  # old model decay
+                outputs_t = outputs_t * alpha  # old model decay
                 outputs_t += outputs_t1 + outputs_t2
             count +=2
@@ -149,7 +149,7 @@
             if count==0:
                 outputs_t = outputs_t1 + outputs_t2
             else:
-                outputs_t = outputs_t * opt.alpha  # old model decay
+                outputs_t = outputs_t * alpha  # old model decay
                 outputs_t += outputs_t1 + outputs_t2
             count +=2
@@ -338,7 +338,7 @@
         if hyperparameters['teacher_w'] >0 and hyperparameters['teacher'] != "":
             if hyperparameters['ID_style'] == 'normal':
                 _, p_a_student = self.id_a(scale2(x_ba_copy))
                 p_a_student = log_sm(p_a_student)
-                p_a_teacher = predict_label(self.teacher_model, scale2(x_ba_copy), num_class = hyperparameters['ID_class'], alabel = l_a, slabel = l_b, teacher_style = hyperparameters['teacher_style'])
+                p_a_teacher = predict_label(self.teacher_model, scale2(x_ba_copy), num_class = hyperparameters['ID_class'], alabel = l_a, slabel = l_b, teacher_style = hyperparameters['teacher_style'], alpha=hyperparameters.get('alpha', 0.0))
                 self.loss_teacher = self.criterion_teacher(p_a_student, p_a_teacher) / p_a_student.size(0)
 
                 _, p_b_student = self.id_b(scale2(x_ab_copy))
                 p_b_student = log_sm(p_b_student)
-                p_b_teacher = predict_label(self.teacher_model, scale2(x_ab_copy), num_class = hyperparameters['ID_class'], alabel = l_b, slabel = l_a, teacher_style = hyperparameters['teacher_style'])
+                p_b_teacher = predict_label(self.teacher_model, scale2(x_ab_copy), num_class = hyperparameters['ID_class'], alabel = l_b, slabel = l_a, teacher_style = hyperparameters['teacher_style'], alpha=hyperparameters.get('alpha', 0.0))
                 self.loss_teacher += self.criterion_teacher(p_b_student, p_b_teacher) / p_b_student.size(0)
             elif hyperparameters['ID_style'] == 'AB':
@@ -351,11 +351,11 @@
                 # BA -> LabelA(smooth) + LabelB(batchB)
                 _, p_ba_student = self.id_a(scale2(x_ba_copy))# f_a, s_b
                 p_a_student = log_sm(p_ba_student[0])
                 with torch.no_grad():
-                    p_a_teacher = predict_label(self.teacher_model, scale2(x_ba_copy), num_class = hyperparameters['ID_class'], alabel = l_a, slabel = l_b, teacher_style = hyperparameters['teacher_style'])
+                    p_a_teacher = predict_label(self.teacher_model, scale2(x_ba_copy), num_class = hyperparameters['ID_class'], alabel = l_a, slabel = l_b, teacher_style = hyperparameters['teacher_style'], alpha=hyperparameters.get('alpha', 0.0))
                 self.loss_teacher = self.criterion_teacher(p_a_student, p_a_teacher) / p_a_student.size(0)
 
                 _, p_ab_student = self.id_b(scale2(x_ab_copy)) # f_b, s_a
                 p_b_student = log_sm(p_ab_student[0])
                 with torch.no_grad():
-                    p_b_teacher = predict_label(self.teacher_model, scale2(x_ab_copy), num_cl
...(truncated)

fix: predict_label else branch leaves outputs_t undefined

Fix: Replace:

    else:
        print('not valid style. teacher-style is in [0-3].')

    s = torch.sum(outputs_t, dim=1, keepdim=True)

with:

    else:
        raise ValueError('not valid style. teacher-style is in [0-4].')

    s = torch.sum(outputs_t, dim=1, keepdim=True)

fix: update_teacher uses deprecated add_(value, other) signature

Fix: Replace:

def update_teacher(model_s, model_t, alpha=0.999):
    for param_s, param_t in zip(model_s.parameters(), model_t.parameters()):
        param_t.data.mul_(alpha).add_(1 - alpha, param_s.data)

with:

def update_teacher(model_s, model_t, alpha=0.999):
    for param_s, param_t in zip(model_s.parameters(), model_t.parameters()):
        param_t.data.mul_(alpha).add_(param_s.data, alpha=1 - alpha)

Files changed

  • trainer.py

andrewwhitecdw and others added 3 commits July 27, 2026 07:25
Auditor: The diff does not fix the primary stated problem: predict_label still references an undefined `opt` and still lacks an `alpha` parameter. It also makes an unrelated signature change in update_teacher and is incomplete relative to the described patch.
Auditor: The diff correctly fixes the undefined opt.alpha and the deprecated add_ signature, but the else branch now raises ValueError claiming valid styles are [0-4] while the original message and visible code support [0-3]; this is an unverified, likely incorrect change and also silently turns print into raise.
@andrewwhitecdw
andrewwhitecdw marked this pull request as ready for review August 3, 2026 22:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant