TensorFlow函数:tf.layers.BatchNormalization
tf.layers.BatchNormalization函数
BatchNormalization类
继承自: Layer
定义在:tensorflow/python/layers/normalization.py.
来自http://arxiv.org/abs/1502.03167的批处理规范化层.
批处理规范化指的是通过减少内部协变量转换来加速深度网络训练
参数:
- axis:应标准化的轴或轴的int列表,通常是轴的特征,例如,在一个具有data_format="channels_first"的Conv2D图层后面,设置axis=1.如果提供了轴列表,则axis中的每个轴将同时规范化;默认值是-1,它使用最后一个轴.注意:在使用多轴批处理范数的情况下,beta,gamma,moving_mean,和moving_variance变量与输入张量具有相同的秩,所有缩减(非轴)维度中的维度大小为1).
- momentum:移动平均值的动量.
- epsilon:添加到方差的小浮点数,以避免除以零.
- center:如果为True,则将beta的偏移量添加到标准化张量;如果为False,则忽略beta.
- scale:如果为True,则乘以gamma;如果为False,则不使用gamma.当下一层是线性的(例如,nn.relu)时,可以禁用此操作,因为缩放可以由下一层完成.
- beta_initializer:beta权重的初始值设定项.
- gamma_initializer:gamma权重的初始值设定项.
- moving_mean_initializer:移动平均值的初始值设定项.
- moving_variance_initializer:移动方差的初始值设定项.
- beta_regularizer:beta权重的可选正规化器.
- gamma_regularizer:gamma权重的可选正规化器.
- beta_constraint:由Optimizer更新后应用于beta权重的可选投影函数(例如,用于实现层权重的范数约束或值约束).该函数必须将未投影的变量作为输入,并且必须返回投影变量(必须具有相同的形状).在进行异步分布式培训时,使用约束是不安全的.
- gamma_constraint:由Optimizer更新后应用于gamma权重的可选投影功能.
- renorm:是否使用批量重规范化(https://arxiv.org/abs/1702.03275).这会在培训期间增加额外的变量;对于此参数的任一值,推断都是相同的.
- renorm_clipping:一个字典,可以将键'rmax','rmin','dmax'映射到用于剪辑重新校正的Tensors标量.校正(r, d)被用作corrected_value = normalized_value * r + d,其中,r的限幅为[RMIN,RMAX],d为[-dmax,DMAX];丢失的rmax,rmin,dmax分别设定为inf,0,inf.
- renorm_momentum:使用renorm将动量(momentum)用于更新移动手段和标准偏差;与动量不同的是,这会影响训练,既不会太小(会增加噪音)也不会太大(这会产生过时的估计);请注意,动量仍然应用于获取推理的均值和方差.
- fused:如果为None或者True,则尽可能使用更快,更融合的实现;如果为False,请使用系统推荐的实现.
- trainable:Boolean,如果为True,则还将变量添加到图集合GraphKeys.TRAINABLE_VARIABLES中(请参阅tf.Variable).
- virtual_batch_size:一个int,默认情况下,virtual_batch_size是None,这表示在整个批次中执行批量标准化.如果virtual_batch_size不是None,则执行“Ghost Batch Normalization”,创建虚拟子批次,每个子批次分别进行标准化(具有共享的gamma,beta和移动统计数据).必须在执行期间划分实际批量大小.
- adjustment:一个函数,它采用包含输入张量的(动态)形状Tensor并返回一对(scale, bias),以应用于标准化值(在gamma和beta之前),仅在训练期间;例如,如果axis == - 1,adjustment = lambda shape: ( tf.random_uniform(shape[-1:], 0.93, 1.07), tf.random_uniform(shape[-1:], -0.1, 0.1)),则将标准化值向上或向下缩放7%,然后将结果移动到最多0.1(对每个特征进行独立缩放和偏移,但在所有示例中共享),最后应用gamma或beta;如果为None,则不应用调整;如果指定了virtual_batch_size,则无法指定.
- name:字符串,图层的名称.
属性
- activity_regularizer
可选的正则化函数用于该层的输出.
- dtype
- graph
- input
检索图层的输入张量.
仅适用于图层只有一个输入的情况,即它是否连接到一个输入图层.
返回:
输入张量或输入张量列表.
可能引发的异常:
- AttributeError:如果图层连接到多个输入图层.
- RuntimeError:如果在Eager模式下调用.
- AttributeError:如果未找到入站节点.
- input_shape
检索图层的输入形状.
仅适用于图层只有一个输入,即它是否连接到一个传入层,或者所有输入具有相同形状的情况.
返回:
输入形状,作为整数形状元组(或形状元组列表,每个输入张量一个元组).
可能引发的异常:
- AttributeError:如果图层没有定义的input_shape.
- RuntimeError:如果在Eager模式下调用.
- losses
与此Layer相关的损失.
请注意,在急切执行时,获取此属性会计算正规则.使用图形执行时,已经创建了变量正则化运算,并且只是在这里返回.
返回:
张量列表.
- name
- non_trainable_variables
- non_trainable_weights
- output
检索图层的输出张量.
仅适用于图层只有一个输出,即它是否连接到一个输入层.
返回:
输出张量或输出张量列表.
可能引发的异常:
- AttributeError:如果图层连接到多个输入图层.
- RuntimeError:如果在Eager模式下调用.
- output_shape
检索图层的输出形状.
仅适用于图层具有一个输出,或者所有输出具有相同形状的情况.
返回:
输出形状,作为整数形状元组(或形状元组列表,每个输出张量一个元组).
可能引发的异常:
- AttributeError:如果图层没有定义的输出形状.
- RuntimeError:如果在Eager模式下调用.
- scope_name
- trainable_variables
- trainable_weights
- updates
- variables
返回所有图层变量/权重的列表.
返回:
变量列表.
- weights
返回所有图层变量/权重的列表.
返回:
变量列表.
方法
- __init__
__init__( axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer=tf.zeros_initializer(), gamma_initializer=tf.ones_initializer(), moving_mean_initializer=tf.zeros_initializer(), moving_variance_initializer=tf.ones_initializer(), beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None, renorm=False, renorm_clipping=None, renorm_momentum=0.99, fused=None, trainable=True, virtual_batch_size=None, adjustment=None, name=None, **kwargs )
初始化自我.
- __call__
__call__( inputs, *args, **kwargs )
包装call,应用预处理和后处理步骤.
参数:
- inputs:输入张量.
- *args:要传递给self.call的其他位置参数.
- **kwargs:要传递给self.call的其他关键字参数.注意:kwarg scope保留供图层使用.
返回:
输出张量.
注意:- 如果图层的call方法采用scope关键字参数,则此参数将自动设置为当前变量范围.- 如果图层的call方法采用mask参数(如某些Keras图层那样),则其默认值将设置为inputs前一层生成的蒙版(如果input确实来自生成相应蒙版的图层,即它是否来自具有掩蔽支持的Keras层).
可能引发的异常:
- ValueError:如果图层的call方法返回None(无效值).
- __deepcopy__
__deepcopy__(memo)
- add_loss
add_loss( losses, inputs=None )
添加损失张量,可能取决于图层输入.
一些损失(例如,活动正则化损失)可能取决于调用层时传递的输入.因此,当在不同的输入a和b上重用同一层时,在layer.losses中的一些条目可以取决于a而另外一些取决于b.此方法自动跟踪依赖性.
该get_losses_for方法允许检索与特定输入集相关的损失.
请注意,急切执行时不支持add_loss.相反,可以通过add_variable添加变量正则化器.不直接支持活动正规化(但可以从Layer.call()中返回此类损失).
参数:
- losses:损失张量,或张量/列表的张量.
- inputs:如果传递了除None以外的任何内容,则表示损失是以某些层的输入为条件的,因此它们只应在这些输入可用的地方运行.例如,活动正规化损失就是这种情况.如果None通过,则假定损失是无条件的,并且将应用于层的所有数据流(例如,权重正则化损失).
可能引发的异常:
- RuntimeError:如果在Eager模式下调用.
- add_update
add_update( updates, inputs=None )
添加更新操作,可能依赖于图层输入.
权重更新(例如,BatchNormalization层中移动均值和方差的更新)可能取决于调用图层时传递的输入.因此,当在不同的输入a和b上重用同一层时,在layer.updates中的一些条目可以取决于a而另外一些取决于b.此方法自动跟踪依赖性.
该get_updates_for方法允许检索与特定输入集相关的更新.
在Eager模式下忽略此调用.
参数:
- updates:更新操作,或更新操作的列表/元组.
- inputs:如果传递了除None之外的任何内容,则表示更新是以某些层的输入为条件的,因此它们只应在这些输入可用的地方运行.例如,BatchNormalization更新就是这种情况.如果为None,则无条件地考虑更新,并且您有责任确保它们可能具有的任何依赖性在运行时可用.步数计数器可能属于此类别.
- add_variable
add_variable( name, shape, dtype=None, initializer=None, regularizer=None, trainable=True, constraint=None, partitioner=None )
向图层添加新变量,或获取现有变量;返回它.
参数:
- name: 变量的名称.
- shape:变量的形状.
- dtype:变量的类型,默认为self.dtype或float32.
- initializer:初始化程序实例(可调用).
- regularizer:regularrizer实例(可调用).
- trainable:变量是否应该是图层的“trainable_variables”(例如,变量,偏差)或“non_trainable_variables”(例如,BatchNorm mean,stddev)的一部分.注意,如果当前变量范围被标记为不可训练,则忽略此参数,并且任何添加的变量也标记为不可训练.
- constraint:约束实例(可调用).
- partitioner:(可选)分区程序实例(可调用).如果提供,则在创建请求的变量时,它将根据partitioner分成多个分区.在这种情况下,返回一个PartitionedVariable实例.可用的分区包括tf.fixed_size_partitioner和tf.variable_axis_size_partitioner.
返回:
创建的变量.通常是一个Variable或一个ResourceVariable实例.如果partitioner不是None,则返回PartitionedVariable实例.
可能引发的异常:
- RuntimeError:如果使用分区变量正则化调用并且启用了急切执行.
- apply
apply( inputs, *args, **kwargs )
在输入上应用图层.
这只是包装self.__call__.
参数:
- inputs:输入张量.
- *args:要传递给self.call的其他位置参数.
- **kwargs:要传递给self.call的其他关键字参数.
返回:
输出张量.
- build
build(input_shape)
创建图层的变量.
- call
call( inputs, training=False )
图层的逻辑就在这里.
参数:
- inputs:输入张量.
- **kwargs:其他关键字参数.
返回:
输出张量.
- compute_output_shape
compute_output_shape(input_shape)
在给定输入形状的情况下计算图层的输出形状.
参数:
- input_shape:一个TensorShape(可能是嵌套的元组).它不需要完全定义(例如批量大小可能是未知的).
返回:
一个TensorShape(可能是嵌套的元组).
可能引发的异常:
- TypeError:如果input_shape不是TensorShape(可能是嵌套的元组).
- ValueError:如果input_shape不完整或与图层不兼容.
- count_params
count_params()
计算组成权重的标量总数.
返回:
整数计数.
可能引发的异常:
- ValueError:如果尚未构建图层(在这种情况下,其权重尚未定义).
- get_input_at
get_input_at(node_index)
检索给定节点处的层的输入张量.
参数:
- node_index:Integer,从中检索属性的节点的索引.例如,node_index=0将对应于第一次调用图层.
返回:
张量(如果图层有多个输入,则为张量列表).
可能引发的异常:
- RuntimeError:如果在Eager模式下调用.
- get_input_shape_at
get_input_shape_at(node_index)
检索给定节点处的图层的输入形状.
参数:
- node_index:Integer,从中检索属性的节点的索引.例如,node_index=0将对应于第一次调用图层.
返回:
形状元组(如果图层有多个输入,则为形状元组列表).
可能引发的异常:
- RuntimeError:如果在Eager模式下调用.
- get_losses_for
get_losses_for(inputs)
检索与特定输入集相关的损失.
参数:
- inputs:输入张量或输入张量的列表/元组.
返回:
依赖于inputs的层的损失张量列表.
可能引发的异常:
- RuntimeError:如果在Eager模式下调用.
- get_output_at
get_output_at(node_index)
检索给定节点处的图层的输出张量.
参数:
- node_index:Integer,从中检索属性的节点的索引.例如,node_index=0将对应于第一次调用图层.
返回:
张量(如果图层有多个输出,则为张量列表).
可能引发的异常:
- RuntimeError:如果在Eager模式下调用.
- get_output_shape_at
get_output_shape_at(node_index)
检索给定节点处图层的输出形状.
参数:
- node_index:Integer,从中检索属性的节点的索引.例如,node_index=0将对应于第一次调用图层.
返回:
形状元组(如果图层具有多个输出,则为形状元组列表).
可能引发的异常:
- RuntimeError:如果在Eager模式下调用.
- get_updates_for
get_updates_for(inputs)
检索与特定输入集相关的更新.
参数:
- inputs:输入张量或输入张量的列表/元组.
返回:
依赖于inputs的层的更新操作列表.
可能引发的异常:
- RuntimeError:如果在Eager模式下调用.