假設我有一個大小爲n_i x n_o
的矩陣N
,我想按行逐級規範化,即 每行的總和應該是1。我該如何在theano中做到這一點?在theano中按行劃分矩陣規範化
動機:使用softmax返回給我的錯誤,所以我嘗試通過實現我自己的softmax版本來避開它。
假設我有一個大小爲n_i x n_o
的矩陣N
,我想按行逐級規範化,即 每行的總和應該是1。我該如何在theano中做到這一點?在theano中按行劃分矩陣規範化
動機:使用softmax返回給我的錯誤,所以我嘗試通過實現我自己的softmax版本來避開它。
看看以下是對您有用:
import theano
import theano.tensor as T
m = T.matrix(dtype=theano.config.floatX)
m_normalized = m/m.sum(axis=1).reshape((m.shape[0], 1))
f = theano.function([m], m_normalized)
import numpy as np
a = np.exp(np.random.randn(5, 10)).astype(theano.config.floatX)
b = f(a)
c = a/a.sum(axis=1)[:, np.newaxis]
from numpy.testing import assert_array_equal
assert_array_equal(b, c)
而不是'sum'後的'reshape',我認爲'keepdims = True'在'sum'中會更乾淨。 – Albert 2016-02-11 10:09:43
確實。我看到了這個論點,但從未使用過它,因爲我不認爲它存在於numpy中。但你是對的,它絕對更簡潔。 – eickenberg 2016-02-11 12:51:45
如果你用零的可能性來解決這個問題,那麼這將會很好;其中一行可以和爲零。 – hlin117 2016-03-16 20:06:50
,或者您也可以使用
m/m.norm(1, axis=1).reshape((m.shape[0], 1))
如果總和爲正數(我希望它會被選中),那麼這相當於。如果不是,那麼我的答案可能會導致意想不到的行爲,而按標準劃分則會做簡單的縮放並且不會改變符號。 – eickenberg 2017-11-20 16:35:18
你不應該看,而與SOFTMAX然後修復錯誤? :) – eickenberg 2015-02-15 14:49:19