天天看點

DL之BP:利用乘法層/加法層(forward+backward)算法結合計算圖(CG)求解反向求導應用題

利用乘法層(forward+backward)算法結合計算圖(CG)求解反向求導應用題

實作購買2個蘋果

輸出結果

DL之BP:利用乘法層/加法層(forward+backward)算法結合計算圖(CG)求解反向求導應用題

CG思路

DL之BP:利用乘法層/加法層(forward+backward)算法結合計算圖(CG)求解反向求導應用題

實作代碼

apple = 100

apple_num = 2

tax = 1.1

apple_price = mul_apple_layer.forward(apple, apple_num)

price = mul_tax_layer.forward(apple_price, tax)

dprice = 1

dapple_price, dtax = mul_tax_layer.backward(dprice)

dapple, dapple_num = mul_apple_layer.backward(dapple_price)

print('僅使用乘法層:購買2個蘋果和消費稅的例子')

print("price:", int(price))

print("dApple:", dapple)

print("dApple_num:", int(dapple_num))

print("dTax:", dtax)

利用加法層(forward+backward)算法結合計算圖(CG)求解反向求導應用題

實作購買2個蘋果和3個橘子的例子

DL之BP:利用乘法層/加法層(forward+backward)算法結合計算圖(CG)求解反向求導應用題

DL之BP:利用乘法層/加法層(forward+backward)算法結合計算圖(CG)求解反向求導應用題

orange = 150

orange_num = 3

apple_price = mul_apple_layer.forward(apple, apple_num)                # (1)

orange_price = mul_orange_layer.forward(orange, orange_num)            # (2)

all_price = add_apple_orange_layer.forward(apple_price, orange_price)  # (3)

price = mul_tax_layer.forward(all_price, tax)                          # (4)

dall_price, dtax = mul_tax_layer.backward(dprice)                          # (4)

dapple_price, dorange_price = add_apple_orange_layer.backward(dall_price)  # (3)

dorange, dorange_num = mul_orange_layer.backward(dorange_price)            # (2)

dapple, dapple_num = mul_apple_layer.backward(dapple_price)                # (1)

print('混合使用加法層和乘法層,實作購買2個蘋果和3個橘子的例子')

print("dOrange:", dorange)

print("dOrange_num:", int(dorange_num))

繼續閱讀