程式碼實現 Identity啟用函式視覺化
阿新 • • 發佈:2018-11-25
漸近恆等變換,節點輸入等於節點輸出,不會隨著深度的增加而發生顯著的變化,神經網路會更加穩定,梯度更容易回傳。
公式:
微分求導
Identity 啟用函式的特點,符合了部分潛在行為是線性的。與非線性矛盾,但是不影響它在(迴歸任務)最後的輸出上,使用它。
視覺化:紅色線為原函式, 藍色線為導數
視覺化程式碼實現:
import math import matplotlib.pyplot as plt import numpy as np import mpl_toolkits.axisartist as axisartist # 以類實現 class Identity: # 原函式 def forward(self, w_input): return w_input # 導數 def backward(self, output): # 在此例子中,需轉換為相同的形狀,其實都是返回 1 # return 1 out = np.copy(output) out[:] = 1 return out def Axis(fig, ax): #將繪圖區物件新增到畫布中 fig.add_axes(ax) # 隱藏座標抽 ax.axis[:].set_visible(False) # new_floating_axis 建立新的座標 ax.axis["x"] = ax.new_floating_axis(0, 0) # 給 x 軸建立箭頭線,大小為1.0 ax.axis["x"].set_axisline_style("->", size = 1.0) # 給 x 軸箭頭指向方向 ax.axis["x"].set_axis_direction("top") # 同理,建立 y 軸 ax.axis["y"] = ax.new_floating_axis(1, 0) ax.axis["y"].set_axisline_style("->", size = 1.0) ax.axis["y"].set_axis_direction("right") # 返回間隔均勻的100個樣本,計算間隔為[start, stop]。 x = np.linspace(-5, 5, 100) y_forward = Identity().forward(x) y_backward = Identity().backward(x) #建立畫布 fig = plt.figure(figsize=(12, 12)) #建立繪圖物件ax ax = axisartist.Subplot(fig, 111) Axis(fig, ax) # 設定x, y軸範圍 plt.ylim((-5, 5)) plt.xlim((-5, 5)) # 原函式,forward function plt.plot(x, y_forward, color='red', label='forward function') plt.legend() # 導數, backward function plt.plot(x, y_backward, color='blue', label='backward function') plt.legend() plt.show()