def infer(hparams): utils.log('Inferring ...') if hparams.word_char == 'word': word_embed, word_vocab = data_utils.get_embed_vocab(hparams.word_embed_file) data_utils.init_data('word', word_vocab, hparams.question_file, infer_file=hparams.infer_file, test=True) else: char_embed, char_vocab = data_utils.get_embed_vocab(hparams.char_embed_file) data_utils.init_data('char', char_vocab, hparams.question_file, infer_file=hparams.infer_file, test=True) infer_graph = tf.Graph() utils.log('Creating infer model ...') with infer_graph.as_default(), tf.container("infer"): infer_iterator = data_utils.get_iterator('infer', hparams.batch_size, shuffle=False) infer_model = Model(hparams, word_embed if hparams.word_char == 'word' else char_embed, infer_iterator, tf.contrib.learn.ModeKeys.EVAL) config_proto = tf.ConfigProto() config_proto.gpu_options.allow_growth = True infer_sess = tf.Session(graph=infer_graph, config=config_proto) latest_ckpt = tf.train.latest_checkpoint(hparams.best_model_dir) assert latest_ckpt, 'No ckpt for eval' infer_model.saver.restore(infer_sess, latest_ckpt) utils.log('Model parameters restored from {}'.format(latest_ckpt)) scores = [] infer_sess.run(infer_iterator.initializer) while True: try: batch_scores = infer_model.infer(infer_sess) for score in batch_scores: scores.append(score[1]) except tf.errors.OutOfRangeError: with open(hparams.output_file, 'w') as fout: fout.write('y_pre\n') for score in scores: fout.write(str(score) + '\n') utils.log('Finish eval on test, result saved to {}'.format( hparams.output_file )) break utils.log('Done')
def predict_on_stocks(array: numpy.array, model_path: str, interval: str, stock_path: str): scaler = StandardScaler() open_data, close_data = init_data(array) open_data, close_data = normalize_data(open_data, close_data, scaler) (x_train, y_train, x_test, y_test) = split_data(open_data, close_data) (x_train, y_train) = shuffle_data(x_train, y_train) (model, checkpoint_callback) = create_model(model_path) model.fit(x_train, y_train, validation_data=(x_test, y_test), batch_size=64, epochs=EPOCHS, callbacks=[checkpoint_callback]) #test_model(model, x_test, y_test, scaler, interval) // uncomment this if you want to test the ai efficiency dump(scaler, f'{model_path}/std_scaler.bin', compress=True)
def initialize(sess): """Initialize data and model.""" if FLAGS.jobid >= 0: data.log_filename = os.path.join(FLAGS.train_dir, "log%d" % FLAGS.jobid) data.print_out("NN ", newline=False) # Set random seed. seed = FLAGS.random_seed + max(0, FLAGS.jobid) tf.set_random_seed(seed) random.seed(seed) np.random.seed(seed) # Check data sizes. assert data.bins min_length = 3 max_length = min(FLAGS.max_length, data.bins[-1]) assert max_length + 1 > min_length while len(data.bins) > 1 and data.bins[-2] > max_length + EXTRA_EVAL: data.bins = data.bins[:-1] assert data.bins[0] > FLAGS.rx_step data.forward_max = max(FLAGS.forward_max, data.bins[-1]) nclass = min(FLAGS.niclass, FLAGS.noclass) data_size = FLAGS.train_data_size if FLAGS.mode == 0 else 1000 # Initialize data for each task. tasks = FLAGS.task.split("-") for t in tasks: for l in xrange(max_length + EXTRA_EVAL - 1): data.init_data(t, l, data_size, nclass) data.init_data(t, data.bins[-2], data_size, nclass) data.init_data(t, data.bins[-1], data_size, nclass) end_size = 4 * 1024 if FLAGS.mode > 0 else 1024 data.init_data(t, data.forward_max, end_size, nclass) # Print out parameters. curriculum = FLAGS.curriculum_bound msg1 = ("layers %d kw %d h %d kh %d relax %d batch %d noise %.2f task %s" % (FLAGS.nconvs, FLAGS.kw, FLAGS.height, FLAGS.kh, FLAGS.rx_step, FLAGS.batch_size, FLAGS.grad_noise_scale, FLAGS.task)) msg2 = "data %d %s" % (FLAGS.train_data_size, msg1) msg3 = ( "cut %.2f pull %.3f lr %.2f iw %.2f cr %.2f nm %d d%.4f gn %.2f %s" % (FLAGS.cutoff, FLAGS.pull_incr, FLAGS.lr, FLAGS.init_weight, curriculum, FLAGS.nmaps, FLAGS.dropout, FLAGS.max_grad_norm, msg2)) data.print_out(msg3) # Create checkpoint directory if it does not exist. checkpoint_dir = os.path.join( FLAGS.train_dir, "neural_gpu%s" % ("" if FLAGS.jobid < 0 else str(FLAGS.jobid))) if not gfile.IsDirectory(checkpoint_dir): data.print_out("Creating checkpoint directory %s." % checkpoint_dir) gfile.MkDir(checkpoint_dir) # Create model and initialize it. tf.get_variable_scope().set_initializer( tf.uniform_unit_scaling_initializer(factor=1.8 * FLAGS.init_weight)) model = neural_gpu.NeuralGPU(FLAGS.nmaps, FLAGS.nmaps, FLAGS.niclass, FLAGS.noclass, FLAGS.dropout, FLAGS.rx_step, FLAGS.max_grad_norm, FLAGS.cutoff, FLAGS.nconvs, FLAGS.kw, FLAGS.kh, FLAGS.height, FLAGS.mode, FLAGS.lr, FLAGS.pull, FLAGS.pull_incr, min_length + 3) data.print_out("Created model.") sess.run(tf.initialize_all_variables()) data.print_out("Initialized variables.") # Load model from parameters if a checkpoint exists. ckpt = tf.train.get_checkpoint_state(checkpoint_dir) if ckpt and gfile.Exists(ckpt.model_checkpoint_path): data.print_out("Reading model parameters from %s" % ckpt.model_checkpoint_path) model.saver.restore(sess, ckpt.model_checkpoint_path) # Check if there are ensemble models and get their checkpoints. ensemble = [] ensemble_dir_list = [d for d in FLAGS.ensemble.split(",") if d] for ensemble_dir in ensemble_dir_list: ckpt = tf.train.get_checkpoint_state(ensemble_dir) if ckpt and gfile.Exists(ckpt.model_checkpoint_path): data.print_out("Found ensemble model %s" % ckpt.model_checkpoint_path) ensemble.append(ckpt.model_checkpoint_path) # Return the model and needed variables. return (model, min_length, max_length, checkpoint_dir, curriculum, ensemble)
def initialize(sess=None): """Initialize data and model.""" global MAXLEN_F # Create training directory if it does not exist. if not tf.gfile.IsDirectory(FLAGS.train_dir): data.print_out("Creating training directory %s." % FLAGS.train_dir) tf.gfile.MkDir(FLAGS.train_dir) decode_suffix = "beam%dln%d" % (FLAGS.beam_size, int(100 * FLAGS.length_norm)) if FLAGS.mode == 0: decode_suffix = "" if FLAGS.task >= 0: data.log_filename = os.path.join(FLAGS.train_dir, "log%d%s" % (FLAGS.task, decode_suffix)) else: data.log_filename = os.path.join(FLAGS.train_dir, "neural_gpu/log") # Set random seed. if FLAGS.random_seed > 0: seed = FLAGS.random_seed + max(0, FLAGS.task) tf.set_random_seed(seed) random.seed(seed) np.random.seed(seed) # Check data sizes. assert data.bins max_length = min(FLAGS.max_length, data.bins[-1]) while len(data.bins) > 1 and data.bins[-2] >= max_length + EXTRA_EVAL: data.bins = data.bins[:-1] if sess is None and FLAGS.task == 0 and FLAGS.num_replicas > 1: if max_length > 60: max_length = max_length * 1 / 2 # Save memory on chief. min_length = min(14, max_length - 3) if FLAGS.problem == "wmt" else 3 for p in FLAGS.problem.split("-"): if p in ["progeval", "progsynth"]: min_length = max(26, min_length) assert max_length + 1 > min_length while len(data.bins) > 1 and data.bins[-2] >= max_length + EXTRA_EVAL: data.bins = data.bins[:-1] # Create checkpoint directory if it does not exist. if FLAGS.mode == 0 or FLAGS.task < 0: checkpoint_dir = os.path.join(FLAGS.train_dir, "neural_gpu%s" % ("" if FLAGS.task < 0 else str(FLAGS.task))) else: checkpoint_dir = FLAGS.train_dir if not tf.gfile.IsDirectory(checkpoint_dir): data.print_out("Creating checkpoint directory %s." % checkpoint_dir) tf.gfile.MkDir(checkpoint_dir) # Prepare data. if FLAGS.problem == "wmt": # Prepare WMT data. data.print_out("Preparing WMT data in %s" % FLAGS.data_dir) if FLAGS.simple_tokenizer: MAXLEN_F = 3.5 (en_train, fr_train, en_dev, fr_dev, en_path, fr_path) = wmt.prepare_wmt_data( FLAGS.data_dir, FLAGS.vocab_size, tokenizer=wmt.space_tokenizer, normalize_digits=FLAGS.normalize_digits) else: (en_train, fr_train, en_dev, fr_dev, en_path, fr_path) = wmt.prepare_wmt_data( FLAGS.data_dir, FLAGS.vocab_size) # Read data into buckets and compute their sizes. fr_vocab, rev_fr_vocab = wmt.initialize_vocabulary(fr_path) data.vocab = fr_vocab data.rev_vocab = rev_fr_vocab data.print_out("Reading development and training data (limit: %d)." % FLAGS.max_train_data_size) dev_set = {} dev_set["wmt"] = read_data(en_dev, fr_dev, data.bins) def data_read(size, print_out): read_data_into_global(en_train, fr_train, data.bins, size, print_out) data_read(50000, False) read_thread_small = threading.Thread( name="reading-data-small", target=lambda: data_read(900000, False)) read_thread_small.start() read_thread_full = threading.Thread( name="reading-data-full", target=lambda: data_read(FLAGS.max_train_data_size, True)) read_thread_full.start() data.print_out("Data reading set up.") else: # Prepare algorithmic data. en_path, fr_path = None, None tasks = FLAGS.problem.split("-") data_size = FLAGS.train_data_size for t in tasks: data.print_out("Generating data for %s." % t) if t in ["progeval", "progsynth"]: data.init_data(t, data.bins[-1], 20 * data_size, FLAGS.vocab_size) if len(program_utils.prog_vocab) > FLAGS.vocab_size - 2: raise ValueError("Increase vocab_size to %d for prog-tasks." % (len(program_utils.prog_vocab) + 2)) data.rev_vocab = program_utils.prog_vocab data.vocab = program_utils.prog_rev_vocab else: for l in xrange(max_length + EXTRA_EVAL - 1): data.init_data(t, l, data_size, FLAGS.vocab_size) data.init_data(t, data.bins[-2], data_size, FLAGS.vocab_size) data.init_data(t, data.bins[-1], data_size, FLAGS.vocab_size) if t not in global_train_set: global_train_set[t] = [] global_train_set[t].append(data.train_set[t]) calculate_buckets_scale(data.train_set[t], data.bins, t) dev_set = data.test_set # Grid-search parameters. lr = FLAGS.lr init_weight = FLAGS.init_weight max_grad_norm = FLAGS.max_grad_norm if sess is not None and FLAGS.task > -1: def job_id_factor(step): """If jobid / step mod 3 is 0, 1, 2: say 0, 1, -1.""" return ((((FLAGS.task / step) % 3) + 1) % 3) - 1 lr *= math.pow(2, job_id_factor(1)) init_weight *= math.pow(1.5, job_id_factor(3)) max_grad_norm *= math.pow(2, job_id_factor(9)) # Print out parameters. curriculum = FLAGS.curriculum_seq msg1 = ("layers %d kw %d h %d kh %d batch %d noise %.2f" % (FLAGS.nconvs, FLAGS.kw, FLAGS.height, FLAGS.kh, FLAGS.batch_size, FLAGS.grad_noise_scale)) msg2 = ("cut %.2f lr %.3f iw %.2f cr %.2f nm %d d%.4f gn %.2f %s" % (FLAGS.cutoff, lr, init_weight, curriculum, FLAGS.nmaps, FLAGS.dropout, max_grad_norm, msg1)) data.print_out(msg2) # Create model and initialize it. tf.get_variable_scope().set_initializer( tf.orthogonal_initializer(gain=1.8 * init_weight)) max_sampling_rate = FLAGS.max_sampling_rate if FLAGS.mode == 0 else 0.0 o = FLAGS.vocab_size if FLAGS.max_target_vocab < 1 else FLAGS.max_target_vocab ngpu.CHOOSE_K = FLAGS.soft_mem_size do_beam_model = FLAGS.train_beam_freq > 0.0001 and FLAGS.beam_size > 1 beam_size = FLAGS.beam_size if FLAGS.mode > 0 and not do_beam_model else 1 beam_size = min(beam_size, FLAGS.beam_size) beam_model = None def make_ngpu(cur_beam_size, back): return ngpu.NeuralGPU( FLAGS.nmaps, FLAGS.vec_size, FLAGS.vocab_size, o, FLAGS.dropout, max_grad_norm, FLAGS.cutoff, FLAGS.nconvs, FLAGS.kw, FLAGS.kh, FLAGS.height, FLAGS.mem_size, lr / math.sqrt(FLAGS.num_replicas), min_length + 3, FLAGS.num_gpus, FLAGS.num_replicas, FLAGS.grad_noise_scale, max_sampling_rate, atrous=FLAGS.atrous, do_rnn=FLAGS.rnn_baseline, do_layer_norm=FLAGS.layer_norm, beam_size=cur_beam_size, backward=back) if sess is None: with tf.device(tf.train.replica_device_setter(FLAGS.ps_tasks)): model = make_ngpu(beam_size, True) if do_beam_model: tf.get_variable_scope().reuse_variables() beam_model = make_ngpu(FLAGS.beam_size, False) else: model = make_ngpu(beam_size, True) if do_beam_model: tf.get_variable_scope().reuse_variables() beam_model = make_ngpu(FLAGS.beam_size, False) sv = None if sess is None: # The supervisor configuration has a few overriden options. sv = tf.train.Supervisor(logdir=checkpoint_dir, is_chief=(FLAGS.task < 1), saver=model.saver, summary_op=None, save_summaries_secs=60, save_model_secs=15 * 60, global_step=model.global_step) config = tf.ConfigProto(allow_soft_placement=True) sess = sv.PrepareSession(FLAGS.master, config=config) data.print_out("Created model. Checkpoint dir %s" % checkpoint_dir) # Load model from parameters if a checkpoint exists. ckpt = tf.train.get_checkpoint_state(checkpoint_dir) if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path + ".index"): data.print_out("Reading model parameters from %s" % ckpt.model_checkpoint_path) model.saver.restore(sess, ckpt.model_checkpoint_path) elif sv is None: sess.run(tf.global_variables_initializer()) data.print_out("Initialized variables (no supervisor mode).") elif FLAGS.task < 1 and FLAGS.mem_size > 0: # sess.run(model.mem_norm_op) data.print_out("Created new model and normalized mem (on chief).") # Return the model and needed variables. return (model, beam_model, min_length, max_length, checkpoint_dir, (global_train_set, dev_set, en_path, fr_path), sv, sess)
def initialize(sess): """Initialize data and model.""" if FLAGS.jobid >= 0: data.log_filename = os.path.join(FLAGS.train_dir, "log%d" % FLAGS.jobid) data.print_out("NN ", newline=False) # Set random seed. seed = FLAGS.random_seed + max(0, FLAGS.jobid) tf.set_random_seed(seed) random.seed(seed) np.random.seed(seed) # Check data sizes. assert data.bins min_length = 3 max_length = min(FLAGS.max_length, data.bins[-1]) assert max_length + 1 > min_length while len(data.bins) > 1 and data.bins[-2] > max_length + EXTRA_EVAL: data.bins = data.bins[:-1] assert data.bins[0] > FLAGS.rx_step data.forward_max = max(FLAGS.forward_max, data.bins[-1]) nclass = min(FLAGS.niclass, FLAGS.noclass) data_size = FLAGS.train_data_size if FLAGS.mode == 0 else 1000 # Initialize data for each task. tasks = FLAGS.task.split("-") for t in tasks: for l in xrange(max_length + EXTRA_EVAL - 1): data.init_data(t, l, data_size, nclass) data.init_data(t, data.bins[-2], data_size, nclass) data.init_data(t, data.bins[-1], data_size, nclass) end_size = 4 * 1024 if FLAGS.mode > 0 else 1024 data.init_data(t, data.forward_max, end_size, nclass) # Print out parameters. curriculum = FLAGS.curriculum_bound msg1 = ("layers %d kw %d h %d kh %d relax %d batch %d noise %.2f task %s" % (FLAGS.nconvs, FLAGS.kw, FLAGS.height, FLAGS.kh, FLAGS.rx_step, FLAGS.batch_size, FLAGS.grad_noise_scale, FLAGS.task)) msg2 = "data %d %s" % (FLAGS.train_data_size, msg1) msg3 = ("cut %.2f pull %.3f lr %.2f iw %.2f cr %.2f nm %d d%.4f gn %.2f %s" % (FLAGS.cutoff, FLAGS.pull_incr, FLAGS.lr, FLAGS.init_weight, curriculum, FLAGS.nmaps, FLAGS.dropout, FLAGS.max_grad_norm, msg2)) data.print_out(msg3) # Create checkpoint directory if it does not exist. checkpoint_dir = os.path.join(FLAGS.train_dir, "neural_gpu%s" % ("" if FLAGS.jobid < 0 else str(FLAGS.jobid))) if not gfile.IsDirectory(checkpoint_dir): data.print_out("Creating checkpoint directory %s." % checkpoint_dir) gfile.MkDir(checkpoint_dir) # Create model and initialize it. tf.get_variable_scope().set_initializer( tf.uniform_unit_scaling_initializer(factor=1.8 * FLAGS.init_weight)) model = neural_gpu.NeuralGPU( FLAGS.nmaps, FLAGS.nmaps, FLAGS.niclass, FLAGS.noclass, FLAGS.dropout, FLAGS.rx_step, FLAGS.max_grad_norm, FLAGS.cutoff, FLAGS.nconvs, FLAGS.kw, FLAGS.kh, FLAGS.height, FLAGS.mode, FLAGS.lr, FLAGS.pull, FLAGS.pull_incr, min_length + 3) data.print_out("Created model.") sess.run(tf.initialize_all_variables()) data.print_out("Initialized variables.") # Load model from parameters if a checkpoint exists. ckpt = tf.train.get_checkpoint_state(checkpoint_dir) if ckpt and gfile.Exists(ckpt.model_checkpoint_path): data.print_out("Reading model parameters from %s" % ckpt.model_checkpoint_path) model.saver.restore(sess, ckpt.model_checkpoint_path) # Check if there are ensemble models and get their checkpoints. ensemble = [] ensemble_dir_list = [d for d in FLAGS.ensemble.split(",") if d] for ensemble_dir in ensemble_dir_list: ckpt = tf.train.get_checkpoint_state(ensemble_dir) if ckpt and gfile.Exists(ckpt.model_checkpoint_path): data.print_out("Found ensemble model %s" % ckpt.model_checkpoint_path) ensemble.append(ckpt.model_checkpoint_path) # Return the model and needed variables. return (model, min_length, max_length, checkpoint_dir, curriculum, ensemble)
countList = [cnf.batch_size for x in cnf.bins] np.set_printoptions(linewidth=2000, precision=4, suppress=True) # prepare training and test data max_length = cnf.bins[-1] data_gen.init() if cnf.task in cnf.language_tasks: task = data_gen.find_data_task(cnf.task) task.prepare_data() data_gen.collect_bins() data_gen.print_bin_usage() else: for length in range(1, max_length + 1): n_examples = cnf.data_size data_gen.init_data(cnf.task, length, n_examples, cnf.n_input) data_gen.collect_bins() if len(data_gen.train_set[cnf.task][cnf.forward_max]) == 0: data_gen.init_data(cnf.task, cnf.forward_max, cnf.test_data_size, cnf.n_input) data_supplier = data_feeder.create_data_supplier() # Perform training with tf.Graph().as_default(): learner = RSE(cnf.n_hidden, cnf.bins, cnf.n_input, countList, cnf.n_output, cnf.dropout_keep_prob, create_translation_model=cnf.task in cnf.language_tasks, use_two_gpus=cnf.use_two_gpus) learner.create_graph() learner.variable_summaries = tf.compat.v1.summary.merge_all() tf.compat.v1.get_variable_scope().reuse_variables() learner.create_test_graph(cnf.forward_max)
def train(hparams): utils.log('Training ...') model_dir = hparams.model_dir if hparams.word_char == 'word': word_embed, word_vocab = data_utils.get_embed_vocab(hparams.word_embed_file) data_utils.init_data('word', word_vocab, hparams.question_file, train_file=hparams.train_file, valid_file=hparams.valid_file) else: char_embed, char_vocab = data_utils.get_embed_vocab(hparams.char_embed_file) data_utils.init_data('char', char_vocab, hparams.question_file, train_file=hparams.train_file, valid_file=hparams.valid_file) train_graph = tf.Graph() utils.log('Creating train model ...') with train_graph.as_default(), tf.container("train"): train_iterator = data_utils.get_iterator('train', hparams.batch_size, shuffle=True) train_model = Model(hparams, word_embed if hparams.word_char == 'word' else char_embed, train_iterator, tf.contrib.learn.ModeKeys.TRAIN) eval_graph = tf.Graph() utils.log('Creating eval model ...') with eval_graph.as_default(), tf.container("eval"): eval_iterator = data_utils.get_iterator('valid', hparams.batch_size, shuffle=False) eval_model = Model(hparams, word_embed if hparams.word_char == 'word' else char_embed, eval_iterator, tf.contrib.learn.ModeKeys.EVAL) config_proto = tf.ConfigProto() config_proto.gpu_options.allow_growth = True train_sess = tf.Session(graph=train_graph, config=config_proto) eval_sess = tf.Session(graph=eval_graph, config=config_proto) log_every_n_batch = 10 eval_every_n_batch = int(hparams.num_train_steps / hparams.epochs / 3) with train_graph.as_default(), tf.container("train"): train_sess.run(tf.global_variables_initializer()) for epoch in range(1, hparams.epochs + 1): utils.log('Start epoch {}'.format(epoch)) total_loss = 0 total_num = 0 batch_loss = 0 train_sess.run(train_iterator.initializer) while True: try: global_step, batch_size, loss, _ = train_model.train(train_sess, hparams.lr) except tf.errors.OutOfRangeError: utils.log('Finish epoch {}, average train loss is {}'.format( epoch, total_loss / total_num)) break total_loss += loss * batch_size total_num += batch_size batch_loss += loss if global_step > 0 and global_step % log_every_n_batch == 0: utils.log('Average loss from batch {} to batch {} is loss {} with lr {}'.format( global_step - log_every_n_batch + 1, global_step, batch_loss / log_every_n_batch, hparams.lr )) batch_loss = 0 if global_step > 0 and global_step % eval_every_n_batch == 0: train_model.save(train_sess, model_dir, hparams.model_prefix) eval(hparams, eval_model, eval_sess, eval_iterator) utils.log('Done')