狀态轉移矩陣的逆矩陣怎麼求?在了解清楚softmax函數的功能以及數學表達式的前提下,使用python對softmax函數實現如下:,下面我們就來聊聊關于狀态轉移矩陣的逆矩陣怎麼求?接下來我們就一起去了解一下吧!

狀态轉移矩陣的逆矩陣怎麼求
在了解清楚softmax函數的功能以及數學表達式的前提下,使用python對softmax函數實現如下:
def softmax(x):
if x.ndim == 2:
x = x.T
# np.max(x, axis=0) 獲取每列的最大值
x = x - np.max(x, axis=0)
# np.sum(np.exp(x), axis=0) 計算每一列的和
y = np.exp(x) / np.sum(np.exp(x), axis=0)
return y.T
x = x - np.max(x) # 溢出對策
return np.exp(x) / np.sum(np.exp(x))
當你讀到這裡的時候,如果你此時沒弄清楚為什麼要使用裝置的方式來實現,本文後面的叙述可以解答你的困擾。
一般人實現softmax函數可能會寫出如下代碼:
def softmax(x):
x = x - np.max(x) # 溢出處理
return np.exp(x) / np.sum(np.exp(x))
上面的代碼隻适合當x是一維的時候,當數據是二維或者其它的時候,更本不能實現。
然後你針對上面的問題,可能寫出如下代碼:
def s1(x):
y = x - np.max(x, axis=1)
return np.exp(y)/np.sum(np.exp(y), axis=1)
但這樣的實現是錯誤的,更本不能正常運行。接下來解釋原因:
if x.ndim == 2:
x = x.T
# np.max(x, axis=0) 獲取每列的最大值
x = x - np.max(x, axis=0)
# np.sum(np.exp(x), axis=0) 計算每一列的和
y = np.exp(x) / np.sum(np.exp(x), axis=0)
return y.T
# 為什麼這裡要這樣實現? 使用轉置的方式
# 假設不用轉置的方式實現,輸入數據為n行m列的矩陣
# 對每一行進行溢出處理,需要使用如下方法
# max = np.max(x, axis=1)
# c = x - max,表示對x的每一行減去行最大值
# 此時 x 的形狀為n行m列,max的形狀為n個元素的一維
# 所以 x - max 不能進行運算
# 使用如上轉置方式,同樣分析
# x 為n行m列, 則y 為m行n列
# 此時再求 max = np.max(y, axis=0) 就要按照列求最大值
# 因為此時一列才是原來的一個樣本數據
# 此時max 的形狀為有n個元素的一維
# y - max 可以計算
# 最後結果轉置即為原來的結果