Dividindo os dados em conjuntos de treinamento e validação
Você aprendeu que usar só os dados de treinamento sem um conjunto de dados de validação pode causar um problema chamado sobreajuste. Quando rola um overfitting, o modelo fica muito bom em prever dados para os inputs de treinamento, mas não consegue generalizar muito bem para dados que nunca viu antes. Isso quer dizer que o modelo não vai ser muito útil, porque não dá pra generalizar. Para evitar isso, você pode usar um conjunto de dados de validação.
Neste exercício, você vai criar um conjunto de treinamento e validação a partir do conjunto de dados que você tem (ou seja, en_text
contendo 1000 frases em inglês e fr_text
contendo as 1000 frases em francês). Você vai usar 80% do conjunto de dados para treinar e 20% para validar.
Este exercício faz parte do curso
Tradução automática com Keras
Instruções do exercício
- Defina uma sequência de índices usando um
np.arange()
, que começa com 0 e tem tamanho deen_text
. - Defina “
valid_inds
” como os últimos índices “valid_size
” da sequência de índices. - Defina
tr_en
etf_fr
, que têm as frases encontradas emtrain_inds
indices, nas listasen_text
efr_text
. - Defina
v_en
ev_fr
, que têm as frases encontradas emvalid_inds
indices, nas listasen_text
efr_text
.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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])