def main(): # ハイパーパラメータの設定 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) # モデルなどの生成 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 params = {} params['word_vecs'] = word_vecs.astype(np.float16) params['word_to_id'] = word_to_id params['id_to_word'] = id_to_word pkl_file = 'cbow_params.pkl' with open(pkl_file, 'wb') as f: pickle.dump(params, f, -1)
def train_eval(x_train, x_test, is_peeky): if is_peeky: model = PeekySeq2seq(vocab_size, wordvec_size, hidden_size) else: model = Seq2seq(vocab_size, wordvec_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) acc_list = [] for epoch in range(max_epoch): trainer.fit(x_train, t_train, max_epoch=1, batch_size=batch_size, max_grad=max_grad) correct_num = 0 for i in range(len(x_test)): question, correct = x_test[[i]], t_test[[i]] verbose = i < 10 correct_num += eval_seq2seq(model, question, correct, id_to_char, verbose) acc = float(correct_num) / len(x_test) acc_list.append(acc) print('val acc %.3f%%' % (acc * 100)) return acc_list
def main(): max_epoch = 300 batch_size = 30 hidden_size = 10 output_size = 3 learning_rate = 1.0 x, t = spiral.load_data() model = TwoLayerNet(2, hidden_size, output_size) optimizer = SGD(learning_rate) trainer = Trainer(model, optimizer) trainer.fit(x, t, max_epoch, batch_size) trainer.plot()
def main(): # データセットの読み込み (x_train, t_train), (x_test, t_test) = sequence.load_data('addition.txt') char_to_id, id_to_char = sequence.get_vocab() # 入力列を逆順にするとSeq2Se2の精度が上がるらしいが。。。クソ理論 is_reverse = True if is_reverse: x_train, x_test = x_train[:, ::-1], x_test[:, ::-1] # ハイパーパラメータの設定 vocab_size = len(char_to_id) wordvec_size = 16 hidden_size = 128 batch_size = 128 max_epoch = 25 max_grad = 5.0 # モデル/オプティマイザ/トレーナーの生成 # model = Seq2seq(vocab_size, wordvec_size, hidden_size) model = PeekySeq2seq(vocab_size, wordvec_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) acc_list = [] for epoch in range(max_epoch): trainer.fit(x_train, t_train, max_epoch=1, batch_size=batch_size, max_grad=max_grad) correct_num = 0 for i in range(len(x_test)): question, correct = x_test[[i]], t_test[[i]] verbose = i < 10 correct_num += eval_seq2seq(model, question, correct, id_to_char, verbose) acc = float(correct_num) / len(x_test) acc_list.append(acc) print(f'val acc {acc * 100}')
def main(): # データの読み込み (x_train, t_train), (x_test, t_test) = sequence.load_data('date.txt') char_to_id, id_to_char = sequence.get_vocab() # 入力文を反転 x_train, x_test = x_train[:, ::-1], x_test[:, ::-1] # ハイパーパラメータの設定 vocab_size = len(char_to_id) wordvec_size = 16 hidden_size = 256 batch_size = 128 max_epoch = 10 max_grad = 5.0 model = AttentionSeq2seq(vocab_size, wordvec_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) acc_list = [] for epoch in range(max_epoch): trainer.fit(x_train, t_train, max_epoch=1, batch_size=batch_size, max_grad=max_grad) correct_num = 0 for i in range(len(x_test)): question, correct = x_test[[i]], t_test[[i]] verbose = i < 10 correct_num += eval_seq2seq(model, question, correct, id_to_char, verbose, is_reverse=True) acc = float(correct_num) / len(x_test) acc_list.append(acc) print('val acc %.3f%%' % (acc * 100))
def main(): window_size = 1 hidden_size = 5 batch_size = 3 max_epoch = 1000 text = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) vocab_size = len(word_to_id) contexts, target = create_contexts_target(corpus, window_size) target = convert_one_hot(target, vocab_size) contexts = convert_one_hot(contexts, vocab_size) model = SimpleCBOW(vocab_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) trainer.fit(contexts, target, max_epoch, batch_size) trainer.plot()
def test_train_word2vec_model(): """word2vecモデルの学習 """ window_size = 1 hidden_size = 5 # 単語の分散表現ベクトルの次元数 batch_size = 3 max_epoch = 1000 text = 'You say goodbye and I say hello.' # コーパスの作成 corpus, word_to_id, id_to_word = preprocess(text) # コンテキストとターゲットの作成 vocab_size = len(word_to_id) contexts, target = create_context_target(corpus, window_size) target = convert_one_hot(target, vocab_size) contexts = convert_one_hot(contexts, vocab_size) print("one-hot target: ", target) print("one-hot contexts: ", contexts) # CBOWモデル model = SimpleCBOW(vocab_size, hidden_size) optimizer = Adam() # trainer trainer = Trainer(model, optimizer) # 学習 trainer.fit(contexts, target, max_epoch=max_epoch, batch_size=batch_size) trainer.plot() # CBOWの重み(W_in)を取得する word_vecs = model.word_vecs for word_id, word in id_to_word.items(): print(word, word_vecs[word_id])
max_epoch = 1000 text = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) vocab_size = len(word_to_id) contexts, target = create_contexts_target, convert_one_hot window_size = 1 hidden_size = 5 batch_size = 3 max_epoch = 1000 text = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) vocab_size = len(word_to_id) contexts, target = create_contexts_target(corpus, window_size) target = convert_one_hot(target, vocab_size) contexts = convert_one_hot(contexts, vocab_size) model = SimpleCBOW(vocab_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) trainer.fit(contexts, target, max_epoch, batch_size) trainer.plot() word_vecs = model.word_vecs for word_id, word in id_to_word.items(): print(word, word_vecs[word_id])
wordvec_size = 16 hidden_size = 256 batch_size = 128 max_epoch = 4 max_grad = 5.0 model = AttentionSeq2seq(vocab_size, wordvec_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) acc_list = [] for epoch in range(max_epoch): trainer.fit(x_train, t_train, max_epoch=1, batch_size=batch_size, max_grad=max_grad) correct_num = 0 for i in range(len(x_test)): question, correct = x_test[[i]], t_test[[i]] verbose = i < 10 correct_num += eval_seq2seq(model, question, correct, id_to_char, verbose, is_reverse=True) acc = float(correct_num) / len(x_test)
x_test = pickle.load(x_test) y_test = open(y_train_list[-1], "rb") y_test = pickle.load(y_test) x_test = x_test[0:30] y_test = y_test[0:30] for epoch in range(max_epoch): # 分割したファイルを分けて開く for i in range(3, len(x_train_list)): x_train = open(x_train_list[i], "rb") x_train = pickle.load(x_train) y_train = open(y_train_list[i], "rb") y_train = pickle.load(y_train) for u in range(301): trainer.fit(x_train[u * 100:(u + 1) * 100], y_train[u * 100:(u + 1) * 100], max_epoch=1, batch_size=batch_size, max_grad=max_grad) if i%100==0: model.save_params() print(int(i / len(x_train_list)), "%", "completed...") if i % 2 == 0: # 念の為、訓練データのメモリ解放を行う x_train = "" y_train = "" # テストデータに対する評価 x_test = open(x_train_list[-1], "rb") x_test = pickle.load(x_test) y_test = open(y_train_list[-1], "rb") y_test = pickle.load(y_test) x_test = x_test[0:30] y_test = y_test[0:30] correct_num = 0
import sys sys.path.append('..') from common.optimizer import SGD from common.trainer import Trainer from dataset import spiral from two_layer_net import TwoLayerNet # 하이퍼파라미터 설정 max_epoch = 300 batch_size = 30 hidden_size = 10 learning_rate = 1.0 x, t = spiral.load_data() model = TwoLayerNet(input_size=2, hidden_size=hidden_size, output_size=3) optimizer = SGD(lr=learning_rate) trainer = Trainer(model, optimizer) trainer.fit(x, t, max_epoch, batch_size, eval_interval=10) trainer.plot()
# model = Seq2seq(vocab_size, wordvec_size, hidden_size) model = PeekySeq2seq(vocab_size, wordvec_size, hidden_size) # model = AttentionSeq2seq(vocab_size, wordvec_size, hidden_size) # model = Seq2seqBiLSTM(vocab_size, wordvec_size, hidden_size) # model = PeekySeq2seqBiLSTM(vocab_size, wordvec_size, hidden_size) # model = AttentionSeq2seqBiLSTM(vocab_size, wordvec_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) # Train print("Target dataset:", dataset_name) trainer.fit(x_train, t_train, x_test, t_test, max_epoch=max_epoch, batch_size=batch_size, max_grad=max_grad) # Inference start_id = seq.start_id sample_size = seq.sample_size guess_train = model.generate(x_train, start_id, sample_size) guess_test = model.generate(x_test, start_id, sample_size) ## 結果の保存 # 保存ファイルのファイル名生成 modelname = model.__class__.__name__ timestamp = datetime.now().strftime("_%y%m%d_%H%M") save_dir = result_dir / (dataset_name + timestamp)
[[[1 0 0 0 0 0 0] [0 0 1 0 0 0 0]] <BLANKLINE> [[0 1 0 0 0 0 0] [0 0 0 1 0 0 0]] <BLANKLINE> [[0 0 1 0 0 0 0] [0 0 0 0 1 0 0]] <BLANKLINE> [[0 0 0 1 0 0 0] [0 1 0 0 0 0 0]] <BLANKLINE> [[0 0 0 0 1 0 0] [0 0 0 0 0 1 0]] <BLANKLINE> [[0 1 0 0 0 0 0] [0 0 0 0 0 0 1]]] """ print(contexts_one_hot) model = SimpleSkipGram(vocabulary_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) trainer.fit(contexts_one_hot, target_one_hot, max_epoch, batch_size) trainer.plot() word_vecs = model.word_vecs for word_id, word in id_to_word.items(): print(word, word_vecs[word_id])
num_encoders=1, num_decoders=1) if os.path.isfile("../pkl/myTransformer_params.pkl"): model.load_params("../pkl/myTransformer_params.pkl") optimizer = Adam(lr=0.00001) # optimizer = SGD(lr=0.00005) # optimizer = RMSprop(lr=0.00005) trainer = Trainer(model, optimizer) acc_list = [] for epoch in range(max_epoch): trainer.fit(x_train, t_train, max_epoch=1, batch_size=batch_size, max_grad=max_grad, eval_interval=10) model.save_params('../pkl/myTransformer_params.pkl') correct_num = 0 for i in range(len(x_test)): question, correct = x_test[[i]], t_test[[i]] verbose = i < 10 correct_num += eval_transformer(model, question, correct, preprocessing.id_to_word, preprocessing.word_to_id['<eos>'], verbose, is_reverse=False)