tensorflow中的slim函数集合

2022-09-04 21:30:40 浏览数 (1)

slim.get_model_variables()

代码语言:javascript复制
def get_model_variables(scope=None, suffix=None):

  return get_variables(scope, suffix, ops.GraphKeys.MODEL_VARIABLES)

获取按范围和/或后缀过滤的模型变量列表。

参数:

  • 作用域:筛选要返回的变量的可选作用域。
  • 后缀:用于过滤要返回的变量的可选后缀。

返回值:

  • 集合中具有范围和后缀的变量列表。

slim.get_trainable_variables()

代码语言:javascript复制
def get_trainable_variables(scope=None, suffix=None):

  return get_variables(scope, suffix, ops.GraphKeys.TRAINABLE_VARIABLES)

获取按范围和/或后缀过滤可训练变量列表。

参数:

  • 作用域:筛选要返回的变量的可选作用域。
  • 后缀:用于过滤要返回的变量的可选后缀。

返回值:

  • 具有范围和后缀的可训练集合中的变量列表。

slim.learning.train()

代码语言:javascript复制
slim.learning.train(train_op, logdir, train_step_fn=train_step,
                    train_step_kwargs=_USE_DEFAULT,
                    log_every_n_steps=1, graph=None, master='',
                    is_chief=True, global_step=None,
                    number_of_steps=None, init_op=_USE_DEFAULT,
                    init_feed_dict=None, local_init_op=_USE_DEFAULT,
                    init_fn=None, ready_op=_USE_DEFAULT,
                    summary_op=_USE_DEFAULT,
                    save_summaried_secs=600,
                    summary_writer=_USE_DEFAULT,
                    startup_delay_steps=0, saver=None,
                    save_interval_secs=600, sync_optimizer=None,
                    session_config=None, session_wrapper=None,
                    trace_every_n_steps=None,
                    ignore_live_threads=False)

参数众多,其中重要的有:

  • train_op,指定优化算法
  • logdir,指定训练数据保存文件夹
  • save_summaries_secs,指定每隔多少秒更新一次日志文件(对应 tensorboard 刷新一次的时间)
  • save_interval_secs,指定每隔多少秒保存一次模型

slim.fully_connected()

代码语言:javascript复制
def fully_connected(inputs,
                    num_outputs,
                    activation_fn=nn.relu,
                    normalizer_fn=None,
                    normalizer_params=None,
                    weights_initializer=initializers.xavier_initializer(),
                    weights_regularizer=None,
                    biases_initializer=init_ops.zeros_initializer(),
                    biases_regularizer=None,
                    reuse=None,
                    variables_collections=None,
                    outputs_collections=None,
                    trainable=True,
                    scope=None)
代码语言:javascript复制
添加一个完全连接的层。“fully_connected”创建一个名为“weights”的变量,表示一个完全连接的权重矩阵,该矩阵乘以“输入”,生成一个隐藏单元的“张量”。如果提供了' normalizer_fn '(例如' batch_norm '),则应用它。否则,如果‘normalizer_fn’为None,并且提供了一个‘biases_initializer’,那么就会创建一个‘bias’变量,并添加隐藏的单元。最后,如果“activation_fn”不是“None”,那么它也应用于隐藏单元。注意:如果“输入”的秩大于2,那么“输入”在初始矩阵乘以“权重”之前是平坦的。

参数:

  • inputs:至少秩为2的张量,最后一个维度为静态值;即。' [batch_size, depth] ', ' [None, None, None, channels] '。
  • num_output:整数或长,层中输出单元的数量。
  • activation_fn:激活函数。默认值是一个ReLU函数。显式地将其设置为None以跳过它并保持线性激活。
  • normalizer_fn:用来代替“偏差”的归一化函数。如果提供“normalizer_fn”,则忽略“biases_initializer”和“biases_regularizer”,并且不会创建或添加“bias”。对于no正常化器函数,默认设置为None
  • normalizer_params:规范化函数参数。
  • weights_initializer:权值的初始化器。
  • weights_regularizer:可选的权重正则化器。
  • biases_initializer:用于偏差的初始化器。如果没有人跳过偏见。
  • biases_regularizer:可选的偏差调整器。
  • reuse:是否应该重用层及其变量。为了能够重用层范围,必须给出。
  • variables_collections:所有变量的可选集合列表,或包含每个变量的不同集合列表的字典。
  • outputs_collections:用于添加输出的集合。
  • trainable:如果“True”还将变量添加到图形集合“GraphKeys”中。TRAINABLE_VARIABLES”(见tf.Variable)。
  • scope:variable_scope的可选作用域。

返回值:

  • 表示一系列运算结果的张量变量。

可能产生的异常:

  • ValueError: If x has rank less than 2 or if its last dimension is not set.

slim.softmax()

代码语言:javascript复制
softmax(logits, scope=None)

对n维logit张量的第n维执行softmax。对于二维logits,这可以归结为tf.n .softmax。第n个维度需要具有指定数量的元素(类的数量)。

参数:

  • logits: N维张量,其中N > 1。
  • scope:variable_scope的可选作用域。

返回值:

  • 一个形状和类型与logits相同的“张量”。

slim.get_model_variables()

代码语言:javascript复制
def get_model_variables(scope=None, suffix=None):

  return get_variables(scope, suffix, ops.GraphKeys.MODEL_VARIABLES)

获取按范围和/或后缀过滤的模型变量列表。

参数:

  • scope:筛选要返回的变量的可选作用域
  • suffix:用于过滤要返回的变量的可选后缀

返回值:

  • 集合中具有范围和后缀的变量列表

slim.get_or_create_global_step()

代码语言:javascript复制
get_or_create_global_step()

返回并创建(必要时)全局阶跃张量。

参数:

  • graph:用来创建全局阶跃张量的图。如果丢失,使用默认的图。

返回值:

  • 全局阶跃张量

slim.arg_scope()

代码语言:javascript复制
def arg_scope(list_ops_or_scope, **kwargs):
  if isinstance(list_ops_or_scope, dict):
    # Assumes that list_ops_or_scope is a scope that is being reused.
    if kwargs:
      raise ValueError('When attempting to re-use a scope by suppling a'
                       'dictionary, kwargs must be empty.')
    current_scope = list_ops_or_scope.copy()
    try:
      _get_arg_stack().append(current_scope)
      yield current_scope
    finally:
      _get_arg_stack().pop()
  else:
    # Assumes that list_ops_or_scope is a list/tuple of ops with kwargs.
    if not isinstance(list_ops_or_scope, (list, tuple)):
      raise TypeError('list_ops_or_scope must either be a list/tuple or reused '
                      'scope (i.e. dict)')
    try:
      current_scope = current_arg_scope().copy()
      for op in list_ops_or_scope:
        key = arg_scope_func_key(op)
        if not has_arg_scope(op):
          raise ValueError('%s is not decorated with @add_arg_scope',
                           _name_op(op))
        if key in current_scope:
          current_kwargs = current_scope[key].copy()
          current_kwargs.update(kwargs)
          current_scope[key] = current_kwargs
        else:
          current_scope[key] = kwargs.copy()
      _get_arg_stack().append(current_scope)
      yield current_scope
    finally:
      _get_arg_stack().pop()

存储给定list_ops集合的默认参数。

参数:

  • list_ops_or_scope:为包含当前范围的字典设置参数范围的操作的列表或元组。当list_ops_or_scope是dict时,kwargs必须为空。当list_ops_or_scope是一个列表或元组时,其中的每个op都需要用@add_arg_scope修饰才能工作。
  • **kwargs: keyword=value,它将为list_ops中的每个操作定义默认值。所有的ops都需要接受给定的一组参数。**kwargs:current_scope是{op: {arg: value}}的字典。

返回值:

  • yield:current_scope是{op: {arg: value}}的字典

可能产生的异常:

  • TypeError: if list_ops is not a list or a tuple.
  • ValueError: if any op in list_ops has not be decorated with @add_arg_scope.

slim.variance_scaling_initializer()

代码语言:javascript复制
def xavier_initializer(uniform=True, seed=None, dtype=dtypes.float32):

  if not dtype.is_floating:
    raise TypeError('Cannot create initializer for non-floating point type.')
  if mode not in ['FAN_IN', 'FAN_OUT', 'FAN_AVG']:
    raise TypeError('Unknown mode %s [FAN_IN, FAN_OUT, FAN_AVG]', mode)

返回对权重执行“Xavier”初始化的初始化器。此函数实现权重初始化,从:

Xavier Glorot和yobengio(2010):[了解深度前馈神经网络训练的难点]。(http://www.jmlr.org/programedings/papers/v9/glorot10a/glorot10a.pdf)

这个初始化器的设计目的是在所有层中保持梯度的比例大致相同。在均匀分布中,这个范围是' x = sqrt(6。/ (in out);正态分布的标准差为√2。/ (in out))’。

参数:

  • factor:浮动。一个乘法因素
  • mode:字符串。“FAN_IN”、“FAN_OUT’,‘FAN_AVG’
  • uniform:是否使用均匀或正态分布随机初始化
  • seed:一个Python整数。用于创建随机种子。看到“特遣部队。set_random_seed”行为
  • dtype:数据类型。只支持浮点类型

返回值:

  • 生成单位方差张量的初始化器

可能产生的异常:

  • ValueError: if `dtype` is not a floating point type.
  • TypeError: if `mode` is not in ['FAN_IN', 'FAN_OUT', 'FAN_AVG'].

slim.l2_regularizer()

代码语言:javascript复制
def l2_regularizer(scale, scope=None):
  if isinstance(scale, numbers.Integral):
    raise ValueError('scale cannot be an integer: %s' % (scale,))
  if isinstance(scale, numbers.Real):
    if scale < 0.:
      raise ValueError('Setting a scale less than 0 on a regularizer: %g.' %
                       scale)
    if scale == 0.:
      logging.info('Scale of 0 disables regularizer.')
      return lambda _: None

返回一个函数,该函数可用于对权重应用L2正则化。较小的L2值有助于防止训练数据过度拟合。

参数:

  • scale:标量乘法器“张量”。0.0禁用正则化器
  • scope:可选的作用域名称

返回值:

  • 一个带有“l2(权重)”签名的函数,它应用l2正则化

可能产生的异常:

  • ValueError: If scale is negative or if scale is not a float.

slim.flatten()

在保持batch_size的同时,将输入压扁。假设第一个维度表示批处理。

代码语言:javascript复制
def flatten(inputs, outputs_collections=None, scope=None):
  with ops.name_scope(scope, 'Flatten', [inputs]) as sc:
    inputs = ops.convert_to_tensor(inputs)
    outputs = core_layers.flatten(inputs)
    return utils.collect_named_outputs(outputs_collections, sc, outputs)

参数:

  • inputs:一个大小张量[batch_size,…]
  • outputs_collections:用于添加输出的集合
  • scope:name_scope的可选作用域

返回值:

  • 一个具有形状[batch_size, k]的平坦张量。

可能产生的异常:

  • ValueError: If inputs rank is unknown or less than 2.

slim.max_pool2d()

代码语言:javascript复制
def max_pool2d(inputs,
               kernel_size,
               stride=2,
               padding='VALID',
               data_format=DATA_FORMAT_NHWC,
               outputs_collections=None,
               scope=None):
  if data_format not in (DATA_FORMAT_NCHW, DATA_FORMAT_NHWC):
    raise ValueError('data_format has to be either NCHW or NHWC.')
  with ops.name_scope(scope, 'MaxPool2D', [inputs]) as sc:
    inputs = ops.convert_to_tensor(inputs)
    df = ('channels_first'
          if data_format and data_format.startswith('NC') else 'channels_last')
    layer = pooling_layers.MaxPooling2D(
        pool_size=kernel_size,
        strides=stride,
        padding=padding,
        data_format=df,
        _scope=sc)
    outputs = layer.apply(inputs)
    return utils.collect_named_outputs(outputs_collections, sc, outputs)

添加了一个2D最大池化操作,它假设池化是按每张图像完成的,但不是按批处理或通道完成的。

参数:

  • inputs:一个形状' [batch_size, height, width, channels] '的4-D张量,如果' data_format '是' NHWC ',那么' [batch_size, channels, height, width] '如果' data_format '是' NCHW '
  • kernel_size:计算op的池内核的长度2:[kernel_height, kernel_width]的列表。如果两个值相同,则可以是int
  • stride:一个长度为2的列表:[stride_height, stride_width]。如果两个步骤相同,则可以是int。注意,目前这两个步骤必须具有相同的值
  • padding:填充方法,要么“有效”,要么“相同”
  • data_format:一个字符串。支持' NHWC '(默认值)和' NCHW '
  • outputs_collections:将输出添加到其中的集合
  • scope:name_scope的可选作用域

返回值:

  • 表示池操作结果的“张量”

可能产生的异常:

  • ValueError: If `data_format` is neither `NHWC` nor `NCHW`.
  • ValueError: If 'kernel_size' is not a 2-D list

0 人点赞