def Setup(self, bottom): super(NormalizeLayer, self).Setup(bottom) norm_out = [ops.L2Norm(bottom[0], **self._l2norm_param)] scale_out = ops.Scale( norm_out + [blob['data'] for blob in self.scale_blobs], **self._scale_param) return scale_out
def batch_normalization(x, mean, variance, offset, scale, decay=0.9, variance_epsilon=1e-3, use_global_stats=-1, name=None): norm_x = ops.BatchNorm([x, mean, variance], decay, variance_epsilon, use_global_stats, name=name) return ops.Scale([norm_x, scale, offset], name=name + '_scale' if name is not None else name)
def batch_norm_with_global_normalization(t, m, v, beta, gamma, decay=0.9, variance_epsilon=1e-3, scale_after_normalization=True, use_global_stats=-1, name=None): norm_x = ops.BatchNorm([t, m, v], decay, variance_epsilon, use_global_stats, name=name) if scale_after_normalization: return ops.Scale([norm_x, gamma, beta], name=name + '_scale' if name is not None else name) else: return norm_x
def call(self, inputs, training=False): use_stats = 0 if training else 1 if self.fused: return ops.FusedBatchNorm([ inputs, self.moving_mean, self.moving_variance, self.gamma, self.beta ], axis=self.axis, momentum=self.momentum, eps=self.epsilon, use_stats=use_stats, mode='DEFAULT') x_norm = ops.BatchNorm( [inputs, self.moving_mean, self.moving_variance], axis=self.axis, momentum=self.momentum, eps=self.epsilon, use_stats=use_stats, mode='DEFAULT') if self.gamma is not None: # use scale if self.beta is not None: return ops.Scale([x_norm, self.gamma, self.beta], axis=self.axis, num_axes=1) else: return ops.Scale([x_norm, self.gamma], axis=self.axis, num_axes=1) else: # do not use scale if self.beta is not None: return ops.BiasAdd([x_norm, self.beta], data_format=self._data_format) else: return x_norm
def Setup(self, bottom): super(ScaleLayer, self).Setup(bottom) return ops.Scale(bottom + [blob['data'] for blob in self._blobs], **self._param)