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