xs = sum(corpus_train, [])[:-1] ts = sum(corpus_train, [])[1:] corpus_val = sum(corpus_val, []) corpus_test = sum(corpus_test, []) model = BetterRnnlm(vocab_size, wordvec_size, hidden_size, dropout) # optimizer = SGD(lr) optimizer = Adam(lr=lr) trainer = RnnlmTrainer(model, optimizer) best_ppl = float('inf') for epoch in range(max_epoch): trainer.fit(xs, ts, max_epoch=1, batch_size=batch_size, time_size=time_size, max_grad=max_grad) model.reset_state() ppl = eval_perplexity(model, corpus_val) print('검증 퍼플렉서티: ', ppl) if best_ppl > ppl: best_ppl = ppl model.save_params() else: lr /= 4.0 optimizer.lr = lr model.reset_state()
xs = corpus[:-1] ts = corpus[1:] # モデルの生成 model = Rnnlm(vocab_size, wordvec_size, hidden_size) optimizer = SGD(lr) trainer = RnnlmTrainer(model, optimizer) # パラメータの読み込み #model.load_params() # 勾配クリッピングを適用して学習 trainer.fit(xs, ts, max_epoch, batch_size, time_size, max_grad, eval_interval=20) trainer.plot(ylim=(0, 500)) # テストデータで評価 model.reset_state() ppl_test = eval_perplexity(model, corpus_test) print('test perplexity: ', ppl_test) # パラメータの保存 model.save_params() # | epoch 4 | iter 1321 / 1327 | time 2590[s] | perplexity 110.01 # evaluating perplexity ...
max_epoch = 25 max_grad = 5.0 # Normal or Peeky? ============================================== #model = Seq2seq(vocab_size, wordvec_size, hidden_size) model = PeekySeq2seq(vocab_size, wordvec_size, hidden_size) # ================================================================ optimizer = Adam() trainer = RnnlmTrainer(model, optimizer) best_ppl = float('inf') t1 = time.time() for epoch in range(max_epoch): flag = trainer.fit(xs, ts, mode, max_epoch=1, batch_size=batch_size, max_grad=max_grad) model.reset_state() ppl = eval_perplexity(model, corpus) print('valid perplexity: ', ppl) if best_ppl > ppl: best_ppl = ppl model.save_params() else: lr /= 4.0 optimizer.lr = lr model.reset_state()
@author: ghqls """ import sys sys.path.append('..') from common.optimizer import SGD from common.trainer import RnnlmTrainer from dataset import ptb from simple_rnnlm import SimpleRnnlm batch_size = 10 wordvec_size = 100 hidden_size = 100 time_size = 5 lr = 0.1 max_epoch = 100 corpus, word_to_id, id_to_word = ptb.load_data('train') corpus_size = 1000 corpus = corpus[:corpus_size] vocab_size = int(max(corpus) + 1) xs = corpus[:-1] ts = corpus[1:] model = SimpleRnnlm(vocab_size, wordvec_size, hidden_size) optimizer = SGD(lr) trainer = RnnlmTrainer(model, optimizer) trainer.fit(xs, ts, max_epoch, batch_size, time_size) trainer.plot()
sys.path.append('..') from common.optimizer import SGD from common.trainer import RnnlmTrainer # RnnlmTrainer 는 RNNLM 의 학습을 클래스 안으로 숨겨준다. from dataset import ptb from simple_rnnlm import SimpleRnnlm # 하이퍼파라미터 설정 batch_size = 10 wordvec_size = 100 hidden_size = 100 # RNN의 은닉 상태 벡터의 원소 수 time_size = 5 # RNN을 펼치는 크기 lr = 0.1 max_epoch = 100 # 학습 데이터 읽기 corpus, word_to_id, id_to_word = ptb.load_data('train') corpus_size = 1000 # 테스트 데이터셋을 작게 설정 corpus = corpus[:corpus_size] vocab_size = int(max(corpus) + 1) xs = corpus[:-1] # 입력 ts = corpus[1:] # 출력(정답 레이블) # 모델 생성 model = SimpleRnnlm(vocab_size, wordvec_size, hidden_size) optimizer = SGD(lr) trainer = RnnlmTrainer(model, optimizer) # 먼저 model, optimzer 을 주어 초기화 trainer.fit(xs, ts, max_epoch, batch_size, time_size) # fit 메서드를 통해 학습을 수행한다. trainer.plot()