Example #1
0
def get_reduction_of_data(aggregation_name, tensor_data, tensor_name, abs=False):
    reduction_name = aggregation_name
    # If tensor_data is of np.ndarray type invoke np operators.
    if isinstance(tensor_data, np.ndarray):
        return get_numpy_reduction(reduction_name, tensor_data, abs)
    if abs:
        tensor_data = mx.ndarray.abs(tensor_data)

    if reduction_name in ALLOWED_REDUCTIONS:
        if hasattr(mx.ndarray, aggregation_name):
            f = getattr(mx.ndarray, aggregation_name)
            op = f(tensor_data, name=tensor_name)
        else:
            # If aggregation is not supported by mxnet, we convert data into np.ndarray and invoke numpy operators
            tensor_data_np = make_numpy_array(tensor_data)
            op = get_numpy_reduction(aggregation_name, numpy_data=tensor_data_np, abs=abs)
        return op
    elif reduction_name in ALLOWED_NORMS:
        if reduction_name in ["l1", "l2"]:
            op = mx.ndarray.norm(data=tensor_data, ord=int(reduction_name[1]))
            return op
        else:
            raise RuntimeError(
                "Invalid normalization operation {0} for mx.NDArray".format(reduction_name)
            )
    elif hasattr(mx, reduction_name):
        f = getattr(mx, reduction_name)
        op = f(tensor_data, name=tensor_name)
        return op
    elif hasattr(np, aggregation_name):
        f = getattr(np, aggregation_name)
        op = f(tensor_data)
        return op
    raise RuntimeError("Invalid aggregation_name {0} for mx.NDArray".format(aggregation_name))
Example #2
0
def get_reduction_of_data(reduction_name, tensor_data, tensor_name, abs=False):
    if isinstance(tensor_data, np.ndarray):
        return get_numpy_reduction(reduction_name, tensor_data, abs)
    if abs:
        tensor_data = torch.abs(tensor_data)

    if reduction_name in ALLOWED_REDUCTIONS:
        if reduction_name == "variance":
            reduction_name = "var"
        assert hasattr(torch.Tensor, reduction_name)
        f = getattr(torch.Tensor, reduction_name)
        op = f(tensor_data)
        return op
    elif reduction_name in ALLOWED_NORMS:
        if reduction_name in ["l1", "l2"]:
            ord = int(reduction_name[1])
        else:
            raise RuntimeError(
                "Invalid normalization operation {0} for torch.Tensor".format(
                    reduction_name))
        op = torch.norm(tensor_data, p=ord)
        return op
    elif hasattr(torch, reduction_name):
        f = getattr(torch, reduction_name)
        op = f(tensor_data)
        return op
    raise RuntimeError("Invalid reduction_name {0}".format(reduction_name))
Example #3
0
 def _get_reduction_of_data(reduction_name, tensor_value, tensor_name, abs):
     return get_numpy_reduction(reduction_name, tensor_value, abs)
Example #4
0
 def _get_reduction_of_data(reduction_name, tensor_value, tensor_name, abs):
     if hasattr(tensor_value, "numpy"):
         tensor_value = tensor_value.numpy()
     return get_numpy_reduction(reduction_name, tensor_value, abs)