M.L (p.164)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import numpy as np 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 class AddLayer: def __init__(self): pass def forward(self,x,y): out = x + y return out def backward(self,dout): dx = dout dy = dout return dx,dy #variable apple_price = 100 apple_num = 2 orange_price = 150 orange_num = 3 tax = 1.1 apple_mul_layer = MulLayer() orange_mul_layer = MulLayer() tax_mul_layer = MulLayer() fruit_add_layer = AddLayer() #forward apple_total = apple_mul_layer.forward(apple_price,apple_num) print(apple_total) orange_total = orange_mul_layer.forward(orange_price,orange_num) print(orange_total) fruit_total = fruit_add_layer.forward(apple_total,orange_total) print(fruit_total) fruit_tax = tax_mul_layer.forward(fruit_total,tax) print(fruit_tax) #backward d_total_price = 1 d_fruit_total, d_tax = tax_mul_layer.backward(d_total_price) print(d_fruit_total,d_tax) d_apple_total, d_orange_total = fruit_add_layer.backward(d_fruit_total) print(d_apple_total,d_orange_total) d_apple_price, d_apple_num = apple_mul_layer.backward(d_apple_total) print(d_apple_price,d_apple_num) d_orange_price, d_orange_num = orange_mul_layer.backward(d_orange_total) print(d_orange_price,d_orange_num) |
다음은 사과 2개와 귤 3개 소비세를 포함한 총 가격이 역전파를 통해 각각의 변수가 얼마나 총 가격에 얼마나 영향을 미치는지 파악해 보는 코드이다.
구현한 코드가 값을 쉽게 구한 것을 볼 수 있다.