stats['epoch'], model.updates)) stats['best_valid'] = result[args.valid_metric] stats['no_improvement'] = 0 else: stats['no_improvement'] += 1 if stats['no_improvement'] >= args.early_stop: break if __name__ == '__main__': # Parse cmdline args and setup environment parser = argparse.ArgumentParser( 'Code to Natural Language Generation', formatter_class=argparse.ArgumentDefaultsHelpFormatter) add_train_args(parser) config.add_model_args(parser) args, unknown = parser.parse_known_args() args.use_tgt_word = False args.tgt_pos_emb = False # Set cuda args.cuda = torch.cuda.is_available() args.parallel = torch.cuda.device_count() > 1 # Set random state UNCOMMENT IF NEEDED # np.random.seed(args.random_seed) # torch.manual_seed(args.random_seed) # if args.cuda: # torch.cuda.manual_seed(args.random_seed) # Set logging
if result[args.valid_metric] > stats['best_valid']: logger.info('Best valid: %s = %.2f (epoch %d, %d updates)' % (args.valid_metric, result[args.valid_metric], stats['epoch'], model.updates)) model.save(args.model_file) stats['best_valid'] = result[args.valid_metric] if __name__ == '__main__': # 如果模块是被直接运行的,则代码块被执行,如果模块是被导入的,则代码块不被运行 parser = argparse.ArgumentParser( # 创建解析器 'ErnnReader', # 程序的名字 formatter_class=argparse. ArgumentDefaultsHelpFormatter # 自动将有关默认值的信息添加到每个参数帮助消息中 ) add_train_args(parser) # 添加参数 config.add_model_args(parser) # 添加参数 args = parser.parse_args() # 解析参数,将检查命令行,把每个参数转换成恰当的类型并采取恰当的操作 set_defaults(args) # set cuda args.cuda = not args.no_cuda and torch.cuda.is_available() if args.cuda: torch.cuda.set_device(args.gpu) # set random state # 随机数种子,使用相同的seed()值,每次生成的随机数都相同; # 若不设置,系统根据时间来设置随机数种子,故而每次随机数都不一样; # 设置的seed()值仅一次有效 np.random.seed(args.random_seed) torch.manual_seed(args.random_seed) if args.cuda: