Theano / Keras:将 Tensor 的 K-first 值设置为一个值
Theano / Keras: Set the K-first values of Tensor to a value
我有一个自定义的 Keras 层,我使用 Theano 作为后端,我想执行以下操作:
假设我们有一个形状为 (N,) 的张量。我想将 K 个第一个值设置为固定值 x
(3 或其他...)。我怎么做?我假设我必须使用 argsort 但我不知道如何使用 Theano 来实现它。
例如,在一个简单的 FF 层中,如何将张量 a
的前 N 个值设置为值 x
?
def call(self, x, mask=None):
a = K.dot(x, self.W)
if self.bias:
a += self.b
return a
例如,使用 numpy 我可以将 a
的前 10 个值设置为 1,如下所示:
a[a.argsort() <= 10] = 1
我想使用 Keras 后端函数或 Theano 函数做同样的事情。
对于a[a.argsort() <= 10] = 1
,等效代码为:
import numpy as np
from keras import backend as K
a = np.asarray([[3,4,2,44,22,4,5,6,77,86,3,2,3,23,44,21],
[3,4,22,44,2,4,54,6,77,8,3,2,36,23,4,2]], dtype=np.float)
a_t = K.variable(a)
a[a.argsort() <= 10] = 1
print a
arg_sort = K.T.argsort(a_t)
_cond = K.lesser_equal(arg_sort,10)
a_new = K.switch(_cond, 1, a_t)
print K.eval(a_new)
在单个语句中它将是:
a_new = K.switch(K.lesser_equal(K.T.argsort(a_t),10), 1, a_t)
print K.eval(a_new)
我不确定这是否正是您所需要的。
我有一个自定义的 Keras 层,我使用 Theano 作为后端,我想执行以下操作:
假设我们有一个形状为 (N,) 的张量。我想将 K 个第一个值设置为固定值 x
(3 或其他...)。我怎么做?我假设我必须使用 argsort 但我不知道如何使用 Theano 来实现它。
例如,在一个简单的 FF 层中,如何将张量 a
的前 N 个值设置为值 x
?
def call(self, x, mask=None):
a = K.dot(x, self.W)
if self.bias:
a += self.b
return a
例如,使用 numpy 我可以将 a
的前 10 个值设置为 1,如下所示:
a[a.argsort() <= 10] = 1
我想使用 Keras 后端函数或 Theano 函数做同样的事情。
对于a[a.argsort() <= 10] = 1
,等效代码为:
import numpy as np
from keras import backend as K
a = np.asarray([[3,4,2,44,22,4,5,6,77,86,3,2,3,23,44,21],
[3,4,22,44,2,4,54,6,77,8,3,2,36,23,4,2]], dtype=np.float)
a_t = K.variable(a)
a[a.argsort() <= 10] = 1
print a
arg_sort = K.T.argsort(a_t)
_cond = K.lesser_equal(arg_sort,10)
a_new = K.switch(_cond, 1, a_t)
print K.eval(a_new)
在单个语句中它将是:
a_new = K.switch(K.lesser_equal(K.T.argsort(a_t),10), 1, a_t)
print K.eval(a_new)
我不确定这是否正是您所需要的。