Co-teaching 을 구현하기 위해서 다음과 같은 논문과 GitHub를 참고하였다.

https://github.com/bhanML/Co-teaching

Robust Training of Deep Neural Networks with Extremely Noisy Labels

구현을 위해 데이터를 불러오는 과정에서 노이지를 추가하기 위해서 일정 비율에 변화를 주었다.

transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomCrop(32, padding=4),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

또한, label 값을 바꿔 잘못된 값을 학습할 수 있도록 변화를 주었다.

import numpy as np

def noisify(train_labels, noise_type='symmetric', noise_rate=0.2, random_state=2024, nb_classes=10):
    np.random.seed(random_state)
    noisy_labels = train_labels.copy()
    
    if noise_type == 'symmetric':
        n_samples = len(train_labels)
        n_noisy = int(noise_rate * n_samples)
        noisy_indices = np.random.choice(n_samples, n_noisy, replace=False)

        for idx in noisy_indices:
            noisy_label = np.random.choice([l for l in range(nb_classes) if l != train_labels[idx]])
            noisy_labels[idx] = noisy_label

    else:
        pass
    
    return noisy_labels

train_labels = np.array(train_data.targets)
train_noisy_labels = noisify(train_labels, noise_type='symmetric', noise_rate=0.2, nb_classes=10)

Co-teaching에서 이를 해결하기 위해서 해결책을 제시하고 있는데,

이를 반영해서 다음시간에 구현해야 한다.