mutable struct MulLayer
x
y
(::Type{MulLayer})() = new()
end
function forward(self::MulLayer, x, y)
self.x = x
self.y = y
out = x * y
return out
end
forward (generic function with 1 method)
function backward(self::MulLayer, dout)
dx = dout * self.y
dy = dout * self.x
return dx, dy
end
backward (generic function with 1 method)
apple = 100
apple_num = 2
tax = 1.1
1.1
mul_apple_layer = MulLayer()
mul_tax_layer = MulLayer()
MulLayer(#undef, #undef)
apple_price = forward(mul_apple_layer, apple, apple_num)
price = forward(mul_tax_layer, apple_price, tax)
220.00000000000003
dprice = 1
dapple_price, dtax = backward(mul_tax_layer, dprice)
dapple, dapple_num = backward(mul_apple_layer, dapple_price)
(dapple, dapple_num, dtax)
(2.2, 110.00000000000001, 200)
mutable struct AddLayer end
function forward(self::AddLayer, x, y)
out = x + y
return out
end
function backward(self::AddLayer, dout)
dx = dout * 1
dy = dout * 1
return dx, dy
end
backward (generic function with 2 methods)
apple = 100
apple_num = 2
orange = 150
orange_num = 3
tax = 1.1
1.1
mul_apple_layer = MulLayer()
mul_orange_layer = MulLayer()
add_apple_orange_layer = AddLayer()
mul_tax_layer = MulLayer()
MulLayer(#undef, #undef)
apple_price = forward(mul_apple_layer, apple, apple_num)
orange_price = forward(mul_orange_layer, orange, orange_num)
all_price = forward(add_apple_orange_layer, apple_price, orange_price)
price = forward(mul_tax_layer, all_price, tax)
715.0000000000001
dprice = 1
dall_price, dtax = backward(mul_tax_layer, dprice)
dapple_price, dorange_price = backward(add_apple_orange_layer, dall_price)
dorange, dorange_num = backward(mul_orange_layer, dorange_price)
dapple, dapple_num = backward(mul_apple_layer, dapple_price)
(dapple, dapple_num, dorange, dorange_num, dtax)
(2.2, 110.00000000000001, 3.3000000000000003, 165.0, 650)