CIFAR-10 Self-Training Best Iterate (t=4)

Best self-trained 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: 46.76% (iteration t=4).

Trained on hard pseudo-labels produced by iterate t=3 on a fresh disjoint 5000-image subset. This is the risk minimum of the trajectory: denoising dominates up to this point (+4.3 points over the teacher).

Training configuration

  • Architecture: ResNet-18 with CIFAR stem (3x3 conv, no maxpool), trained from scratch
  • Iteration: t=4 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 104

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
7
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

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

Paper for pngwn/cifar-selftrain-best-iterate