(args)
| 30 | |
| 31 | |
| 32 | def run(args): |
| 33 | dev = device.create_cpu_device() |
| 34 | dev.SetRandSeed(args.seed) |
| 35 | np.random.seed(args.seed) |
| 36 | |
| 37 | batch_size = args.batch_size |
| 38 | cmn_dataset = CmnDataset(path=args.dataset, shuffle=args.shuffle, batch_size=batch_size, train_ratio=0.8) |
| 39 | |
| 40 | print("【step-0】 prepare dataset...") |
| 41 | src_vocab_size, tgt_vocab_size = cmn_dataset.en_vab_size, cmn_dataset.cn_vab_size |
| 42 | src_len, tgt_len = cmn_dataset.src_max_len+1, cmn_dataset.tgt_max_len+1 |
| 43 | pad = cmn_dataset.cn_vab["<pad>"] |
| 44 | # train set |
| 45 | train_size = cmn_dataset.train_size |
| 46 | train_max_batch = train_size // batch_size |
| 47 | if train_size % batch_size > 0: |
| 48 | train_max_batch += 1 |
| 49 | |
| 50 | # test set |
| 51 | test_size = cmn_dataset.test_size |
| 52 | test_max_batch = test_size // batch_size |
| 53 | if test_size % batch_size > 0: |
| 54 | test_max_batch += 1 |
| 55 | print("【step-0】 src_vocab_size: %d, tgt_vocab_size: %d, src_max_len: %d, tgt_max_len: %d, " |
| 56 | "train_size: %d, test_size: %d, train_max_batch: %d, test_max_batch: %d" % |
| 57 | (src_vocab_size, tgt_vocab_size, src_len, tgt_len, train_size, test_size, train_max_batch, test_max_batch)) |
| 58 | |
| 59 | print("【step-1】 prepare transformer model...") |
| 60 | model = Transformer(src_n_token=src_vocab_size, |
| 61 | tgt_n_token=tgt_vocab_size, |
| 62 | d_model=args.d_model, |
| 63 | n_head=args.n_head, |
| 64 | dim_feedforward=args.dim_feedforward, |
| 65 | n_layers=args.n_layers) |
| 66 | |
| 67 | optimizer = opt.SGD(lr=args.lr, momentum=0.9, weight_decay=1e-5) |
| 68 | model.set_optimizer(optimizer) |
| 69 | print("【step-1】 src_n_token: %d, tgt_n_token: %d, d_model: %d, n_head: %d, dim_feedforward: %d, n_layers: %d, lr: %f" |
| 70 | % (src_vocab_size, tgt_vocab_size, args.d_model, args.n_head, args.dim_feedforward, args.n_layers, args.lr)) |
| 71 | |
| 72 | tx_enc_inputs = tensor.Tensor((batch_size, src_len), dev, tensor.int32, |
| 73 | np.zeros((batch_size, src_len), dtype=np.int32)) |
| 74 | tx_dec_inputs = tensor.Tensor((batch_size, tgt_len), dev, tensor.int32, |
| 75 | np.zeros((batch_size, tgt_len), dtype=np.int32)) |
| 76 | ty_dec_outputs = tensor.Tensor((batch_size, tgt_len), dev, tensor.int32, |
| 77 | np.zeros((batch_size, tgt_len), dtype=np.int32)) |
| 78 | # model.compile([tx_enc_inputs, tx_dec_inputs], is_train=True) |
| 79 | |
| 80 | print("【step-2】 training start...") |
| 81 | train_epoch_avg_loss_history = [] |
| 82 | train_epoch_avg_acc_history = [] |
| 83 | test_epoch_avg_acc_history = [] |
| 84 | for epoch in range(args.max_epoch): |
| 85 | # ok = input("Train[Yes/No]") |
| 86 | # if ok == "No": |
| 87 | # break |
| 88 | model.train() |
| 89 | model.graph(mode=False, sequential=False) |
no test coverage detected