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에서 이를 해결하기 위해서 해결책을 제시하고 있는데,
이를 반영해서 다음시간에 구현해야 한다.