diff --git a/mindspore/ops/composite/base.py b/mindspore/ops/composite/base.py index 9a267267f4..37c5f4a3c8 100644 --- a/mindspore/ops/composite/base.py +++ b/mindspore/ops/composite/base.py @@ -46,7 +46,10 @@ def add_flags(fn=None, **flags): Function, the function with added flags. Examples: - >>> add_flags(net, predit=True) + >>> net = Net(); + >>> net = add_flags(net, predit=True) + >>> print(hasattr(net, '_mindspore_flags')) + True """ def deco(fn): # need set the attr and access on c++ @@ -184,110 +187,111 @@ class GradOperation(GradOperation_): The higher-order function which takes a function as argument and returns gradient function for it. Examples: + >>> from mindspore.common import ParameterTuple >>> class Net(nn.Cell): - >>> def __init__(self): - >>> super(Net, self).__init__() - >>> self.matmul = P.MatMul() - >>> self.z = Parameter(Tensor(np.array([1.0], np.float32)), name='z') - >>> def construct(self, x, y): - >>> x = x * self.z - >>> out = self.matmul(x, y) - >>> return out - >>> + ... def __init__(self): + ... super(Net, self).__init__() + ... self.matmul = P.MatMul() + ... self.z = Parameter(Tensor(np.array([1.0], np.float32)), name='z') + ... def construct(self, x, y): + ... x = x * self.z + ... out = self.matmul(x, y) + ... return out + ... >>> class GradNetWrtX(nn.Cell): - >>> def __init__(self, net): - >>> super(GradNetWrtX, self).__init__() - >>> self.net = net - >>> self.grad_op = GradOperation() - >>> def construct(self, x, y): - >>> gradient_function = self.grad_op(self.net) - >>> return gradient_function(x, y) - >>> + ... def __init__(self, net): + ... super(GradNetWrtX, self).__init__() + ... self.net = net + ... self.grad_op = GradOperation() + ... def construct(self, x, y): + ... gradient_function = self.grad_op(self.net) + ... return gradient_function(x, y) + ... >>> x = Tensor([[0.5, 0.6, 0.4], [1.2, 1.3, 1.1]], dtype=mstype.float32) >>> y = Tensor([[0.01, 0.3, 1.1], [0.1, 0.2, 1.3], [2.1, 1.2, 3.3]], dtype=mstype.float32) >>> output = GradNetWrtX(Net())(x, y) >>> print(output) - Tensor(shape=[2, 3], dtype=Float32, [[1.4100001 1.5999999 6.6 ] - [1.4100001 1.5999999 6.6 ]]) + [1.4100001 1.5999999 6.6 ]] >>> >>> class GradNetWrtXY(nn.Cell): - >>> def __init__(self, net): - >>> super(GradNetWrtXY, self).__init__() - >>> self.net = net - >>> self.grad_op = GradOperation(get_all=True) - >>> def construct(self, x, y): - >>> gradient_function = self.grad_op(self.net) - >>> return gradient_function(x, y) + ... def __init__(self, net): + ... super(GradNetWrtXY, self).__init__() + ... self.net = net + ... self.grad_op = GradOperation(get_all=True) + ... def construct(self, x, y): + ... gradient_function = self.grad_op(self.net) + ... return gradient_function(x, y) >>> >>> x = Tensor([[0.8, 0.6, 0.2], [1.8, 1.3, 1.1]], dtype=mstype.float32) >>> y = Tensor([[0.11, 3.3, 1.1], [1.1, 0.2, 1.4], [1.1, 2.2, 0.3]], dtype=mstype.float32) >>> output = GradNetWrtXY(Net())(x, y) >>> print(output) - (Tensor(shape=[2, 3], dtype=Float32, - [[4.5099998 2.7 3.6000001] - [4.5099998 2.7 3.6000001]]), Tensor(shape=[3, 3], dtype=Float32, - [[2.6 2.6 2.6 ] - [1.9 1.9 1.9 ] - [1.3000001 1.3000001 1.3000001]])) + (Tensor(shape=[2, 3], dtype=Float32, value= + [[ 4.50999975e+00, 2.70000005e+00, 3.60000014e+00], + [ 4.50999975e+00, 2.70000005e+00, 3.60000014e+00]]), Tensor(shape=[3, 3], dtype=Float32, value= + [[ 2.59999990e+00, 2.59999990e+00, 2.59999990e+00], + [ 1.89999998e+00, 1.89999998e+00, 1.89999998e+00], + [ 1.30000007e+00, 1.30000007e+00, 1.30000007e+00]])) >>> >>> class GradNetWrtXYWithSensParam(nn.Cell): - >>> def __init__(self, net): - >>> super(GradNetWrtXYWithSensParam, self).__init__() - >>> self.net = net - >>> self.grad_op = GradOperation(get_all=True, sens_param=True) - >>> self.grad_wrt_output = Tensor([[0.1, 0.6, 0.2], [0.8, 1.3, 1.1]], dtype=mstype.float32) - >>> def construct(self, x, y): - >>> gradient_function = self.grad_op(self.net) - >>> return gradient_function(x, y, self.grad_wrt_output) + ... def __init__(self, net): + ... super(GradNetWrtXYWithSensParam, self).__init__() + ... self.net = net + ... self.grad_op = GradOperation(get_all=True, sens_param=True) + ... self.grad_wrt_output = Tensor([[0.1, 0.6, 0.2], [0.8, 1.3, 1.1]], dtype=mstype.float32) + ... def construct(self, x, y): + ... gradient_function = self.grad_op(self.net) + ... return gradient_function(x, y, self.grad_wrt_output) >>> >>> x = Tensor([[0.8, 0.6, 0.2], [1.8, 1.3, 1.1]], dtype=mstype.float32) >>> y = Tensor([[0.11, 3.3, 1.1], [1.1, 0.2, 1.4], [1.1, 2.2, 0.3]], dtype=mstype.float32) >>> output = GradNetWrtXYWithSensParam(Net())(x, y) >>> print(output) - (Tensor(shape=[2, 3], dtype=Float32, - [[2.211 0.51 1.4900001] - [5.588 2.68 4.07 ]]), Tensor(shape=[3, 3], dtype=Float32, - [[1.52 2.82 2.14 ] - [1.1 2.05 1.55 ] - [0.90000004 1.55 1.25 ]])) + (Tensor(shape=[2, 3], dtype=Float32, value= + [[ 2.21099997e+00, 5.09999990e-01, 1.49000001e+00], + [ 5.58799982e+00, 2.68000007e+00, 4.07000017e+00]]), Tensor(shape=[3, 3], dtype=Float32, value= + [[ 1.51999998e+00, 2.81999993e+00, 2.14000010e+00], + [ 1.09999990e+00, 2.04999971e+00, 1.54999995e+00], + [ 9.00000036e-01, 1.54999995e+00, 1.25000000e+00]])) >>> >>> class GradNetWithWrtParams(nn.Cell): - >>> def __init__(self, net): - >>> super(GradNetWithWrtParams, self).__init__() - >>> self.net = net - >>> self.params = ParameterTuple(net.trainable_params()) - >>> self.grad_op = GradOperation(get_by_list=True) - >>> def construct(self, x, y): - >>> gradient_function = self.grad_op(self.net, self.params) - >>> return gradient_function(x, y) + ... def __init__(self, net): + ... super(GradNetWithWrtParams, self).__init__() + ... self.net = net + ... self.params = ParameterTuple(net.trainable_params()) + ... self.grad_op = GradOperation(get_by_list=True) + ... def construct(self, x, y): + ... gradient_function = self.grad_op(self.net, self.params) + ... return gradient_function(x, y) >>> >>> x = Tensor([[0.8, 0.6, 0.2], [1.8, 1.3, 1.1]], dtype=mstype.float32) >>> y = Tensor([[0.11, 3.3, 1.1], [1.1, 0.2, 1.4], [1.1, 2.2, 0.3]], dtype=mstype.float32) >>> output = GradNetWithWrtParams(Net())(x, y) >>> print(output) - (Tensor(shape=[1], dtype=Float32, [21.536]),) + (Tensor(shape=[1], dtype=Float32, value= [ 2.15359993e+01]),) >>> >>> class GradNetWrtInputsAndParams(nn.Cell): - >>> def __init__(self, net): - >>> super(GradNetWrtInputsAndParams, self).__init__() - >>> self.net = net - >>> self.params = ParameterTuple(net.trainable_params()) - >>> self.grad_op = GradOperation(get_all=True, get_by_list=True) - >>> def construct(self, x, y): - >>> gradient_function = self.grad_op(self.net, self.params) - >>> return gradient_function(x, y) + ... def __init__(self, net): + ... super(GradNetWrtInputsAndParams, self).__init__() + ... self.net = net + ... self.params = ParameterTuple(net.trainable_params()) + ... self.grad_op = GradOperation(get_all=True, get_by_list=True) + ... def construct(self, x, y): + ... gradient_function = self.grad_op(self.net, self.params) + ... return gradient_function(x, y) >>> >>> x = Tensor([[0.1, 0.6, 1.2], [0.5, 1.3, 0.1]], dtype=mstype.float32) >>> y = Tensor([[0.12, 2.3, 1.1], [1.3, 0.2, 2.4], [0.1, 2.2, 0.3]], dtype=mstype.float32) >>> output = GradNetWrtInputsAndParams(Net())(x, y) >>> print(output) - ((Tensor(shape=[2, 3], dtype=Float32, - [[3.52 3.9 2.6 ] - [3.52 3.9 2.6 ]]), Tensor(shape=[3, 3], dtype=Float32, - [[0.6 0.6 0.6 ] - [1.9 1.9 1.9 ] - [1.3000001 1.3000001 1.3000001]])), (Tensor(shape=[1], dtype=Float32, [12.902]),)) + ((Tensor(shape=[2, 3], dtype=Float32, value= + [[ 3.51999998e+00, 3.90000010e+00, 2.59999990e+00], + [ 3.51999998e+00, 3.90000010e+00, 2.59999990e+00]]), Tensor(shape=[3, 3], dtype=Float32, value= + [[ 6.00000024e-01, 6.00000024e-01, 6.00000024e-01], + [ 1.89999998e+00, 1.89999998e+00, 1.89999998e+00], + [ 1.30000007e+00, 1.30000007e+00, 1.30000007e+00]])), (Tensor(shape=[1], dtype=Float32, value= + [ 1.29020004e+01]),)) """ def __init__(self, get_all=False, get_by_list=False, sens_param=False): @@ -379,22 +383,20 @@ class MultitypeFuncGraph(MultitypeFuncGraph_): >>> from mindspore.ops import Primitive, operations as P >>> from mindspore import dtype as mstype >>> - >>> scala_add = Primitive('scala_add') >>> tensor_add = P.TensorAdd() - >>> >>> add = MultitypeFuncGraph('add') >>> @add.register("Number", "Number") ... def add_scala(x, y): - ... return scala_add(x, y) + ... return x + y >>> @add.register("Tensor", "Tensor") ... def add_tensor(x, y): ... return tensor_add(x, y) - >>> ourput = add(1, 2) + >>> output = add(1, 2) >>> print(output) 3 - >>> output = add(Tensor(1, mstype.float32), Tensor(2, mstype.float32)) + >>> output = add(Tensor([0.1, 0.6, 1.2], dtype=mstype.float32), Tensor([0.1, 0.6, 1.2], dtype=mstype.float32)) >>> print(output) - Tensor(shape=[], dtype=Float32, 3) + [0.2 1.2 2.4] """ def __init__(self, name, read_value=False): @@ -479,13 +481,13 @@ class HyperMap(HyperMap_): >>> common_map = HyperMap() >>> output = common_map(square, nest_tensor_list) >>> print(output) - ((Tensor(shape=[], dtype=Float32, 1), Tensor(shape=[], dtype=Float32, 4)), - (Tensor(shape=[], dtype=Float32, 9), Tensor(shape=[], dtype=Float32, 16)) + ((Tensor(shape=[], dtype=Float32, value= 1), Tensor(shape=[], dtype=Float32, value= 4)), + (Tensor(shape=[], dtype=Float32, value= 9), Tensor(shape=[], dtype=Float32, value= 16))) >>> square_map = HyperMap(square) >>> output = square_map(nest_tensor_list) >>> print(output) - ((Tensor(shape=[], dtype=Float32, 1), Tensor(shape=[], dtype=Float32, 4)), - (Tensor(shape=[], dtype=Float32, 9), Tensor(shape=[], dtype=Float32, 16)) + ((Tensor(shape=[], dtype=Float32, value= 1), Tensor(shape=[], dtype=Float32, value= 4)), + (Tensor(shape=[], dtype=Float32, value= 9), Tensor(shape=[], dtype=Float32, value= 16))) """ def __init__(self, ops=None): @@ -536,17 +538,19 @@ class Map(Map_): >>> >>> square = MultitypeFuncGraph('square') >>> @square.register("Tensor") - >>> def square_tensor(x): + ... def square_tensor(x): ... return F.square(x) >>> >>> common_map = Map() >>> output = common_map(square, tensor_list) >>> print(output) - (Tensor(shape=[], dtype=Float32, 1), Tensor(shape=[], dtype=Float32, 4), Tensor(shape=[], dtype=Float32, 9)) + (Tensor(shape=[], dtype=Float32, value= 1), Tensor(shape=[], dtype=Float32, value= 4), + Tensor(shape=[], dtype=Float32, value= 9)) >>> square_map = Map(square) >>> output = square_map(tensor_list) >>> print(output) - (Tensor(shape=[], dtype=Float32, 1), Tensor(shape=[], dtype=Float32, 4), Tensor(shape=[], dtype=Float32, 9)) + (Tensor(shape=[], dtype=Float32, value= 1), Tensor(shape=[], dtype=Float32, value= 4), + Tensor(shape=[], dtype=Float32, value= 9)) """ def __init__(self, ops=None):