def main() -> None: (x_train, t_train), (x_test, t_test) = sequence.load_data('addition.txt') x_train, x_test = x_train[:, ::-1], x_test[:, ::-1] char_to_id, id_to_char = sequence.get_vocab() vocab_size = len(char_to_id) wordvec_size = 16 hidden_size = 128 batch_size = 128 max_epoch = 25 max_grad = 5.0 model = PeekySeq2seq(vocab_size, wordvec_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer) acc_list = [] for epoch in range(1, max_epoch+1): 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}%') print('DONE')
def main(): (x_train, t_train), (x_test, t_test) = load_data('addition.txt', seed=1984) char_to_id, id_to_char = get_vocab() print(x_train.shape, t_train.shape) print(x_test.shape, t_test.shape) print(''.join([id_to_char[c] for c in x_train[0]])) print(''.join([id_to_char[c] for c in t_train[0]]))
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() -> None: (x_train, t_train), (x_test, t_test) = sequence.load_data('data.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(f"val acc {acc*100}%") model.save_params() print("DONE")
# https://github.com/mfshiu/nlp_ner.git # coding: utf-8 import sys sys.path.append('..') import numpy as np import matplotlib.pyplot as plt from dataset import sequence from common.optimizer import Adam from common.trainer import Trainer from common.util import eval_seq2seq from attention_seq2seq import AttentionSeq2seq # 載入資料 (x_train, t_train), (x_test, t_test) = sequence.load_data('train_33839.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 = int(16 / 1) hidden_size = int(256 * 2) batch_size = int(128 * 2) max_epoch = int(len(x_train) / 2000) max_grad = 5.0 model = AttentionSeq2seq(vocab_size, wordvec_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer)
# coding: utf-8 import sys sys.path.append('..') import numpy as np import matplotlib.pyplot as plt from dataset import sequence from common.optimizer import Adam from common.trainer import Trainer from common.util import eval_seq2seq from seq2seq import Seq2seq from peeky_seq2seq import PeekySeq2seq # データセットの読み込み (x_train, t_train), (x_test, t_test) = sequence.load_data('addition.txt') char_to_id, id_to_char = sequence.get_vocab() # Reverse input? ================================================= is_reverse = False # True if is_reverse: x_train, x_test = x_train[:, ::-1], x_test[:, ::-1] # ================================================================ # ハイパーパラメータの設定 vocab_size = len(char_to_id) wordvec_size = 16 hideen_size = 128 batch_size = 128 max_epoch = 25 max_grad = 5.0 # Normal or Peeky? ==============================================
# coding: utf-8 import sys sys.path.append('..') from dataset import sequence (x_train, t_train), (x_test, t_test) = \ sequence.load_data('addition.txt', seed=1984) char_to_id, id_to_char = sequence.get_vocab() print(x_train.shape, t_train.shape) print(x_test.shape, t_test.shape) # (45000, 7) (45000, 5) # (5000, 7) (5000, 5) print(x_train[0]) print(t_train[0]) # [ 3 0 2 0 0 11 5] # [ 6 0 11 7 5] print(''.join([id_to_char[c] for c in x_train[0]])) print(''.join([id_to_char[c] for c in t_train[0]])) # 71+118 # _189
# coding: utf-8 import sys import os sys.path.append(os.pardir) import numpy as np import matplotlib.pyplot as plt from dataset import sequence from common.optimizer import Adam from common.trainer import Trainer from common.util import eval_seq2seq from attention_seq2seq import AttentionSeq2seq from ch07.seq2seq import Seq2seq from ch07.peeky_seq2seq import PeekySeq2seq # データの読み込み (x_train, t_train), (x_val, t_val) = sequence.load_data('date.txt') char_to_id, id_to_char = sequence.get_vocab() # 入力文を反転 x_train, x_val = x_train[:, ::-1], x_val[:, ::-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) # model = Seq2seq(vocab_size, wordvec_size, hidden_size)
import sys, os sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from dataset import sequence (x_train, t_train), (x_test, t_test) = sequence.load_data('../dataset/addition.txt', seed=1984) char_to_id, id_to_char = sequence.get_vocab() print(x_train.shape, t_train.shape) print(x_test.shape, t_test.shape) print(x_train[0]) print(t_train[0]) print(''.join([id_to_char[c] for c in x_train[0]])) print(''.join([id_to_char[c] for c in t_train[0]]))
# coding: utf-8 import sys, os sys.path.append(os.pardir) from dataset import sequence (x_train, t_train), (x_val, t_val) = \ sequence.load_data("addition.txt") char_to_id, id_to_char = sequence.get_vocab() print(x_train.shape, t_train.shape) print(x_val.shape, t_val.shape) # (45000, 7) (45000, 5) # (5000, 7) (5000, 5) print(x_train[0]) print(t_train[0]) # [ 3 0 2 0 0 11 5] # [ 6 0 11 7 5]
# coding: utf-8 import sys import os sys.path.append(os.pardir) import numpy as np import matplotlib.pyplot as plt from dataset import sequence from common.optimizer import Adam from common.trainer import Trainer from common.util import eval_seq2seq from seq2seq import Seq2seq from peeky_seq2seq import PeekySeq2seq # データセットの読み込み (x_train, t_train), (x_val, t_val) = sequence.load_data('addition.txt') char_to_id, id_to_char = sequence.get_vocab() # Reverse input? ================================================= is_reverse = False # True if is_reverse: x_train, x_val = x_train[:, ::-1], x_val[:, ::-1] # ================================================================ # ハイパーパラメータの設定 vocab_size = len(char_to_id) wordvec_size = 16 hideen_size = 128 batch_size = 128 max_epoch = 25 max_grad = 5.0
# coding: utf-8 import sys sys.path.append('..') import numpy as np import matplotlib.pyplot as plt from dataset import sequence from common.optimizer import Adam from common.trainer import Trainer from common.util import eval_seq2seq from attention_seq2seq import AttentionSeq2seq # 載入資料 (x_train, t_train), (x_test, t_test) = sequence.load_data('ner_valid.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) # model = Seq2seq(vocab_size, wordvec_size, hidden_size) # model = PeekySeq2seq(vocab_size, wordvec_size, hidden_size) optimizer = Adam()
# coding: utf-8 import sys sys.path.append('..') from dataset import sequence (x_train, t_train), (x_test, t_test) = \ sequence.load_data("addition.txt", seed=1984) char_to_id, id_to_char = sequence.get_vocab() print(x_train.shape, t_train.shape) print(x_test.shape, t_test.shape) # (45000, 7) (45000, 5) # (5000, 7) (5000, 5) print(x_train[0]) print(t_train[0]) # [ 3 0 2 0 0 11 5] # [ 6 0 11 7 5]
# https://github.com/mfshiu/nlp_ner.git # coding: utf-8 import sys sys.path.append('..') import numpy as np import matplotlib.pyplot as plt from dataset import sequence from common.optimizer import Adam from common.trainer import Trainer from common.util import eval_seq2seq from attention_seq2seq import AttentionSeq2seq # 載入資料 (x_train, t_train), (x_test, t_test) = sequence.load_data('train3_70000.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 = int(16/1) hidden_size = int(256*2) batch_size = int(128*2) max_epoch = max(10, int(len(x_train) / 15000)) max_grad = 5.0 model = AttentionSeq2seq(vocab_size, wordvec_size, hidden_size) optimizer = Adam() trainer = Trainer(model, optimizer)
# coding: utf-8 import sys sys.path.append('..') import numpy as np from dataset import sequence import matplotlib.pyplot as plt from ch08.attention_seq2seq import AttentionSeq2seq (x_train, t_train), (x_test, t_test) = \ sequence.load_data('date.txt') char_to_id, id_to_char = sequence.get_vocab() # Reverse input x_train, x_test = x_train[:, ::-1], x_test[:, ::-1] vocab_size = len(char_to_id) wordvec_size = 16 hidden_size = 256 model = AttentionSeq2seq(vocab_size, wordvec_size, hidden_size) model.load_params() _idx = 0 def visualize(attention_map, row_labels, column_labels): fig, ax = plt.subplots() ax.pcolor(attention_map, cmap=plt.cm.Greys_r, vmin=0.0, vmax=1.0) ax.patch.set_facecolor('black')
return sampled class AttentionSeq2seq(Seq2seq): def __init__(self, vocab_size, wordvec_size, hidden_size): args = vocab_size, wordvec_size, hidden_size self.encoder = AttentionEncoder(*args) self.decoder = AttentionDecoder(*args) self.softmax = TimeSoftmaxWithLoss() self.params = self.encoder.params + self.decoder.params self.grads = self.encoder.grads + self.decoder.grads if __name__ == "__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 = 4 max_grad = 5.0 model = AttentionSeq2seq(vocab_size, wordvec_size, hidden_size)
import sys sys.path.append('..') import numpy as np import matplotlib.pyplot as plt from dataset import sequence from common.optimizer import Adam from common.trainer import Trainer from common.util import eval_seq2seq from ch07.seq2seq import Seq2seq (x_train, t_train), (x_test, t_test) = sequence.load_data('../dataset/minus.txt') char_to_id, id_to_char = sequence.get_vocab() vocab_size = len(char_to_id) wordvec_size = 16 hideen_size = 128 batch_size = 128 max_epoch = 25 max_grad = 5.0 model = Seq2seq(vocab_size, wordvec_size, hideen_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)