Example #1
0
def main(_):
  if not FLAGS.data_path:
    raise ValueError("Must set --data_path to PTB data directory")

  raw_data = reader.ptb_raw_data(FLAGS.data_path)
  train_data, valid_data, test_data, _ = raw_data

  config = get_config()
  eval_config = get_config()
  eval_config.batch_size = 1
  eval_config.num_steps = 1

  with tf.Graph().as_default(), tf.Session() as session:
    initializer = tf.random_uniform_initializer(-config.init_scale,
                                                config.init_scale)
    with tf.variable_scope("model", reuse=None, initializer=initializer):
      m = PTBModel(is_training=True, config=config)
    with tf.variable_scope("model", reuse=True, initializer=initializer):
      mvalid = PTBModel(is_training=False, config=config)
      mtest = PTBModel(is_training=False, config=eval_config)

    tf.initialize_all_variables().run()

    for i in range(config.max_max_epoch):
      lr_decay = config.lr_decay ** max(i - config.max_epoch, 0.0)
      m.assign_lr(session, config.learning_rate * lr_decay)

      print("Epoch: %d Learning rate: %.3f" % (i + 1, session.run(m.lr)))
      train_perplexity = run_epoch(session, m, train_data, m.train_op,
                                   verbose=True)
      print("Epoch: %d Train Perplexity: %.3f" % (i + 1, train_perplexity))
      

    test_perplexity = run_epoch(session, mtest, test_data, tf.no_op())
    print("Test Perplexity: %.3f" % test_perplexity)
Example #2
0
def load_data(seqlength=20):
    raw_data = reader.ptb_raw_data('data/ptb')
    train_data, val_data, test_data, _ = raw_data
    train_data = indices_to_seq_data(train_data, seqlength)
    val_data = indices_to_seq_data(val_data, seqlength)
    return {'train': train_data,
            'test': val_data}
Example #3
0
def main(unused_args):
  if not FLAGS.data_path:
    raise ValueError("Must specify --data_path to PTB data directory")

  if not FLAGS.save_path:
    raise ValueError("Must specify --save_path to model directory")

  raw_data = reader.ptb_raw_data(FLAGS.data_path)
  train_data, valid_data, test_data, _ = raw_data

  config = get_config()
  eval_config = get_config()
  eval_config.batch_size = 1
  eval_config.num_steps = 1

  with tf.Graph().as_default(), tf.Session() as session:
    initializer = tf.random_uniform_initializer(-config.init_scale,
                                                config.init_scale)
    with tf.variable_scope("model", reuse=None, initializer=initializer):
      m = PTBModel(is_training=True, config=config)
    with tf.variable_scope("model", reuse=True, initializer=initializer):
      mvalid = PTBModel(is_training=False, config=config)
      mtest = PTBModel(is_training=False, config=eval_config)

    # Add ops to save and restore all the variables.
    saver = tf.train.Saver()

    ckpt=tf.train.get_checkpoint_state(FLAGS.save_path)
    if (ckpt):
        print("Reading model parameters from %s" % ckpt.model_checkpoint_path)
        saver.restore(session, ckpt.model_checkpoint_path)
    else:
        print("Created model with fresh parameters.")
        tf.initialize_all_variables().run()

    if not FLAGS.testonly:

        for i in range(config.max_max_epoch):
        
           lr_decay = config.lr_decay ** max(i - config.max_epoch, 0.0)
           m.assign_lr(session, config.learning_rate * lr_decay)

           print("Epoch: %d Learning rate: %.3f" % (i + 1, session.run(m.lr)))
           train_perplexity = run_epoch(session, m, train_data, m.train_op,
                                   verbose=True)
           print("Epoch: %d Train Perplexity: %.3f" % (i + 1, train_perplexity))
      
           save_path = saver.save(session, FLAGS.save_path+'/model.ckpt',i)
           print("Model saved in: %s" % save_path)
      
           valid_perplexity = run_epoch(session, mvalid, valid_data, tf.no_op())
           print("Epoch: %d Valid Perplexity: %.3f" % (i + 1, valid_perplexity))

    else:
         print("Running only a perplexity test")

    test_perplexity = run_epoch(session, mtest, test_data, tf.no_op(),verbose=True)
    print("Test Perplexity: %.3f" % test_perplexity)
Example #4
0
 def testPtbRawData(self):
   tmpdir = tf.test.get_temp_dir()
   for suffix in "train", "valid", "test":
     filename = os.path.join(tmpdir, "ptb.%s.txt" % suffix)
     with tf.gfile.GFile(filename, "w") as fh:
       fh.write(self._string_data)
   # Smoke test
   output = reader.ptb_raw_data(tmpdir)
   self.assertEqual(len(output), 4)
def main(_):
    if not FLAGS.data_path:
        # raise ValueError("Must set --data_path to PTB data directory")
        FLAGS.data_path = 'data/'

    raw_data = reader.ptb_raw_data(FLAGS.data_path)
    train_data, valid_data, My_data, _ = raw_data

    config = get_config()
    eval_config = get_config()
    eval_config.batch_size = 1
    eval_config.num_steps = 1

    with tf.Graph().as_default(), tf.Session() as session:
        initializer = tf.random_uniform_initializer(-config.init_scale,
                                                    config.init_scale)
        with tf.variable_scope("model", reuse=None, initializer=initializer):
            m = PTBModel(is_training=True, config=config)
        # with tf.variable_scope("model", reuse=True, initializer=initializer):
        #     mvalid = PTBModel(is_training=False, config=config)
        #     mMy = PTBModel(is_training=False, config=eval_config)

        summary_op = tf.merge_all_summaries()

        saver = tf.train.Saver(tf.all_variables())

        tf.initialize_all_variables().run()

        summary_writer = tf.train.SummaryWriter(FLAGS.data_path,
                                                graph_def=session.graph_def)

        for i in range(config.max_max_epoch):
            lr_decay = config.lr_decay ** max(i - config.max_epoch, 0.0)
            m.assign_lr(session, config.learning_rate * lr_decay)

            print("Epoch: %d Learning rate: %.3f" % (i + 1, session.run(m.lr)))
            train_perplexity = run_epoch(session,
                                         m,
                                         train_data,
                                         m.train_op,
                                         summary_writer,
                                         summary_op,
                                         verbose=True)

            # print("Epoch: %d Train Perplexity: %.3f" % (i + 1, train_perplexity))
            # valid_perplexity = run_epoch(session, mvalid, valid_data, tf.no_op())
            # print("Epoch: %d Valid Perplexity: %.3f" % (i + 1, valid_perplexity))
            #
            # My_perplexity = run_epoch(session, mMy, My_data, tf.no_op())
            # print("My Perplexity: %.3f" % My_perplexity)
            if i % 20 == 0:
                print('Now perplexity %.3f' % (train_perplexity))
                print("SAVEING:")
                checkpoint_path = os.path.join(FLAGS.data_path, 'model.ckpt')
                saver.save(sess=session, save_path=checkpoint_path, global_step=i)
                print("save model to {}".format(checkpoint_path))
Example #6
0
def main(_):
  if not FLAGS.data_path:
    raise ValueError("Must set --data_path to PTB data directory")

  raw_data = reader.ptb_raw_data(FLAGS.data_path)
  train_data, valid_data, test_data, _ = raw_data

  config = get_config()
  eval_config = get_config()
  eval_config.batch_size = 1
  eval_config.num_steps = 1

  with tf.Graph().as_default():
    initializer = tf.random_uniform_initializer(-config.init_scale,
                                                config.init_scale)

    with tf.name_scope("Train"):
      train_input = PTBInput(config=config, data=train_data, name="TrainInput")
      with tf.variable_scope("Model", reuse=None, initializer=initializer):
        m = PTBModel(is_training=True, config=config, input_=train_input)
      tf.scalar_summary("Training Loss", m.cost)
      tf.scalar_summary("Learning Rate", m.lr)

    with tf.name_scope("Valid"):
      valid_input = PTBInput(config=config, data=valid_data, name="ValidInput")
      with tf.variable_scope("Model", reuse=True, initializer=initializer):
        mvalid = PTBModel(is_training=False, config=config, input_=valid_input)
      tf.scalar_summary("Validation Loss", mvalid.cost)

    with tf.name_scope("Test"):
      test_input = PTBInput(config=eval_config, data=test_data, name="TestInput")
      with tf.variable_scope("Model", reuse=True, initializer=initializer):
        mtest = PTBModel(is_training=False, config=eval_config,
                         input_=test_input)

    sv = tf.train.Supervisor(logdir=FLAGS.save_path)
    with sv.managed_session() as session:
      for i in range(config.max_max_epoch):
        lr_decay = config.lr_decay ** max(i + 1 - config.max_epoch, 0.0)
        m.assign_lr(session, config.learning_rate * lr_decay)

        print("Epoch: %d Learning rate: %.3f" % (i + 1, session.run(m.lr)))
        train_perplexity = run_epoch(session, m, eval_op=m.train_op,
                                     verbose=True)
        print("Epoch: %d Train Perplexity: %.3f" % (i + 1, train_perplexity))
        valid_perplexity = run_epoch(session, mvalid)
        print("Epoch: %d Valid Perplexity: %.3f" % (i + 1, valid_perplexity))

      test_perplexity = run_epoch(session, mtest)
      print("Test Perplexity: %.3f" % test_perplexity)

      if FLAGS.save_path:
        print("Saving model to %s." % FLAGS.save_path)
        sv.saver.save(session, FLAGS.save_path, global_step=sv.global_step)
def load_ptb_dataset(data_path):
    """Load the PTB dataset.

    You can download the PTB dataset from here:
    http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz

    :param data_path: path to the data/ dir of the PTB dataset.
    :return: train, validation, test data
    """
    raw_data = reader.ptb_raw_data(data_path)
    trX, vlX, teX, _ = raw_data
    return trX, vlX, teX
def main():
    data_directory = "data"
    word_to_id = reader._build_vocab(os.path.join(data_directory, 
                                                  "ptb.train.txt"))
    train, cv, test, _ = reader.ptb_raw_data(data_directory)

    train_batch_size = 128
    train_num_steps = len(train) // train_batch_size - 1
    train_num_steps = 10
    ptb_iterator = reader.ptb_iterator(train, train_batch_size, train_num_steps)

    learner = Learner(word_to_id)
    learner.Train(ptb_iterator, train_batch_size, train_num_steps)
def main(_):
  t0 = time.time()
  if not FLAGS.data_path:
    raise ValueError("Must set --data_path to PTB data directory")

  raw_data = reader.ptb_raw_data(FLAGS.data_path)
  train_data, valid_data, test_data, _ = raw_data

  config = get_config()
  eval_config = get_config()
  eval_config.batch_size = 1
  eval_config.num_steps = 1
  # changed from tensorflow - add peak_wps calculation
  peak_wps = 0

  with tf.Graph().as_default(), tf.Session() as session:
    initializer = tf.random_uniform_initializer(-config.init_scale,
                                                config.init_scale)
    with tf.variable_scope("model", reuse=None, initializer=initializer):
      m = PTBModel(is_training=True, config=config)
    with tf.variable_scope("model", reuse=True, initializer=initializer):
      mvalid = PTBModel(is_training=False, config=config)
      mtest = PTBModel(is_training=False, config=eval_config)

    tf.initialize_all_variables().run()

    for i in range(config.max_max_epoch):
      lr_decay = config.lr_decay ** max(i - config.max_epoch, 0.0)
      m.assign_lr(session, config.learning_rate * lr_decay)

      print("Epoch: %d Learning rate: %.3f" % (i + 1, session.run(m.lr)))
      train_perplexity, cur_peak_wps = run_epoch(session, m, peak_wps, train_data, m.train_op,
                                   verbose=True)
      if cur_peak_wps > peak_wps:
          peak_wps = cur_peak_wps

      print("Epoch: %d Train Perplexity: %.3f" % (i + 1, train_perplexity))
      valid_perplexity, cur_peak_wps = run_epoch(session, mvalid, peak_wps, valid_data, tf.no_op())
      print("Epoch: %d Valid Perplexity: %.3f" % (i + 1, valid_perplexity))

    test_perplexity, cur_peak_wps = run_epoch(session, mtest, peak_wps, test_data, tf.no_op())
    print("Test Perplexity: %.3f" % test_perplexity)

    # change form tensorflow - print out timing info
    t1 = time.time()
    print('total time: ', t1-t0)
    print('peak wps:', peak_wps)
Example #10
0
    tf.app.flags.DEFINE_integer("seed", 12345, "Random seed.")
    tf.app.flags.DEFINE_integer("runs", 3, "How many runs.")
    tf.app.flags.DEFINE_float("keep_prob", 1.0, "Keep probability for dropout.")
    tf.app.flags.DEFINE_string("result_file", None, "Where to write results.")
    tf.app.flags.DEFINE_string("moru_ops", 'keep,replace', "operations of moru cell.")
    tf.app.flags.DEFINE_string("moru_op_biases", None, "biases of moru operations at beginning of training. "
                                                       "Defaults to 0 for each.")
    tf.app.flags.DEFINE_integer("moru_op_ctr", None, "Size of op ctr. By default ops are controlled by current input"
                                                     "and previous state. Given a positive integer, an additional"
                                                     "recurrent op ctr is introduced in MORUCell.")
    tf.app.flags.DEFINE_string('device', '/gpu:0', 'device to run on')


    FLAGS = tf.app.flags.FLAGS
    FLAGS._parse_flags()
    raw_data = reader.ptb_raw_data(FLAGS.data)
    train_data, valid_data, test_data, _ = raw_data
    perplexities = []

    batch_size = FLAGS.batch_size
    num_steps = FLAGS.num_steps

    rng = random.Random(FLAGS.seed)
    for run_id in range(FLAGS.runs):
        tf.reset_default_graph()
        last_valid_perplexities = [float("inf")] * 3
        with tf.Session(config=tf.ConfigProto(allow_soft_placement=True)) as sess:
            tf.set_random_seed(rng.randint(0, 10000))
            initializer = tf.random_uniform_initializer(-FLAGS.init_scale,
                                                        FLAGS.init_scale)
            with tf.device(FLAGS.device):
Example #11
0
def main(argv=None):
    # 获取数据源
    train_data, valid_data, test_data, _ = reader.ptb_raw_data(DATA_PATH)
    #定义初始化函数
    initializer = tf.random_uniform_initializer(-0.05, 0.05)

    # 计算一个epoch需要训练的次数
    train_data_len = len(train_data)
    train_batch_len = train_data_len // TRAINING_BATCH_SIZE
    train_epoch_size = (train_batch_len - 1) // TRAINING_NUM_STEP

    valid_data_len = len(valid_data)
    valid_batch_len = valid_data_len // EVAL_BATCH_SIZE
    valid_epoch_size = (valid_batch_len - 1) // EVAL_NUM_STEP

    test_data_len = len(test_data)
    test_batch_len = test_data_len // EVAL_BATCH_SIZE
    test_epoch_size = (test_batch_len - 1) // EVAL_NUM_STEP

    #定义训练使用的循环神经网络
    with tf.variable_scope("language_model",
                           reuse=None,
                           initializer=initializer):
        train_model = PTBModel(True, TRAINING_BATCH_SIZE, TRAINING_NUM_STEP)

    #定义评测用的模型
    with tf.variable_scope("language_model",
                           reuse=True,
                           initializer=initializer):
        eval_model = PTBModel(False, EVAL_BATCH_SIZE, EVAL_NUM_STEP)

    with tf.Session() as session:
        tf.global_variables_initializer().run()

        train_d = reader.ptb_producer(train_data, TRAINING_BATCH_SIZE,
                                      TRAINING_NUM_STEP)
        valid_d = reader.ptb_producer(valid_data, EVAL_BATCH_SIZE,
                                      EVAL_NUM_STEP)
        test_d = reader.ptb_producer(test_data, EVAL_BATCH_SIZE, EVAL_NUM_STEP)

        # 开启多线程
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(sess=session, coord=coord)

        #使用训练数据训练模型
        for i in range(NUM_EPOCH):
            print("in iteration: %d" % (i + 1))
            #在所有训练数据上训练循环神经网络
            run_epoch(session, train_model, train_d, train_model.train_op,
                      train_epoch_size, True)

            #使用验证数据评测模型效果
            valid_perplexity = run_epoch(session, eval_model, valid_d,
                                         tf.no_op(), valid_epoch_size, False)
            print("Epoch: %d Validation Perplexity: %.3f" %
                  (i + 1, valid_perplexity))

        #使用测试数据测试模型
        test_perplexity = run_epoch(session, eval_model, test_d, tf.no_op(),
                                    test_epoch_size, False)
        print("Test Perplexity: %.3f" % test_perplexity)

        # 关闭多线程
        coord.request_stop()
        coord.join(threads)
Example #12
0
        return MediumConfig()
    elif FLAGS.model == "large":
        return LargeConfig()
    elif FLAGS.model == "test":
        return TestConfig()
    else:
        raise ValueError("Invalid model: %s", FLAGS.model)


# def main(_):
if __name__ == '__main__':
    if not FLAGS.data_path:
        raise ValueError("Must set --data_path to PTB data directory")
    print(FLAGS.data_path)

    raw_data = reader.ptb_raw_data(FLAGS.data_path)  # 获取原始数据
    train_data, valid_data, test_data, _ = raw_data

    config = get_config()
    eval_config = get_config()
    eval_config.batch_size = 1
    eval_config.num_steps = 1

    with tf.Graph().as_default(), tf.Session() as session:
        initializer = tf.random_uniform_initializer(
            -config.init_scale,  # 定义如何对参数变量初始化
            config.init_scale)
        with tf.variable_scope("model", reuse=None, initializer=initializer):
            m = PTBModel(is_training=True,
                         config=config)  # 训练模型, is_trainable=True
        with tf.variable_scope("model", reuse=True, initializer=initializer):
Example #13
0
def main(_):
  if FLAGS.rename_variable_prefix:
    if not FLAGS.model_path or not FLAGS.new_model_path:
      logging.error("Must set --model_path and --new_model_path to rename model variables")
      exit(1)
  else:
    if not FLAGS.train_dir:
      logging.error("Must set --train_dir")
      exit(1)
    if not FLAGS.data_dir and (not FLAGS.train_idx or not FLAGS.dev_idx):
      logging.error("Must set --data_dir to PTB data directory or specify data using --train_idx,--dev_idx")
      exit(1)

  logging.getLogger().setLevel(logging.INFO)
  logging.info("Start: {}".format(datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')))

  device = "/gpu:0"
  log_device_placement = False
  allow_soft_placement = True
  if FLAGS.device:
    device = '/'+FLAGS.device
  logging.info("Use device %s" % device)

  with tf.Graph().as_default(), tf.Session(config=tf.ConfigProto(allow_soft_placement=allow_soft_placement, log_device_placement=log_device_placement)) \
    as session, tf.device(device):

    if FLAGS.rename_variable_prefix:
      model_utils.rename_variable_prefix(session, FLAGS.config_file, FLAGS.model_path, FLAGS.new_model_path,
                           FLAGS.variable_prefix, FLAGS.rename_variable_prefix)
    elif FLAGS.score:
      logging.info("Run model in scoring mode")
      use_log_probs = True
      train_dir = "train.rnn.de"
      model, _ = model_utils.load_model(session, "large50k", train_dir, use_log_probs)

      #test_path = os.path.join(FLAGS.data_dir, "test15/test15.ids50003.de")
      #test_data = reader.read_indexed_data(test_path)
      #test_sentences = [ test_data ]
  
      # Add eos symbol to the beginning to score first word as well
      test_sentences = [[2, 5, 3316, 7930, 7, 7312, 9864, 30, 8, 10453, 4, 2],
                        [2, 7, 5, 30, 8, 10453, 7930, 3316, 7312, 9864, 4, 2],
                        [2, 5, 8, 30, 7, 4, 9864, 3316, 7312, 7930, 10453, 2],
                        [2, 8, 10453, 9864, 30, 5, 3316, 7312, 7, 7930, 4]]
      for test_data in test_sentences:
        # using log probs or cross entropies gives the same perplexities
        if use_log_probs:
          # Run model as in training, with an iterator over inputs
          train_utils.run_epoch_eval(session, model, test_data, tf.no_op(), use_log_probs=use_log_probs)
          # Run model step by step (yields the same result)
          #score_sentence(session, model, test_data)      
        else:
          train_utils.run_epoch_eval(session, model, test_data, tf.no_op(), use_log_probs=use_log_probs)
    else:
      logging.info("Run model in training mode")
      if FLAGS.fixed_random_seed:
        tf.set_random_seed(1234)

      if FLAGS.model:
        config = model_utils.get_config(FLAGS.model)
        eval_config = model_utils.get_config(FLAGS.model)
      elif FLAGS.config_file:
        config = model_utils.read_config(FLAGS.config_file)
        eval_config = copy.copy(config)
      else:
        logging.error("Must specify either model name or config file.")
        exit(1)

      eval_config.batch_size = 1
      eval_config.num_steps = 1
      model, mvalid, mtest = model_utils.create_model(session, config, eval_config, FLAGS.train_dir, FLAGS.optimizer)

      # Restore saved train variable
      start_epoch = 1
      start_idx = 0
      start_state = None
      tmpfile = FLAGS.train_dir+"/tmp_idx.pkl"
      if model.global_step.eval() >= FLAGS.steps_per_checkpoint and \
        os.path.isfile(tmpfile):
          with open(tmpfile, "rb") as f:
            start_epoch, start_idx, start_state = pickle.load(f)
            logging.info("Restore saved train variables from %s, resume from epoch=%i and train idx=%i and last state" % (tmpfile, start_epoch, start_idx))

      if FLAGS.data_dir:
        raw_data = reader.ptb_raw_data(FLAGS.data_dir)
        train_data, valid_data, test_data, _ = raw_data
      else:
        train_data = reader.read_indexed_data(FLAGS.train_idx, FLAGS.max_train_data_size, config.vocab_size)
        valid_data = reader.read_indexed_data(FLAGS.dev_idx, vocab_size=config.vocab_size)
        if FLAGS.test_idx:
          test_data = reader.read_indexed_data(FLAGS.test_idx, vocab_size=config.vocab_size)

      for epoch in range(start_epoch, config.max_max_epoch+1):
        if not (FLAGS.optimizer == "adadelta" or FLAGS.optimizer == "adam"):
          if start_idx == 0:
            lr_decay = config.lr_decay ** max(epoch - config.max_epoch+1, 0.0)
            model.assign_lr(session, config.learning_rate * lr_decay)
        logging.info("Epoch: %d Learning rate: %.3f" % (epoch, session.run(model.lr)))

        train_perplexity = train_utils.run_epoch(session, model, train_data, model.train_op, FLAGS.train_dir, FLAGS.steps_per_checkpoint,
                                                 train=True, start_idx=start_idx, start_state=start_state, tmpfile=tmpfile, m_valid=mvalid,
                                                 valid_data=valid_data, epoch=epoch)
        if start_idx == 0:
          logging.info("Epoch: %d Train Perplexity: %.3f" % (epoch, train_perplexity))
        else:
          logging.info("Epoch: %d Train Perplexity: %.3f (incomplete)" % (epoch, train_perplexity))
        start_idx = 0
        start_state = None

        valid_perplexity = train_utils.run_epoch(session, mvalid, valid_data, tf.no_op(), FLAGS.train_dir, FLAGS.steps_per_checkpoint)
        logging.info("Epoch: %d Full Valid Perplexity: %.3f" % (epoch, valid_perplexity))

      logging.info("Training finished.")
      if FLAGS.data_dir or FLAGS.test_idx:
        test_perplexity = train_utils.run_epoch(session, mtest, test_data, tf.no_op(), FLAGS.train_dir, FLAGS.steps_per_checkpoint)
        logging.info("Test Perplexity: %.3f" % test_perplexity)

      checkpoint_path = os.path.join(FLAGS.train_dir, "rnn.ckpt")
      logging.info("Save final model to path=%s" % checkpoint_path)
      model.saver.save(session, checkpoint_path, global_step=model.global_step)

    logging.info("End: {}".format(datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')))
Example #14
0
def main(_):
    if not FLAGS.data_path:
        raise ValueError("Must set --data_path to PTB data directory")

    raw_data = reader.ptb_raw_data(FLAGS.data_path)
    train_data, valid_data, test_data, _ = raw_data

    config = get_config()
    eval_config = get_config()
    eval_config.batch_size = 1
    eval_config.num_steps = 1

    with tf.Graph().as_default():
        initializer = tf.random_uniform_initializer(-config.init_scale,
                                                    config.init_scale)

        with tf.name_scope("Train"):
            train_input = PTBInput(config=config,
                                   data=train_data,
                                   name="TrainInput")
            with tf.variable_scope("Model",
                                   reuse=None,
                                   initializer=initializer):
                m = PTBModel(is_training=True,
                             config=config,
                             input_=train_input)
            tf.scalar_summary("Training Loss", m.cost)
            tf.scalar_summary("Learning Rate", m.lr)

        with tf.name_scope("Valid"):
            valid_input = PTBInput(config=config,
                                   data=valid_data,
                                   name="ValidInput")
            with tf.variable_scope("Model",
                                   reuse=True,
                                   initializer=initializer):
                mvalid = PTBModel(is_training=False,
                                  config=config,
                                  input_=valid_input)
            tf.scalar_summary("Validation Loss", mvalid.cost)

        with tf.name_scope("Test"):
            test_input = PTBInput(config=eval_config,
                                  data=test_data,
                                  name="TestInput")
            with tf.variable_scope("Model",
                                   reuse=True,
                                   initializer=initializer):
                mtest = PTBModel(is_training=False,
                                 config=eval_config,
                                 input_=test_input)

        sv = tf.train.Supervisor(logdir=FLAGS.save_path)
        with sv.managed_session() as session:
            for i in range(config.max_max_epoch):
                lr_decay = config.lr_decay**max(i + 1 - config.max_epoch, 0.0)
                m.assign_lr(session, config.learning_rate * lr_decay)

                print("Epoch: %d Learning rate: %.3f" %
                      (i + 1, session.run(m.lr)))
                train_perplexity = run_epoch(session,
                                             m,
                                             eval_op=m.train_op,
                                             verbose=True)
                print("Epoch: %d Train Perplexity: %.3f" %
                      (i + 1, train_perplexity))
                valid_perplexity = run_epoch(session, mvalid)
                print("Epoch: %d Valid Perplexity: %.3f" %
                      (i + 1, valid_perplexity))

            test_perplexity = run_epoch(session, mtest)
            print("Test Perplexity: %.3f" % test_perplexity)

            if FLAGS.save_path:
                print("Saving model to %s." % FLAGS.save_path)
                sv.saver.save(session,
                              FLAGS.save_path,
                              global_step=sv.global_step)
Example #15
0
def main(_):
    if not FLAGS.data_path:
        raise ValueError("Must set --data_path to PTB data directory")

# 22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    ps_hosts = FLAGS.ps_hosts.split(",")
    worker_hosts = FLAGS.worker_hosts.split(",")

    # 33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
    # Create a cluster from the parameter server and worker hosts.
    cluster = tf.train.ClusterSpec({"ps": ps_hosts, "worker": worker_hosts})

    # Create and start a server for the local task.
    server = tf.train.Server(cluster,
                             job_name=FLAGS.job_name,
                             task_index=FLAGS.task_index)

    raw_data = reader.ptb_raw_data(FLAGS.data_path)
    train_data, valid_data, test_data, _ = raw_data

    config = get_config()
    eval_config = get_config()
    eval_config.batch_size = 1
    eval_config.num_steps = 1
    # 444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
    if FLAGS.job_name == "ps":
        server.join()
    elif FLAGS.job_name == "worker":
        # Assigns ops to the local worker by default.
        # 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1
        with tf.Graph().as_default():  #, tf.Session() as session:
            initializer = tf.random_uniform_initializer(
                -config.init_scale, config.init_scale)
            # 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2 5.2
            with tf.device(
                    tf.train.replica_device_setter(
                        worker_device="/job:worker/task:%d" % FLAGS.task_index,
                        cluster=cluster)):

                with tf.variable_scope("model",
                                       reuse=None,
                                       initializer=initializer):
                    m = PTBModel(is_training=True, config=config)
                with tf.variable_scope("model",
                                       reuse=True,
                                       initializer=initializer):
                    mvalid = PTBModel(is_training=False, config=config)
                    mtest = PTBModel(is_training=False, config=eval_config)

                #tf.initialize_all_variables().run()
                init_op = tf.initialize_all_variables()

                # GlobalStep-GlobalStep-GlobalStep-GlobalStep-GlobalStep-GlobalStep-GlobalStep-GlobalStep-
                global_step = tf.Variable(0)
                saver = tf.train.Saver()
                summary_op = tf.merge_all_summaries()
                init_op = tf.initialize_all_variables()


# 6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
# Ehtemalan managed session bayad biad inja
            sv = tf.train.Supervisor(is_chief=(FLAGS.task_index == 0),
                                     logdir="/tmp/train_logs",
                                     init_op=init_op,
                                     summary_op=summary_op,
                                     saver=saver,
                                     global_step=global_step,
                                     save_model_secs=600)

            # 777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
            with sv.managed_session(server.target) as session:

                # 888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
                for i in range(config.max_max_epoch):
                    lr_decay = config.lr_decay**max(i - config.max_epoch, 0.0)
                    m.assign_lr(session, config.learning_rate * lr_decay)

                    print("Epoch: %d Learning rate: %.3f" %
                          (i + 1, session.run(m.lr)))
                    train_perplexity = run_epoch(session,
                                                 m,
                                                 train_data,
                                                 m.train_op,
                                                 verbose=True)
                    print("Epoch: %d Train Perplexity: %.3f" %
                          (i + 1, train_perplexity))
                    valid_perplexity = run_epoch(session, mvalid, valid_data,
                                                 tf.no_op())
                    print("Epoch: %d Valid Perplexity: %.3f" %
                          (i + 1, valid_perplexity))

                test_perplexity = run_epoch(session, mtest, test_data,
                                            tf.no_op())
                print("Test Perplexity: %.3f" % test_perplexity)
            # Ask for all the services to stop.
            sv.stop()
# -*- coding:utf8 -*-

import tensorflow as tf
from tensorflow.models.rnn.ptb import reader

DATA_PATH = "/usr/bigdata/data/PTB/simple-examples/data/"

train_data, valid_data, test_data, _ = reader.ptb_raw_data(DATA_PATH)

print(len(train_data))
print(train_data[:100])
Example #17
0
def main(_):
    if not FLAGS.data_path:
        raise ValueError(
            "Paramétrer --datapath à l'emplacement du dossier de test")

    raw_data = reader.ptb_raw_data(FLAGS.data_path)
    train_data, valid_data, test_data, _ = raw_data

    config = get_config()
    eval_config = get_config()
    eval_config.batch_size = 1
    eval_config.num_steps = 1

    start_time = time.time()

    print("Type de neurones: {}".format(FLAGS.cell))

    with tf.Graph().as_default(), tf.Session() as session:
        initializer = tf.random_uniform_initializer(-config.init_scale,
                                                    config.init_scale)
        with tf.variable_scope("model", reuse=None, initializer=initializer):
            m = PTBModel(is_training=True, config=config, cell_type=FLAGS.cell)
        with tf.variable_scope("model", reuse=True, initializer=initializer):
            mvalid = PTBModel(is_training=False,
                              config=config,
                              cell_type=FLAGS.cell)
            mtest = PTBModel(is_training=False,
                             config=eval_config,
                             cell_type=FLAGS.cell)

        tf.initialize_all_variables().run()

        for i in range(config.max_max_epoch):
            lr_decay = config.lr_decay**max(i - config.max_epoch, 0.0)
            m.assign_lr(session, config.learning_rate * lr_decay)

            print("Période: %d Vitesse d'apprentissage: %.3f" %
                  (i + 1, session.run(m.lr)))
            train_perplexity = run_epoch(session,
                                         m,
                                         train_data,
                                         m.train_op,
                                         verbose=True)

            print("Période: %d Perplexité sur données d'apprentissage: %.3f" %
                  (i + 1, train_perplexity))

            # Test si la perplexité de validation a augmenté ou stagné, si oui on divise le lr par 1.5
            # Non utilisé mais correspond mieux à l'article
            '''
      valid_old = np.inf
      if i > 0:
        valid_old = valid_perplexity
      '''

            valid_perplexity = run_epoch(session, mvalid, valid_data,
                                         tf.no_op())
            print("Période: %d Perplexité sur données de validation: %.3f" %
                  (i + 1, valid_perplexity))
            '''
      if i > 0 and valid_old <= valid_perplexity:
        print('Diminution du LR: %.4f' % m.lr)
        m.lr_decay /=1.5
      '''

        test_perplexity = run_epoch(session, mtest, test_data, tf.no_op())
        print("Perplexité sur données de test: %.3f" % test_perplexity)
        print("Temps d'exécution: %.3f" % (time.time() - start_time))
Example #18
0
def main(_):
    if FLAGS.rename_variable_prefix:
        if not FLAGS.model_path or not FLAGS.new_model_path:
            logging.error(
                "Must set --model_path and --new_model_path to rename model variables"
            )
            exit(1)
    else:
        if not FLAGS.train_dir:
            logging.error("Must set --train_dir")
            exit(1)
        if not FLAGS.data_dir and (not FLAGS.train_idx or not FLAGS.dev_idx):
            logging.error(
                "Must set --data_dir to PTB data directory or specify data using --train_idx,--dev_idx"
            )
            exit(1)

    logging.getLogger().setLevel(logging.INFO)
    logging.info("Start: {}".format(
        datetime.datetime.strftime(datetime.datetime.now(),
                                   '%Y-%m-%d %H:%M:%S')))

    device = "/gpu:0"
    log_device_placement = False
    allow_soft_placement = True
    if FLAGS.device:
        device = '/' + FLAGS.device
    logging.info("Use device %s" % device)

    with tf.Graph().as_default(), tf.Session(config=tf.ConfigProto(allow_soft_placement=allow_soft_placement, log_device_placement=log_device_placement)) \
      as session, tf.device(device):

        if FLAGS.rename_variable_prefix:
            model_utils.rename_variable_prefix(session, FLAGS.config_file,
                                               FLAGS.model_path,
                                               FLAGS.new_model_path,
                                               FLAGS.variable_prefix,
                                               FLAGS.rename_variable_prefix)
        elif FLAGS.score:
            logging.info("Run model in scoring mode")
            use_log_probs = True
            logging.info("Run model in scoring mode")
            train_dir = "train.rnn.de"
            model, _ = load_model(session, FLAGS.config_file, train_dir,
                                  use_log_probs)

            #test_path = os.path.join(FLAGS.data_dir, "test15/test15.ids50003.de")
            #test_data = reader.read_indexed_data(test_path)
            #test_sentences = [ test_data ]

            # Add eos symbol to the beginning to score first word as well
            test_sentences = [
                [2, 5, 3316, 7930, 7, 7312, 9864, 30, 8, 10453, 4, 2],
                [2, 7, 5, 30, 8, 10453, 7930, 3316, 7312, 9864, 4, 2],
                [2, 5, 8, 30, 7, 4, 9864, 3316, 7312, 7930, 10453, 2],
                [2, 8, 10453, 9864, 30, 5, 3316, 7312, 7, 7930, 4]
            ]
            for test_data in test_sentences:
                # using log probs or cross entropies gives the same perplexities
                if use_log_probs:
                    # Run model as in training, with an iterator over inputs
                    train_utils.run_epoch_eval(session,
                                               model,
                                               test_data,
                                               tf.no_op(),
                                               use_log_probs=use_log_probs)
                    # Run model step by step (yields the same result)
                    #score_sentence(session, model, test_data)
                else:
                    train_utils.run_epoch_eval(session,
                                               model,
                                               test_data,
                                               tf.no_op(),
                                               use_log_probs=use_log_probs)
        else:
            logging.info("Run model in training mode")
            if FLAGS.model:
                config = model_utils.get_config(FLAGS.model)
                eval_config = model_utils.get_config(FLAGS.model)
            elif FLAGS.config_file:
                config = model_utils.read_config(FLAGS.config_file)
                eval_config = copy.copy(config)
            else:
                logging.error("Must specify either model name or config file.")
                sys.exit(1)
            eval_config.batch_size = 1
            eval_config.num_steps = 1

            #raw_data = reader.ptb_raw_data(FLAGS.data_dir)
            #train_data, valid_data, test_data, _ = raw_data
            train_data = reader.read_indexed_data(FLAGS.train_idx,
                                                  FLAGS.max_train_data_size,
                                                  config.vocab_size)
            valid_data = reader.read_indexed_data(FLAGS.dev_idx,
                                                  vocab_size=config.vocab_size)
            test_data = reader.read_indexed_data(FLAGS.test_idx,
                                                 vocab_size=config.vocab_size)

            if FLAGS.use_adagrad:
                config.learning_rate = 0.5
            if FLAGS.fixed_random_seed:
                tf.set_random_seed(1234)

            initializer = tf.random_uniform_initializer(
                -config.init_scale, config.init_scale)
            with tf.variable_scope("model",
                                   reuse=None,
                                   initializer=initializer):
                model = RNNLMModel(is_training=True, config=config)
            with tf.variable_scope("model",
                                   reuse=True,
                                   initializer=initializer):
                mvalid = RNNLMModel(is_training=False, config=config)
                mtest = RNNLMModel(is_training=False, config=eval_config)

            ckpt = tf.train.get_checkpoint_state(FLAGS.train_dir)
            if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path):
                logging.info("Reading model parameters from %s" %
                             ckpt.model_checkpoint_path)
                model.saver.restore(session, ckpt.model_checkpoint_path)
            else:
                logging.info("Created model with fresh parameters.")
                session.run(tf.initialize_all_variables())

            # Restore saved train variable
            start_idx = 0
            tmpfile = FLAGS.train_dir + "/tmp_idx.pkl"
            if model.global_step.eval() >= FLAGS.steps_per_checkpoint and \
              os.path.isfile(tmpfile):
                with open(tmpfile, "rb") as f:
                    start_idx = pickle.load(f)
                    logging.info(
                        "Restore saved train variable from %s, resume from train idx=%i"
                        % (tmpfile, start_idx))
            checkpoint_path = os.path.join(FLAGS.train_dir, "rnn.ppx.ckpt")
            best_valid = np.inf
            for i in range(config.max_max_epoch):
                if not (FLAGS.use_adadelta or FLAGS.use_adam):
                    lr_decay = config.lr_decay**max(i - config.max_epoch, 0.0)
                    model.assign_lr(session, config.learning_rate * lr_decay)

            if FLAGS.data_dir:
                raw_data = reader.ptb_raw_data(FLAGS.data_dir)
                train_data, valid_data, test_data, _ = raw_data
            else:
                train_data = reader.read_indexed_data(
                    FLAGS.train_idx, FLAGS.max_train_data_size,
                    config.vocab_size)
                valid_data = reader.read_indexed_data(
                    FLAGS.dev_idx, vocab_size=config.vocab_size)
                if FLAGS.test_idx:
                    test_data = reader.read_indexed_data(
                        FLAGS.test_idx, vocab_size=config.vocab_size)

            for epoch in range(start_epoch, config.max_max_epoch + 1):
                if not (FLAGS.optimizer == "adadelta"
                        or FLAGS.optimizer == "adam"):
                    if start_idx == 0:
                        lr_decay = config.lr_decay**max(
                            epoch - config.max_epoch + 1, 0.0)
                        model.assign_lr(session,
                                        config.learning_rate * lr_decay)
                logging.info("Epoch: %d Learning rate: %.3f" %
                             (epoch, session.run(model.lr)))
                train_perplexity = train_utils.run_epoch(
                    session,
                    model,
                    train_data,
                    model.train_op,
                    FLAGS.train_dir,
                    FLAGS.steps_per_checkpoint,
                    train=True,
                    start_idx=start_idx,
                    tmpfile=tmpfile,
                    m_valid=mvalid,
                    valid_data=valid_data)
                start_idx = 0
                logging.info("Epoch: %d Train Perplexity: %.3f" %
                             (i + 1, train_perplexity))

                valid_perplexity = train_utils.run_epoch(
                    session, mvalid, valid_data, tf.no_op(), FLAGS.train_dir,
                    FLAGS.steps_per_checkpoint)
                if valid_perplexity < best_valid:
                    best_valid = valid_perplexity
                    model.saver.save(session,
                                     checkpoint_path,
                                     global_step=model.global_step)
                    logging.info(
                        "Model achieves new best dev perplexity %.3f - saving to path=%s"
                        .format(valid_perplexity, checkpoint_path))

                logging.info("Epoch: %d Full Valid Perplexity: %.3f" %
                             (i + 1, valid_perplexity))

            logging.info("Training finished.")
            test_perplexity = train_utils.run_epoch(session, mtest, test_data,
                                                    tf.no_op(),
                                                    FLAGS.train_dir,
                                                    FLAGS.steps_per_checkpoint)
            final_checkpoint_path = os.path.join(FLAGS.train_dir,
                                                 "rnn.final.ckpt")

            logging.info("Test Perplexity: %.3f" % test_perplexity)

            logging.info("Save final model to path=%s" % final_checkpoint_path)
            model.saver.save(session,
                             final_checkpoint_path,
                             global_step=model.global_step)

        logging.info("End: {}".format(
            datetime.datetime.strftime(datetime.datetime.now(),
                                       '%Y-%m-%d %H:%M:%S')))
Example #19
0
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    if DEBUG:
        logger.setLevel(logging.DEBUG)
    else:
        logger.setLevel(logging.INFO)

    from tensorflow.models.rnn.ptb import reader
    import numpy as np

    DATAURL = "https://github.com/mil-tokyo/neural_network/tree/master/saito/sample/simple-examples/data"
    data_path = "simple-examples/data/"
    #"../mldatasets/simple-examples/data/"
    try:
        raw_data = reader.ptb_raw_data( data_path)
    except:
        # wget http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz
        # tar xvf simple-examples.tgz

        logging.warn("download data from\t%s\tto\t%s" % (DATAURL , data_path) )

    train_data, valid_data, test_data, _ = raw_data


    "define shapes and generate data"
    vocab_size = max(train_data) 
    emb_size = 120
    num_steps = 17
    batch_size =  20
    logging.debug("batch_size\t%s" % batch_size )
Example #20
0
def main(_):
    # 获取原始数据
    train_data, valid_data, test_data, _ = reader.ptb_raw_data(DATA_PATH)

    # 计算一个epoch需要训练的次数
    train_data_len = len(train_data)
    train_batch_len = train_data_len // TRAIN_BATCH_SIZE
    train_epoch_size = (train_batch_len - 1) // TRAIN_NUM_STEP

    valid_data_len = len(valid_data)
    valid_batch_len = valid_data_len // EVAL_BATCH_SIZE
    valid_epoch_size = (valid_batch_len - 1) // EVAL_NUM_STEP

    test_data_len = len(test_data)
    test_batch_len = test_data_len // EVAL_BATCH_SIZE
    test_epoch_size = (test_batch_len - 1) // EVAL_NUM_STEP

    # 定义初始化函数
    initializer = tf.random_uniform_initializer(-0.05, 0.05)
    # 定义训练用的循环神经网络模型
    with tf.variable_scope("language_model",
                           reuse=None,
                           initializer=initializer):
        train_model = PTBModel(True, TRAIN_BATCH_SIZE, TRAIN_NUM_STEP)

    # 定义评测用的循环神经网络模型
    with tf.variable_scope("language_model",
                           reuse=True,
                           initializer=initializer):
        eval_model = PTBModel(False, EVAL_BATCH_SIZE, EVAL_NUM_STEP)

    with tf.Session() as session:
        tf.global_variables_initializer().run()

        train_queue = reader.ptb_producer(train_data, train_model.batch_size,
                                          train_model.num_steps)
        eval_queue = reader.ptb_producer(valid_data, eval_model.batch_size,
                                         eval_model.num_steps)
        test_queue = reader.ptb_producer(test_data, eval_model.batch_size,
                                         eval_model.num_steps)

        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(sess=session, coord=coord)

        # 使用训练数据训练模型
        for i in range(NUM_EPOCH):
            print "In iteration: {}".format(i + 1)

            run_epoch(session, train_model, train_queue, train_model.train_op,
                      True, train_epoch_size)

            valid_perplexity = run_epoch(session, eval_model, eval_queue,
                                         tf.no_op(), False, valid_epoch_size)

            print "Epoch: {} Validation Perplexity: {:.3f}".format(
                i + 1, valid_perplexity)

        # 最后使用测试数据测试模型效果
        test_perplexity = run_epoch(session, eval_model, test_queue,
                                    tf.no_op(), False, test_epoch_size)
        print "Test Perplexity: {:.3f}".format(test_perplexity)

        coord.request_stop()
        coord.join(threads)
Example #21
0
def main(_):
  if not FLAGS.data_path:
    raise ValueError("Must set --data_path to PTB data directory")

  raw_data = reader.ptb_raw_data(FLAGS.data_path)
  train_data, valid_data, test_data, _ = raw_data

  config = get_config()
  eval_config = get_config()
  eval_config.batch_size = 1
  eval_config.num_steps = 1

  with tf.Graph().as_default(), tf.Session() as session:

    if FLAGS.importmodeldir is not None:
      # Import a model instance

      # Find last executed epoch

      from glob import glob
      history = list(map(lambda x: int(x.split('-')[1][:-5]), glob(FLAGS.importmodeldir+'/model/model.ckpt-*.meta')))
      last_epoch = np.max(history)

      # Recreate model
      with tf.variable_scope("model", reuse=None):
        m = PTBModel(is_training=True, config=config)
        # merged_summaries_for_training = tf.merge_all_summaries() # use this operation to merge summaries attached so far
      with tf.variable_scope("model", reuse=True):
        mtest = PTBModel(is_training=False, config=eval_config)
        merged_summaries_for_test = tf.merge_all_summaries()  # use this operation to merge summaries attached so far
        mvalid = PTBModel(is_training=False, config=config)
        # merged_summaries_for_valid = tf.merge_all_summaries() # use this operation to merge summaries attached so far

      # Fill model variables with trained values
      tf.train.Saver().restore(session, FLAGS.importmodeldir+'/model/model.ckpt-{}'.format(last_epoch))
      initial_epoch = last_epoch + 1
    else:
      # Create a model instance

      initializer = tf.random_uniform_initializer(-config.init_scale,
                                                  config.init_scale)

      with tf.variable_scope("model", reuse=None, initializer=initializer):
        m = PTBModel(is_training=True, config=config)
        # merged_summaries_for_training = tf.merge_all_summaries() # use this operation to merge summaries attached so far
      with tf.variable_scope("model", reuse=True, initializer=initializer):
        mtest = PTBModel(is_training=False, config=eval_config)
        merged_summaries_for_test = tf.merge_all_summaries()  # use this operation to merge summaries attached so far
        mvalid = PTBModel(is_training=False, config=config)
        # merged_summaries_for_valid = tf.merge_all_summaries() # use this operation to merge summaries attached so far
      tf.initialize_all_variables().run()
      initial_epoch = 0

    init_logs()
    init_model_persistance()

    train_writer = tf.train.SummaryWriter(FLAGS.logdir + "/train", session.graph)
    valid_writer = tf.train.SummaryWriter(FLAGS.logdir + "/valid", session.graph)
    test_writer = tf.train.SummaryWriter(FLAGS.logdir + "/test", session.graph)

    for i in range(initial_epoch, config.max_max_epoch):
      lr_decay = config.lr_decay ** max(i - config.max_epoch, 0.0)
      m.assign_lr(session, config.learning_rate * lr_decay)

      print("Epoch: %d Learning rate: %.3f" % (i + 1, session.run(m.lr)))
      train_perplexity = run_epoch(session, m, train_data, m.train_op,
                                   verbose=True, summary_op=None, summary_writer=train_writer)
      print("Epoch: %d Train Perplexity: %.3f" % (i + 1, train_perplexity))
      valid_perplexity = run_epoch(session, mvalid, valid_data, tf.no_op(), summary_op=None,summary_writer=None)
      print("Epoch: %d Valid Perplexity: %.3f" % (i + 1, valid_perplexity))
      if FLAGS.exportmodeldir is not None:
        tf.train.Saver().save(session,FLAGS.exportmodeldir+"/model/model.ckpt",global_step=i)
    test_perplexity = run_epoch(session, mtest, test_data, tf.no_op(), summary_op=merged_summaries_for_test, summary_writer=test_writer)
    if FLAGS.exportmodeldir is not None:
      tf.train.Saver().save(session,FLAGS.exportmodeldir+"/model/model.ckpt",global_step=config.max_max_epoch)
    print("Test Perplexity: %.3f" % test_perplexity)