훈련/검증 세트로 데이터 나누기
검증 데이터셋 없이 훈련 데이터만 사용하면 과적합(overfitting) 문제가 발생할 수 있다는 것을 배웠어요. 과적합이 일어나면 모델은 훈련 입력에 대해서는 매우 잘 예측하지만, 보지 못한 데이터에 대해서는 일반화가 잘 되지 않아요. 즉, 일반화가 되지 않으므로 실용성이 떨어집니다. 이를 피하려면 검증 데이터셋을 사용해야 해요.
이 연습 문제에서는 현재 가진 데이터셋(즉, 1000개의 영어 문장이 들어 있는 en_text와 1000개의 프랑스어 문장이 들어 있는 fr_text)에서 훈련 세트와 검증 세트를 만들 거예요. 데이터셋의 80%는 훈련용, 20%는 검증용으로 사용합니다.
이 연습은 강의의 일부입니다
Keras로 배우는 Machine Translation
연습 안내
np.arange()를 사용해 0부터 시작하고 크기가en_text와 같은 인덱스 시퀀스를 정의하세요.- 인덱스 시퀀스에서 마지막
valid_size개의 인덱스를valid_inds로 정의하세요. - 리스트
en_text와fr_text에서train_inds위치의 문장을 담아tr_en과tf_fr를 정의하세요. - 리스트
en_text와fr_text에서valid_inds위치의 문장을 담아v_en과v_fr를 정의하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
train_size, valid_size = 800, 200
# Define a sequence of indices from 0 to len(en_text)
inds = ____.____(len(_____))
np.random.shuffle(inds)
train_inds = inds[:train_size]
# Define valid_inds: last valid_size indices
valid_inds = inds[____]
# Define tr_en (train EN sentences) and tr_fr (train FR sentences)
tr_en = [en_text[____] for ti in ____]
tr_fr = [____ for ti in ____]
# Define v_en (valid EN sentences) and v_fr (valid FR sentences)
v_en = [____ for vi in valid_inds]
v_fr = [____ for vi in ____]
print('Training (EN):\n', tr_en[:3], '\nTraining (FR):\n', tr_fr[:3])
print('\nValid (EN):\n', v_en[:3], '\nValid (FR):\n', v_fr[:3])