CIFAR-10 Self-Training Final Iterate (t=8)

Final (degraded) iterate of an iterative self-training trajectory on CIFAR-10, reproducing the deep-learning analogue of Why Self-Training Helps and Hurts (arXiv:2602.14029, Appendix A).

Clean CIFAR-10 test accuracy: 44.70% (iteration t=8).

After the optimum, further self-training forgets signal: accuracy decays from 46.76% (t=4) to 44.70% (t=8).

Training configuration

  • Architecture: ResNet-18 with CIFAR stem (3x3 conv, no maxpool), trained from scratch
  • Iteration: t=8 of K=8
  • Data: 5000 fresh disjoint CIFAR-10 train images per iteration (uoft-cs/cifar10)
  • Teacher (t=0) labels: 40% symmetric noise; students: hard pseudo-labels from iterate t-1
  • SGD lr 0.05, momentum 0.9, weight decay 5e-4, 5-epoch warmup + cosine, batch 128, 60 epochs
  • Augmentation: random crop (pad 4) + horizontal flip
  • torch 2.13.0+cu130, seed 108

Full trajectory, configs, metrics and plots: https://huggingface.co/datasets/pngwn/self-training-denoising-forgetting

Usage

import torch, torch.nn as nn, torchvision

def build_model():
    m = torchvision.models.resnet18(weights=None)
    m.conv1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1, bias=False)
    m.maxpool = nn.Identity()
    m.fc = nn.Linear(512, 10)
    return m

model = build_model()
sd = torch.load("model.pt", map_location="cpu", weights_only=True)
model.load_state_dict(sd)
model.eval()

Input: CIFAR-10 images normalized with mean (0.4914, 0.4822, 0.4465), std (0.2470, 0.2435, 0.2616).

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train pngwn/cifar-selftrain-final-iterate

Paper for pngwn/cifar-selftrain-final-iterate