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()
返回并创建(必要时)全局阶跃张量。
参数:
返回值:
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最大池化操作,它假设池化是按每张图像完成的,但不是按批处理或通道完成的。
参数:
返回值:
可能产生的异常: