参考 tensorflow中的slim函数集合 - 云+社区 - 腾讯云
目录
slim.get_trainable_variables()
slim.get_or_create_global_step()
slim.variance_scaling_initializer()
- def get_model_variables(scope=None, suffix=None):
-
- return get_variables(scope, suffix, ops.GraphKeys.MODEL_VARIABLES)
获取按范围和/或后缀过滤的模型变量列表。
参数:
返回值:
- def get_trainable_variables(scope=None, suffix=None):
-
- return get_variables(scope, suffix, ops.GraphKeys.TRAINABLE_VARIABLES)
获取按范围和/或后缀过滤可训练变量列表。
参数:
返回值:
- 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)
参数众多,其中重要的有:
- 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)
添加一个完全连接的层。“fully_connected”创建一个名为“weights”的变量,表示一个完全连接的权重矩阵,该矩阵乘以“输入”,生成一个隐藏单元的“张量”。如果提供了' normalizer_fn '(例如' batch_norm '),则应用它。否则,如果‘normalizer_fn’为None,并且提供了一个‘biases_initializer’,那么就会创建一个‘bias’变量,并添加隐藏的单元。最后,如果“activation_fn”不是“None”,那么它也应用于隐藏单元。注意:如果“输入”的秩大于2,那么“输入”在初始矩阵乘以“权重”之前是平坦的。
参数:
返回值:
可能产生的异常:
softmax(logits, scope=None)
对n维logit张量的第n维执行softmax。对于二维logits,这可以归结为tf.n .softmax。第n个维度需要具有指定数量的元素(类的数量)。
参数:
返回值:
- def get_model_variables(scope=None, suffix=None):
-
- return get_variables(scope, suffix, ops.GraphKeys.MODEL_VARIABLES)
获取按范围和/或后缀过滤的模型变量列表。
参数:
返回值:
get_or_create_global_step()
返回并创建(必要时)全局阶跃张量。
参数:
graph:用来创建全局阶跃张量的图。如果丢失,使用默认的图。
返回值:
- 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集合的默认参数。
参数:
返回值:
可能产生的异常:
- 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))’。
参数:
返回值:
可能产生的异常:
- 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值有助于防止训练数据过度拟合。
参数:
返回值:
可能产生的异常:
在保持batch_size的同时,将输入压扁。假设第一个维度表示批处理。
- 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)
参数:
返回值:
可能产生的异常:
- 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最大池化操作,它假设池化是按每张图像完成的,但不是按批处理或通道完成的。
参数:
返回值:
可能产生的异常: