import tensorflow as tf

  @property
  def hparams(self):
    return self._hparams

  @property
  def has_input(self):
    if self._problem_hparams:
      return "inputs" in self._problem_hparams.input_modality
    else:
      return True

  def call(self, features):
    tf.get_variable_scope().set_initializer(
        optimize.get_variable_initializer(self.hparams))
    with self._eager_var_store.as_default():
      self._fill_problem_hparams_features(features)
      sharded_features = self._shard_features(features)
      sharded_logits, losses = self.model_fn_sharded(sharded_features)
      if isinstance(sharded_logits, dict):
        concat_logits = {}
        for k, v in sharded_logits.iteritems():
          concat_logits[k] = tf.concat(v, 0)
        return concat_logits, losses
      else:
