假设我有一个大小为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