Skip to content

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

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

fix(trainer): predict_label references undefined opt and (+3 more)#92
andrewwhitecdw wants to merge 1 commit 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
andrewwhitecdw marked this pull request as ready for review August 3, 2026 22:07
@andrewwhitecdw

Copy link
Copy Markdown
Author

Closing this sweep-generated PR: PR has 3 commits; sweep requires exactly one commit per PR. It does not meet the sweep requirements (single signed-off commit).

Signed-off-by: Andrew White <andrewwhitecdw@users.noreply.github.com>
Signed-off-by: andrewwhitecdw <andrewwhitecdw@users.noreply.github.com>
@andrewwhitecdw
andrewwhitecdw force-pushed the bugfix/trainer-assorted-4f71f1bb branch from 02c1128 to 8b9964f Compare August 18, 2026 00:18
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