/usr/local/lib64/python3.6/site-packages/caffe2/python/layers
NameSizeModeActions
__pycache__/-0755rm
adaptive_weight.py56870644editdlrm
add_bias.py13960644editdlrm
arc_cosine_feature_map.py73450644editdlrm
batch_huber_loss.py35230644editdlrm
batch_lr_loss.py115770644editdlrm
batch_mse_loss.py23330644editdlrm
batch_normalization.py38230644editdlrm
batch_sigmoid_cross_entropy_loss.py14830644editdlrm
batch_softmax_loss.py45800644editdlrm
blob_weighted_sum.py22190644editdlrm
bpr_loss.py14990644editdlrm
bucket_weighted.py23550644editdlrm
build_index.py19370644editdlrm
concat.py48490644editdlrm
constant_weight.py12080644editdlrm
conv.py50500644editdlrm
dropout.py14100644editdlrm
fc.py92960644editdlrm
fc_without_bias.py19540644editdlrm
fc_with_bootstrap.py127880644editdlrm
feature_sparse_to_dense.py143610644editdlrm
functional.py48750644editdlrm
gather_record.py32600644editdlrm
homotopy_weight.py43060644editdlrm
label_smooth.py35070644editdlrm
last_n_window_collector.py23920644editdlrm
layers.py174120644editdlrm
layer_normalization.py42910644editdlrm
margin_rank_loss.py19510644editdlrm
merge_id_lists.py15000644editdlrm
pairwise_similarity.py35490644editdlrm
position_weighted.py20660644editdlrm
random_fourier_features.py31870644editdlrm
reservoir_sampling.py30130644editdlrm
sampling_train.py22100644editdlrm
sampling_trainable_mixin.py13660644editdlrm
select_record_by_context.py23810644editdlrm
semi_random_features.py58090644editdlrm
sparse_dropout_with_replacement.py39430644editdlrm
sparse_feature_hash.py46180644editdlrm
sparse_itemwise_dropout_with_replacement.py39440644editdlrm
sparse_lookup.py221700644editdlrm
split.py22570644editdlrm
tags.py41140644editdlrm
uniform_sampling.py27790644editdlrm
__init__.py9430644editdlrm
Edit: /usr/local/lib64/python3.6/site-packages/caffe2/python/layers/layer_normalization.py (4291B)
from caffe2.python import schema from caffe2.python.layers.layers import ModelLayer import numpy as np class LayerNormalization(ModelLayer): def __init__( self, model, input_record, name='layer_normalization', scale_optim=None, bias_optim=None, epsilon=1e-4, axis=1, use_layer_norm_op=True, scale_init_value=1.0, **kwargs ): super(LayerNormalization, self).__init__( model, name, input_record, **kwargs) assert isinstance(input_record, schema.Scalar), ( "Incorrect input type: {}".format(input_record)) self.input_shape = input_record.field_type().shape self.axis = axis assert len(self.input_shape) >= 1, ( "This layer supports only >= 2D tensors") input_dims = self.input_shape[0] self.output_schema = schema.Scalar( (np.float32, self.input_shape), self.get_next_blob_reference('output') ) self.scale = self.create_param(param_name='scale', shape=[input_dims], initializer=('ConstantFill', {'value': scale_init_value}), optimizer=scale_optim) self.bias = self.create_param(param_name='bias', shape=[input_dims], initializer=('ConstantFill', {'value': 0.0}), optimizer=bias_optim) self.use_layer_norm_op = use_layer_norm_op if self.use_layer_norm_op: self.epsilon = epsilon else: assert len(self.input_shape) == 1, ( "When using alternative implementation, " "input data can only be 2D" ) self.epsilon = model.maybe_add_global_constant( "%s_epsilon" % self.name, float(epsilon) ) def add_ops_with_layer_norm_op(self, net): input_blob = self.input_record.field_blobs() ln_output = self.output_schema.field_blobs() output_blobs = [net.NextScopedBlob('ln_output'), net.NextScopedBlob('ln_mean'), net.NextScopedBlob('ln_stdev')] normalized, mean, stdev = net.LayerNorm(input_blob, output_blobs, axis=self.axis, epsilon=self.epsilon) scaled = net.Mul( [normalized, self.scale], [net.NextScopedBlob('ln_scaled')], broadcast=1, axis=self.axis, ) net.Add( [scaled, self.bias], ln_output, broadcast=1, axis=self.axis, ) def add_ops_without_layer_norm_op(self, net): # two issues here: # 1. use multiple ops to replace the function of LayerNorm # 2. do not use legacy broadcast ln_output = net.NextScopedBlob("ln_output") ln_mean = net.NextScopedBlob("ln_mean") ln_stdev = net.NextScopedBlob("ln_stdev") ln_mean_arr = net.NextScopedBlob("ln_mean_arr") net.ReduceBackMean(self.input_record.field_blobs(), [ln_mean_arr]) net.ExpandDims([ln_mean_arr], [ln_mean], dims=[1]) ln_centered = net.NextScopedBlob("ln_centered") net.Sub(self.input_record.field_blobs() + [ln_mean], [ln_centered]) ln_sqr = net.NextScopedBlob("ln_sqr") net.Sqr([ln_centered], [ln_sqr]) ln_sqr_mean = net.NextScopedBlob("ln_sqr_mean") net.ReduceBackMean([ln_sqr], [ln_sqr_mean]) ln_var = net.NextScopedBlob("ln_var") net.Add([ln_sqr_mean, self.epsilon], ln_var) ln_std_arr = net.NextScopedBlob("ln_std_arr") net.Pow([ln_var], [ln_std_arr], exponent=0.5) net.ExpandDims([ln_std_arr], [ln_stdev], dims=[1]) net.Div([ln_centered, ln_stdev], [ln_output]) ln_scaled = net.NextScopedBlob("ln_scaled") net.Mul([ln_output, self.scale], [ln_scaled]) net.Add([ln_scaled, self.bias], self.output_schema.field_blobs()) def add_ops(self, net): if self.use_layer_norm_op: self.add_ops_with_layer_norm_op(net) else: self.add_ops_without_layer_norm_op(net)