Layer naive

``````

In [9]:

class MulLayer:
def __init__(self):
self.x = None
self.y = None

def forward(self, x, y):
self.x = x
self.y = y
out = x * y
return out

def backward(self, dout):
dx = dout * self.y
dy = dout * self.x
return dx, dy

``````
``````

In [10]:

def __init__(self):
pass

def forward(self, x, y):
out = x + y
return out

def backward(self, dout):
dx = dout * 1
dy = dout * 1
return dx, dy

``````

``````

In [11]:

apple = 100
apple_num = 2
tax = 1.1

# layer
mul_apple_layer = MulLayer()
mul_tax_layer = MulLayer()

# Forward
apple_price = mul_apple_layer.forward(apple, apple_num)
price = mul_tax_layer.forward(apple_price, tax)

print(price)

# Backward
dprice = 1
dapple_price, dtax = mul_tax_layer.backward(dprice)
dapple, dapple_num = mul_apple_layer.backward(dapple_price)

print(dapple, dapple_num, dtax)

``````
``````

220.00000000000003
2.2 110.00000000000001 200

``````

``````

In [12]:

apple = 100
apple_num = 2
orange = 150
orange_num = 3
tax = 1.1

# layer
mul_apple_layer = MulLayer()
mul_orange_layer = MulLayer()
mul_tax_layer = MulLayer()

# Forward
apple_price = mul_apple_layer.forward(apple, apple_num)
orange_price = mul_orange_layer.forward(orange, orange_num)
price = mul_tax_layer.forward(all_price, tax)

print(price)

# Backward
dprice = 1
dall_price, dtax = mul_tax_layer.backward(dprice)
dorange, dorange_num = mul_orange_layer.backward(dorange_price)
dapple, dapple_num = mul_apple_layer.backward(dapple_price)

print(dapple, dapple_num, dorange, dorange_num, dtax)

``````
``````

715.0000000000001
2.2 110.00000000000001 3.3000000000000003 165.0 650

``````