def _typecheck_input(x1_type, x2_type): """ Check input tensor types to be valid and confirm they are the same type. """ const_utils.check_valid_type(x1_type, [mstype.float32, mstype.float16], 'x1') const_utils.check_valid_type(x2_type, [mstype.float32, mstype.float16], 'x2') if x1_type != x2_type: raise TypeError( f'Both Inputs must be the same Type. x1 is \'{x1_type}\' and x2 is \'{x2_type}\' ' )
def repeat_elements(x, rep, axis=0): """ Repeat elements of a tensor along an axis, like np.repeat. Args: - **x** (Tensor) - The tensor to repeat values for. Must be of type: float16, float32, int8, uint8, int16, int32, or int64. - **rep** (int) - The number of times to repeat, must be positive, required. - **axis** (int) - The axis along which to repeat, default 0. Outputs: One tensor with values repeated along the specified axis. If x has shape (s1, s2, ..., sn) and axis is i, the output will have shape (s1, s2, ..., si * rep, ..., sn). The output type will be the same as the type of `x`. Supported Platforms: ``Ascend`` ``GPU`` ``CPU`` Examples: >>> x = Tensor(np.array([[0, 1, 2], [3, 4, 5]]), mindspore.int32) >>> output = C.repeat_elements(x, rep = 2, axis = 0) >>> print(output) [[0 1 2] [0 1 2] [3 4 5] [3 4 5]] """ const_utils.check_valid_type(F.dtype(x), mstype.number_type, 'input x') rep = _check_positive_int(rep, "rep", "repeat_elements") axis = _check_is_int(axis, "axis", "repeat_elements") shape_op = P.Shape() rank_op = P.Rank() tile_op = P.Tile() expand_dims_op = P.ExpandDims() reshape_op = P.Reshape() x_rank = rank_op(x) axis = _check_axis_range(axis, x_rank, "axis", "repeat_elements") expand_axis = axis + 1 x_expand = expand_dims_op(x, expand_axis) rep_dims = _cal_repeat_dims(x_rank, rep, expand_axis) x_expand = tile_op(x_expand, rep_dims) x_shape = shape_op(x) x_reshape = _cal_reshape(x_shape, rep, axis) x_rep = reshape_op(x_expand, x_reshape) return x_rep
def count_nonzero(x, axis=(), keep_dims=False, dtype=mstype.int32): """ Count number of nonzero elements across axis of input tensor Args: x (Tensor): Input data is used to count non-zero numbers. axis (Union[int, tuple(int), list(int)]): The dimensions to reduce. Only constant value is allowed. Default: (), reduce all dimensions. keep_dims (bool): If true, keep these reduced dimensions and the length is 1. If false, don't keep these dimensions. Default: False. dtype (Union[Number, mstype.bool_]): The data type of the output tensor. Only constant value is allowed. Default: mstype.int32 Returns: Tensor, number of nonzero element. The data type is dtype. Supported Platforms: ``Ascend`` ``GPU`` Examples: >>> input_x = Tensor(np.array([[0, 1, 0], [1, 1, 0]]).astype(np.float32)) >>> nonzero_num = count_nonzero(x=input_x, axis=[0, 1], keep_dims=True, dtype=mstype.int32) >>> print(nonzero_num) [[3]] """ const_utils.check_valid_type(F.dtype(x), mstype.number_type, 'input x') axis = _check_validate_axis(axis, "count_nonzero") keep_dims = _check_validate_keepdims(keep_dims, "count_nonzero") const_utils.check_valid_type(dtype, mstype.number_type + (mstype.bool_, ), 'dtype') not_equal = P.NotEqual() cast = P.Cast() reduce_sum = P.ReduceSum(keep_dims) nonzero_bool = not_equal(x, 0) # ReduceSum only support float16 or float32 tensor. nonzero_val = cast(nonzero_bool, mstype.float16) nonzero_num = cast(reduce_sum(nonzero_val, axis), dtype) return nonzero_num
def construct(self, weights): const_utils.check_valid_type(weights.dtype, mstype.number_type, 'weights') l1_regularization = self.scale * self.reduce_sum(self.abs(weights)) return l1_regularization