示例#1
0
def create_experiment_components(hparams, output_dir, data_dir, model_name):
  """Constructs and returns Estimator and train/eval input functions."""
  tf.logging.info("Creating experiment, storing model files in %s", output_dir)

  num_datashards = devices.data_parallelism().n
  train_input_fn = input_fn_builder.build_input_fn(
      mode=tf.contrib.learn.ModeKeys.TRAIN,
      hparams=hparams,
      data_file_patterns=get_data_filepatterns(data_dir,
                                               tf.contrib.learn.ModeKeys.TRAIN),
      num_datashards=num_datashards)

  eval_input_fn = input_fn_builder.build_input_fn(
      mode=tf.contrib.learn.ModeKeys.EVAL,
      hparams=hparams,
      data_file_patterns=get_data_filepatterns(data_dir,
                                               tf.contrib.learn.ModeKeys.EVAL),
      num_datashards=num_datashards)
  estimator = tf.contrib.learn.Estimator(
      model_fn=model_builder.build_model_fn(model_name, hparams=hparams),
      model_dir=output_dir,
      config=tf.contrib.learn.RunConfig(
          master=FLAGS.master,
          model_dir=output_dir,
          gpu_memory_fraction=FLAGS.worker_gpu_memory_fraction,
          session_config=session_config(),
          keep_checkpoint_max=FLAGS.keep_checkpoint_max))
  # Store the hparams in the estimator as well
  estimator.hparams = hparams
  return estimator, {
      tf.contrib.learn.ModeKeys.TRAIN: train_input_fn,
      tf.contrib.learn.ModeKeys.EVAL: eval_input_fn
  }
示例#2
0
def create_experiment_components(hparams, output_dir, data_dir, model_name):
    """Constructs and returns Estimator and train/eval input functions."""
    tf.logging.info("Creating experiment, storing model files in %s",
                    output_dir)

    num_datashards = devices.data_parallelism().n
    train_input_fn = input_fn_builder.build_input_fn(
        mode=tf.estimator.ModeKeys.TRAIN,
        hparams=hparams,
        data_file_patterns=get_data_filepatterns(data_dir,
                                                 tf.estimator.ModeKeys.TRAIN),
        num_datashards=num_datashards,
        worker_replicas=FLAGS.worker_replicas,
        worker_id=FLAGS.worker_id)

    eval_input_fn = input_fn_builder.build_input_fn(
        mode=tf.estimator.ModeKeys.EVAL,
        hparams=hparams,
        data_file_patterns=get_data_filepatterns(data_dir,
                                                 tf.estimator.ModeKeys.EVAL),
        num_datashards=num_datashards,
        worker_replicas=FLAGS.worker_replicas,
        worker_id=FLAGS.worker_id)

    autotune = False
    objective = None
    if hasattr(FLAGS, "autotune"):
        autotune = FLAGS.autotune
        objective = FLAGS.objective
    model_fn = model_builder.build_model_fn(
        model_name,
        problem_names=FLAGS.problems.split("-"),
        train_steps=FLAGS.train_steps,
        worker_id=FLAGS.worker_id,
        worker_replicas=FLAGS.worker_replicas,
        eval_run_autoregressive=FLAGS.eval_run_autoregressive,
        decode_hparams=decoding.decode_hparams(FLAGS.decode_hparams),
        autotune=autotune,
        objective=objective)
    estimator = tf.estimator.Estimator(
        model_fn=model_fn,
        model_dir=output_dir,
        params=hparams,
        config=tf.contrib.learn.RunConfig(
            master=FLAGS.master,
            gpu_memory_fraction=FLAGS.worker_gpu_memory_fraction,
            session_config=session_config(),
            keep_checkpoint_max=FLAGS.keep_checkpoint_max,
            keep_checkpoint_every_n_hours=FLAGS.keep_checkpoint_every_n_hours,
            save_checkpoints_secs=FLAGS.save_checkpoints_secs))

    return estimator, {
        tf.estimator.ModeKeys.TRAIN: train_input_fn,
        tf.estimator.ModeKeys.EVAL: eval_input_fn
    }
def create_experiment_components(params,
                                 hparams,
                                 run_config,
                                 problem_instance,
                                 train_preprocess_file_path=None,
                                 dev_preprocess_file_path=None):
    """Constructs and returns Estimator and train/eval input functions."""
    tf.logging.info("Creating experiment, storing model files in %s",
                    run_config.model_dir)

    add_problem_hparams(hparams, params.problem_name, params.model_dir,
                        problem_instance)

    # hparams batch_size is used as minibatch size instead of tokens in batch
    batch_size = (hparams.use_fixed_batch_size and hparams.batch_size) or None
    num_datashards = 1
    train_input_fn = input_fn_builder.build_input_fn(
        mode=tf.estimator.ModeKeys.TRAIN,
        hparams=hparams,
        data_dir=params.data_dir,
        num_datashards=num_datashards,
        worker_replicas=FLAGS.worker_replicas,
        worker_id=FLAGS.worker_id,
        batch_size=batch_size,
        dataset_split=train_preprocess_file_path)

    eval_input_fn = input_fn_builder.build_input_fn(
        mode=tf.estimator.ModeKeys.EVAL,
        hparams=hparams,
        data_dir=params.data_dir,
        num_datashards=num_datashards,
        worker_replicas=FLAGS.worker_replicas,
        worker_id=FLAGS.worker_id,
        dataset_split=dev_preprocess_file_path)

    model_fn = model_builder.build_model_fn(
        params.model_name,
        problem_names=[params.problem_name],
        train_steps=params.train_steps,
        worker_id=FLAGS.worker_id,
        worker_replicas=FLAGS.worker_replicas,
        eval_run_autoregressive=FLAGS.eval_run_autoregressive,
        decode_hparams=decoding.decode_hparams(params.decode_hparams))

    estimator = tf.estimator.Estimator(model_fn=model_fn,
                                       model_dir=run_config.model_dir,
                                       params=hparams,
                                       config=run_config)

    return estimator, {
        tf.estimator.ModeKeys.TRAIN: train_input_fn,
        tf.estimator.ModeKeys.EVAL: eval_input_fn
    }
    def testSingleEvalStepRawSession(self):
        """Illustrate how to run a T2T model in a raw session."""

        # Set model name, hparams, problems as would be set on command line.
        model_name = "transformer"
        FLAGS.hparams_set = "transformer_test"
        FLAGS.problems = "tiny_algo"
        data_dir = "/tmp"  # Used only when a vocab file or such like is needed.

        # Create the problem object, hparams, model_fn, placeholders, features dict.
        encoders = registry.problem(FLAGS.problems).feature_encoders(data_dir)
        hparams = trainer_utils.create_hparams(FLAGS.hparams_set,
                                               FLAGS.problems, data_dir)
        model_fn = model_builder.build_model_fn(model_name, hparams)
        inputs_ph = tf.placeholder(dtype=tf.int32)  # Just length dimension.
        batch_inputs = tf.reshape(inputs_ph, [1, -1, 1, 1])  # Make it 4D.
        targets_ph = tf.placeholder(dtype=tf.int32)  # Just length dimension.
        batch_targets = tf.reshape(targets_ph, [1, -1, 1, 1])  # Make it 4D.
        features = {
            "inputs": batch_inputs,
            "problem_choice": 0,  # We run on the first problem here.
            "input_space_id": hparams.problems[0].input_space_id,
            "target_space_id": hparams.problems[0].target_space_id
        }

        # Now set a mode and create the graph by invoking model_fn.
        mode = tf.contrib.learn.ModeKeys.EVAL
        predictions_dict, _, _ = model_fn(  # In INFER mode targets can be None.
            features, batch_targets, mode)
        predictions = tf.squeeze(
            # These are not images, axis=2,3 are not needed.
            predictions_dict["predictions"],
            axis=[2, 3])

        # Having the graph, let's run it on some data.
        with self.test_session() as sess:
            sess.run(tf.global_variables_initializer())
            inputs = "0 1 0"
            targets = "0 1 0"
            # Encode from raw string to numpy input array using problem encoders.
            inputs_numpy = encoders["inputs"].encode(inputs)
            targets_numpy = encoders["targets"].encode(targets)
            # Feed the encoded inputs and targets and run session.
            feed = {inputs_ph: inputs_numpy, targets_ph: targets_numpy}
            np_predictions = sess.run(predictions, feed)
            # Check that the result has the correct shape: batch x length x vocab_size
            #   where, for us, batch = 1, length = 3, vocab_size = 4.
            self.assertEqual(np_predictions.shape, (1, 3, 4))
示例#5
0
def create_experiment_components(data_dir, model_name, hparams, run_config):
    """Constructs and returns Estimator and train/eval input functions."""
    tf.logging.info("Creating experiment, storing model files in %s",
                    run_config.model_dir)

    add_problem_hparams(hparams, FLAGS.problems)

    # hparams batch_size is used as minibatch size instead of tokens in batch
    batch_size = (hparams.use_fixed_batch_size and hparams.batch_size) or None
    num_datashards = devices.data_parallelism().n
    train_input_fn = input_fn_builder.build_input_fn(
        mode=tf.estimator.ModeKeys.TRAIN,
        hparams=hparams,
        data_dir=data_dir,
        num_datashards=num_datashards,
        worker_replicas=FLAGS.worker_replicas,
        worker_id=FLAGS.worker_id,
        batch_size=batch_size)  # return feature_map, feature_map["targets"]

    eval_input_fn = input_fn_builder.build_input_fn(
        mode=tf.estimator.ModeKeys.EVAL,
        hparams=hparams,
        data_dir=data_dir,
        num_datashards=num_datashards,
        worker_replicas=FLAGS.worker_replicas,
        worker_id=FLAGS.worker_id,
        dataset_split="test"
        if FLAGS.eval_use_test_set else None)  # evaluate on test dataset
    # input_fn return feature_map

    model_fn = model_builder.build_model_fn(
        model_name,
        problem_names=FLAGS.problems.split("-"),
        train_steps=FLAGS.train_steps,
        worker_id=FLAGS.worker_id,
        worker_replicas=FLAGS.worker_replicas,
        eval_run_autoregressive=FLAGS.eval_run_autoregressive,
        decode_hparams=decoding.decode_hparams(FLAGS.decode_hparams))

    estimator = tf.estimator.Estimator(model_fn=model_fn,
                                       model_dir=run_config.model_dir,
                                       params=hparams,
                                       config=run_config)

    return estimator, {
        tf.estimator.ModeKeys.TRAIN: train_input_fn,
        tf.estimator.ModeKeys.EVAL: eval_input_fn
    }
示例#6
0
def create_experiment_components(data_dir, model_name, hparams, run_config):
  """Constructs and returns Estimator and train/eval input functions."""
  tf.logging.info("Creating experiment, storing model files in %s",
                  run_config.model_dir)

  add_problem_hparams(hparams, FLAGS.problems)

  # hparams batch_size is used as minibatch size instead of tokens in batch
  batch_size = (hparams.use_fixed_batch_size and hparams.batch_size) or None
  num_datashards = devices.data_parallelism(hparams).n
  train_input_fn = input_fn_builder.build_input_fn(
      mode=tf.estimator.ModeKeys.TRAIN,
      hparams=hparams,
      data_dir=data_dir,
      num_datashards=num_datashards,
      worker_replicas=FLAGS.worker_replicas,
      worker_id=FLAGS.worker_id,
      batch_size=batch_size)

  eval_input_fn = input_fn_builder.build_input_fn(
      mode=tf.estimator.ModeKeys.EVAL,
      hparams=hparams,
      data_dir=data_dir,
      num_datashards=num_datashards,
      worker_replicas=FLAGS.worker_replicas,
      worker_id=FLAGS.worker_id,
      dataset_split="test" if FLAGS.eval_use_test_set else None)

  model_fn = model_builder.build_model_fn(
      model_name,
      problem_names=FLAGS.problems.split("-"),
      train_steps=FLAGS.train_steps,
      worker_id=FLAGS.worker_id,
      worker_replicas=FLAGS.worker_replicas,
      eval_run_autoregressive=FLAGS.eval_run_autoregressive,
      decode_hparams=decoding.decode_hparams(FLAGS.decode_hparams))

  estimator = tf.estimator.Estimator(
      model_fn=model_fn,
      model_dir=run_config.model_dir,
      params=hparams,
      config=run_config)

  return estimator, {
      tf.estimator.ModeKeys.TRAIN: train_input_fn,
      tf.estimator.ModeKeys.EVAL: eval_input_fn
  }
示例#7
0
def create_experiment_components(data_dir, model_name, hparams, run_config):
    """Constructs and returns Estimator and train/eval input functions."""
    tf.logging.info("Creating experiment, storing model files in %s",
                    run_config.model_dir)

    hparams = add_problem_hparams(hparams, FLAGS.problems)

    num_datashards = devices.data_parallelism().n
    train_input_fn = input_fn_builder.build_input_fn(
        mode=tf.estimator.ModeKeys.TRAIN,
        hparams=hparams,
        data_file_patterns=get_data_filepatterns(data_dir,
                                                 tf.estimator.ModeKeys.TRAIN),
        num_datashards=num_datashards,
        worker_replicas=FLAGS.worker_replicas,
        worker_id=FLAGS.worker_id)

    eval_input_fn = input_fn_builder.build_input_fn(
        mode=tf.estimator.ModeKeys.EVAL,
        hparams=hparams,
        data_file_patterns=get_data_filepatterns(data_dir,
                                                 tf.estimator.ModeKeys.EVAL),
        num_datashards=num_datashards,
        worker_replicas=FLAGS.worker_replicas,
        worker_id=FLAGS.worker_id)

    model_fn = model_builder.build_model_fn(
        model_name,
        problem_names=FLAGS.problems.split("-"),
        train_steps=FLAGS.train_steps,
        worker_id=FLAGS.worker_id,
        worker_replicas=FLAGS.worker_replicas,
        eval_run_autoregressive=FLAGS.eval_run_autoregressive,
        decode_hparams=decoding.decode_hparams(FLAGS.decode_hparams))

    estimator = tf.estimator.Estimator(model_fn=model_fn,
                                       model_dir=run_config.model_dir,
                                       params=hparams,
                                       config=run_config)

    return estimator, {
        tf.estimator.ModeKeys.TRAIN: train_input_fn,
        tf.estimator.ModeKeys.EVAL: eval_input_fn
    }