Teacher Forcing ile modeli eğitme

Keras ile Machine Translation

Thushan Ganegedara

Data Scientist and Author

Model eğitimi ayrıntıları

  • Model eğitimi şunları gerektirir:
    • Kayıp fonksiyonu (örn. kategorik çapraz-entropi)
    • Optimize edici (örn. Adam)
Keras ile Machine Translation

Model eğitimi ayrıntıları

  • Kaybı hesaplamak için gerekenler:

    • Girdilerden üretilen olasılıksal tahminler ([batch_size, seq_len, vocab_size])
      • örn. [[0.11,...,0.81,0.04], [0.05,...,0.01, 0.93], ..., [0.78,..., 0.03,0.01]]
    • Gerçek tek-sıcak kodlu Fransızca hedefler ([batch_size, seq_len, vocab_size])
      • örn. [[0, ..., 1, 0], [0, ..., 0, 1],..., [0, ..., 1, 0]]
    • Çapraz-entropi: hedefler ile tahmin edilen kelimeler arasındaki fark
  • Kayıp, kaybı en aza indirmek için model parametrelerini güncelleyen optimize ediciye aktarılır

Keras ile Machine Translation

Teacher Forcing ile modeli eğitme

n_epochs, bsize = 3, 250
for ei in range(n_epochs):
  for i in range(0,data_size,bsize):

# Encoder girdileri, decoder girdileri ve çıktıları en_x = sents2seqs('source', en_text[i:i+bsize], onehot=True, reverse=True) de_xy = sents2seqs('target', fr_text[i:i+bsize], onehot=True)
# Decoder girdileri ve çıktılarının ayrılması de_x = de_xy[:,:-1,:] de_y = de_xy[:,1:,:]
# Tek bir yığın üzerinde eğitim ve değerlendirme nmt_tf.train_on_batch([en_x,de_x], de_y) res = nmt_tf.evaluate([en_x,de_x], de_y, batch_size=bsize, verbose=0) print("{} => Train Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))
Keras ile Machine Translation

Dizi dilimleme ayrıntıları

    de_x = de_xy[:,:-1,:]    
    de_y = de_xy[:,1:,:]

Dizi dilimleme

Keras ile Machine Translation

Eğitim ve doğrulama verisi oluşturma

train_size, valid_size = 800, 200
# Veri indeksleri oluşturma
inds = np.arange(len(en_text))
np.random.shuffle(inds)

# Eğitim ve doğrulama indekslerini ayırma train_inds = inds[:train_size] valid_inds = inds[train_size:train_size+valid_size]
# Eğitim ve doğrulama verilerini çıkarma tr_en = [en_text[ti] for ti in train_inds] tr_fr = [fr_text[ti] for ti in train_inds] v_en = [en_text[vi] for vi in valid_inds] v_fr = [fr_text[vi] for vi in valid_inds]
print('Training (EN):\n', tr_en[:2], '\nTraining (FR):\n', tr_fr[:2]) print('\nValid (EN):\n', tr_en[:2], '\nValid (FR):\n', tr_fr[:2])
Valid (EN): ['she saw that rusty blue truck .', 'france is usually snowy during autumn , ...'] 
Valid (FR): ['elle a vu ce camion bleu rouillé .', 'la france est généralement enneigée en automne ...']
Keras ile Machine Translation

Doğrulama ile eğitim

for ei in range(n_epochs):
  for i in range(0,train_size,bsize):    
    en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=True, reverse=True)
    de_xy = sents2seqs('target', tr_fr[i:i+bsize], onehot=True)
    de_x, de_y = de_xy[:,:-1,:], de_xy[:,1:,:]
    nmt_tf.train_on_batch([en_x, de_x], de_y)

v_en_x = sents2seqs('source', v_en, onehot=True, reverse=True) v_de_xy = sents2seqs('target', v_fr, onehot=True) v_de_x, v_de_y = v_de_xy[:,:-1,:], v_de_xy[:,1:,:]
res = nmt_tf.evaluate([v_en_x, v_de_x], v_de_y, batch_size=valid_size, verbose=0) print("Epoch {} => Loss:{}, Val Acc: {}".format(ei+1,res[0], res[1]*100.0))
Epoch 1 => Loss:4.784221172332764, Val Acc: 1.4999999664723873
Epoch 2 => Loss:4.716882228851318, Val Acc: 44.458332657814026
Epoch 3 => Loss:4.63267183303833, Val Acc: 47.333332896232605
Keras ile Machine Translation

Hadi eğitelim!

Keras ile Machine Translation

Preparing Video For Download...