return ppl ##################### # 하이퍼파라미터 설정 hidden_size = 100 # rnn 의 은닉 상태 벡터의 원소 수 batch_size = 20 wordvec_size = 100 time_size = 35 # truncated bptt가 한번에 펼치는 시간 크기 lr = 20.0 max_epoch = 4 max_grad = 0.25 # 학습 데이터 읽기 corpus, word_to_id, id_to_word = ptb.load_data('train') corpus_test, _, _ = ptb.load_data('test') vocab_size = len(word_to_id) xs = corpus[:-1] # 입력 ts = corpus[1:] # 출력 # 모델 생성 model = Rnnlm(vocab_size, wordvec_size, hidden_size) optimizer = SGD(lr) trainer = RnnlmTrainer(model, optimizer) # 기울기 클리핑 적용하여 학습 trainer.fit(xs, ts, max_epoch, batch_size, time_size, max_grad, eval_interval=20) trainer.plot(ylim=(0, 500)) # 테스트 데이터로 평가
def backward(self, dout=1): dout = self.ns_loss.backward(dout) dout *= 1 / len(self.in_layers) for layer in self.in_layers: layer.backward(dout) return None ################ window_size = 5 hidden_size = 100 batch_size = 100 max_epoch = 10 corpus, word_to_id, id_to_word = ptb.load_data('train') vocab_size = len(word_to_id) contexts, target = create_contexts_target(corpus, window_size) if GPU: contexts, target = to_gpu(contexts), to_gpu(target) model = CBOW(vocab_size, hidden_size, window_size, corpus) optimizer = Adam() trainer = Trainer(model, optimizer) trainer.fit(contexts, target, max_epoch, batch_size) trainer.plot() word_vecs = model.word_vecs if GPU: word_vecs = to_cpu(word_vecs)
''' 2.4.4 PTB 데이터셋 ''' import sys sys.path.append('..') import ptb import numpy as np corpus, word_to_id, id_to_word = ptb.load_data( 'train') # train, test, valid 중 하나 선택 가능 print('말뭉치 크기:', len(corpus)) print('corpus[:30]:', corpus[:30]) print() print('id_to_word[0]:', id_to_word[0]) print('id_to_word[1]:', id_to_word[1]) print('id_to_word[2]:', id_to_word[2]) print() print("word_to_id['car']:", word_to_id['car']) print("word_to_id['happy']:", word_to_id['happy']) print("word_to_id['lexus']:", word_to_id['lexus'])