|
- import numpy as np
- import mindspore.context as context
- from mindspore import Tensor, Parameter
- from mindspore.nn import Cell, Composite
- from mindspore.ops import operations as P
- import mindspore.ops.composite as C
- import logging
-
- log = logging.getLogger("ME")
- log.setLevel(level=logging.DEBUG)
- context.set_context(mode=context.GRAPH_MODE, save_graphs=True, device_target="Ascend")
-
- class Sigmoid(Composite):
- def __init__(self):
- super(Sigmoid, self).__init__()
- self.neg = P.Neg()
- self.exp = P.Exp()
- self.div = P.Div()
-
- def construct(self, x):
- neg_val = self.neg(x)
- exp_val = self.exp(neg_val)
- sigmoid = 1.0 / (1.0 + exp_val)
- return sigmoid
-
-
- class Net(Cell):
- def __init__(self):
- super(Net, self).__init__()
- self.sigmoid = Sigmoid()
- self.exp = P.Exp()
-
- def construct(self, x):
- return self.sigmoid(x) * self.exp(x)
-
- class NetComposite(Composite):
- def __init__(self):
- super(NetComposite, self).__init__()
- self.sigmoid = Sigmoid()
- self.exp = P.Exp()
-
- def construct(self, x):
- return self.sigmoid(x) * self.exp(x)
-
- class Net1(Cell):
- def __init__(self):
- super(Net1, self).__init__()
- self.exp = P.Exp()
-
- def construct(self, x):
- return self.exp(x)
-
- class NetComposite1(Composite):
- def __init__(self):
- super(NetComposite1, self).__init__()
- self.net = Net1()
- self.exp = P.Exp()
-
- def construct(self, x):
- return self.exp(x) * self.net(x)
-
- class Net_grad(Cell):
- def __init__(self):
- super(Net_grad, self).__init__()
- self.sigmoid = Sigmoid()
- self.exp = P.Exp()
-
- def construct(self, x, dout):
- dout = C.grad_with_sens(self.sigmoid)(x, dout)
- #out = self.sigmoid(x)
- return dout
-
-
- def vm_impl(x):
- return (1.0 / (1.0 + np.exp(-x))) * np.exp(x)
-
- def vm_sigmoid(x):
- return 1.0 / (1.0 + np.exp(-x))
-
-
- # composite not inline funcGraph
- def test_composite_sigmoid1():
- x = np.random.normal(0, 1, [2, 3]).astype(np.float32)
- net = Net()
- result = net(Tensor(x))
- vm_result = vm_impl(x)
- print("=======================================")
- print("x: {}".format(x))
- print("result: {}".format(result))
- print("vm_result: {}".format(vm_result))
- print("=======================================")
-
- # composite inline composite
- def test_composite_sigmoid2():
- x = Tensor(np.random.normal(0, 1, [2, 3]).astype(np.float32))
- net = NetComposite()
- result = net(x)
- print("=======================================")
- print(result)
- print("=======================================")
-
- # composite inline func
- def test_composite_sigmoid3():
- x = Tensor(np.random.normal(0, 1, [2, 3]).astype(np.float32))
- net = NetComposite1()
- result = net(x)
- print("=======================================")
- print(result)
- print("=======================================")
-
-
- def test_composite_sigmoid_grad():
- x = np.random.normal(0, 1, [2, 3]).astype(np.float32)
- dout = np.random.normal(0, 1, [2, 3]).astype(np.float32)
- net = Net_grad()
- result = net(Tensor(x), Tensor(dout))
- print("=======================================")
- print("x: {}".format(x))
- print("result: {}".format(result))
- print("=======================================")
-
- test_composite_sigmoid1()
-
- test_composite_sigmoid_grad()
|