def make_node( self, x, scale, bias, estimated_mean, estimated_variance, epsilon=1e-4 ): x = as_tensor_variable(x) scale = as_tensor_variable(scale) bias = as_tensor_variable(bias) estimated_mean = as_tensor_variable(estimated_mean) estimated_variance = as_tensor_variable(estimated_variance) epsilon = as_tensor_variable(epsilon) # Upcast to common dtype on the non-scalar # Keep as is dtype of scalar (epsilon) x, scale, bias, estimated_mean, estimated_variance = as_common_dtype( x, scale, bias, estimated_mean, estimated_variance ) assert ( x.ndim == scale.ndim == bias.ndim == estimated_mean.ndim == estimated_variance.ndim ) return Apply( self, [x, scale, bias, estimated_mean, estimated_variance, epsilon], [x.type()], )
def make_node( self, x, scale, bias, epsilon=1e-4, running_average_factor=0.1, running_mean=None, running_var=None, ): x = as_tensor_variable(x) scale = as_tensor_variable(scale) bias = as_tensor_variable(bias) epsilon = as_tensor_variable(epsilon) running_average_factor = as_tensor_variable(running_average_factor) if running_mean is not None: running_mean = as_tensor_variable(running_mean) if running_var is not None: running_var = as_tensor_variable(running_var) assert x.ndim == scale.ndim == bias.ndim assert (running_mean is None and running_var is None) or ( running_mean is not None and running_var is not None ) assert running_mean is None or running_mean.ndim == x.ndim assert running_var is None or running_var.ndim == x.ndim # Upcast to common dtype on the non-scalar # Keep as is dtype of scalar (epsilon and running_average_factor) if running_mean: x, scale, bias, running_mean, running_var = as_common_dtype( x, scale, bias, running_mean, running_var ) else: x, scale, bias = as_common_dtype(x, scale, bias) inputs = [x, scale, bias, epsilon, running_average_factor] output_types = [x.type(), scale.type(), scale.type()] if running_mean is not None and running_var is not None: inputs.append(running_mean) inputs.append(running_var) output_types.append(scale.type()) output_types.append(scale.type()) return Apply(self, inputs, output_types)
def make_node(self, x, dy, scale, x_mean, x_invstd, epsilon=1e-4): x = as_tensor_variable(x) dy = as_tensor_variable(dy) scale = as_tensor_variable(scale) x_mean = as_tensor_variable(x_mean) x_invstd = as_tensor_variable(x_invstd) epsilon = as_tensor_variable(epsilon) # Upcast to common dtype on the non-scalar # Keep as is dtype of scalar (epsilon) x, dy, scale, x_mean, x_invstd = as_common_dtype(x, dy, scale, x_mean, x_invstd) assert x.ndim == dy.ndim == scale.ndim == x_mean.ndim == x_invstd.ndim return Apply( self, [x, dy, scale, x_mean, x_invstd, epsilon], [x.type(), scale.type(), scale.type()], )