def session_start_pb(hparams,
                     model_uri='',
                     monitor_url='',
                     group_name='',
                     start_time_secs=None):
  """Constructs a SessionStartInfo protobuffer.

  Creates a summary that contains a training session metadata information.
  One such summary per training session should be created. Each should have
  a different run.

  Args:
    hparams: A dictionary with string keys. Describes the hyperparameter values
             used in the session, mapping each hyperparameter name to its value.
             Supported value types are  `bool`, `int`, `float`, `str`, `list`,
             `tuple`.
             The type of value must correspond to the type of hyperparameter
             (defined in the corresponding api_pb2.HParamInfo member of the
             Experiment protobuf) as follows:

              +-----------------+---------------------------------+
              |Hyperparameter   | Allowed (Python) value types    |
              |type             |                                 |
              +-----------------+---------------------------------+
              |DATA_TYPE_BOOL   | bool                            |
              |DATA_TYPE_FLOAT64| int, float                      |
              |DATA_TYPE_STRING | six.string_types, tuple, list   |
              +-----------------+---------------------------------+

             Tuple and list instances will be converted to their string
             representation.
    model_uri: See the comment for the field with the same name of
               plugin_data_pb2.SessionStartInfo.
    monitor_url: See the comment for the field with the same name of
                 plugin_data_pb2.SessionStartInfo.
    group_name:  See the comment for the field with the same name of
                 plugin_data_pb2.SessionStartInfo.
    start_time_secs: float. The time to use as the session start time.
                     Represented as seconds since the UNIX epoch. If None uses
                     the current time.
  Returns:
    The summary protobuffer mentioned above.
  """
  if start_time_secs is None:
    start_time_secs = time.time()
  session_start_info = plugin_data_pb2.SessionStartInfo(
      model_uri=model_uri,
      monitor_url=monitor_url,
      group_name=group_name,
      start_time_secs=start_time_secs)
  for (hp_name, hp_val) in six.iteritems(hparams):
    if isinstance(hp_val, (float, int)):
      session_start_info.hparams[hp_name].number_value = hp_val
    elif isinstance(hp_val, six.string_types):
      session_start_info.hparams[hp_name].string_value = hp_val
    elif isinstance(hp_val, bool):
      session_start_info.hparams[hp_name].bool_value = hp_val
    elif isinstance(hp_val, (list, tuple)):
      session_start_info.hparams[hp_name].string_value = str(hp_val)
    else:
      raise TypeError('hparams[%s]=%s has type: %s which is not supported' %
                      (hp_name, hp_val, type(hp_val)))
  return _summary(metadata.SESSION_START_INFO_TAG,
                  plugin_data_pb2.HParamsPluginData(
                      session_start_info=session_start_info))
Constructs a SessionStartInfo protobuffer.

  Creates a summary that contains a training session metadata information.
  One such summary per training session should be created. Each should have
  a different run.

  Args:
    hparams: A dictionary with string keys. Describes the hyperparameter values
             used in the session, mapping each hyperparameter name to its value.
             Supported value types are  `bool`, `int`, `float`, `str`, `list`,
             `tuple`.
             The type of value must correspond to the type of hyperparameter
             (defined in the corresponding api_pb2.HParamInfo member of the
             Experiment protobuf) as follows:

              +-----------------+---------------------------------+
              |Hyperparameter   | Allowed (Python) value types    |
              |type             |                                 |
              +-----------------+---------------------------------+
              |DATA_TYPE_BOOL   | bool                            |
              |DATA_TYPE_FLOAT64| int, float                      |
              |DATA_TYPE_STRING | six.string_types, tuple, list   |
              +-----------------+---------------------------------+

             Tuple and list instances will be converted to their string
             representation.
    model_uri: See the comment for the field with the same name of
               plugin_data_pb2.SessionStartInfo.
    monitor_url: See the comment for the field with the same name of
                 plugin_data_pb2.SessionStartInfo.
    group_name:  See the comment for the field with the same name of
                 plugin_data_pb2.SessionStartInfo.
    start_time_secs: float. The time to use as the session start time.
                     Represented as seconds since the UNIX epoch. If None uses
                     the current time.
  Returns:
    The summary protobuffer mentioned above.