2017-01-28 8 views
1

값으로 텐서의 K-첫번째 값을 설정 형상 (N). K 번째 첫 번째 값을 고정 값 x (3 또는 기타 ...)로 설정하려고합니다. 어떻게해야합니까? argsort를 사용해야한다고 가정하지만 Theano를 사용하여 구현하는 방법을 모르겠습니다.Theano/Keras :</p> <p>우리가 텐서에 있다고 가정 : 나는 정의 Keras 층을 가지고 내가 백엔드로 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 

은이 같은 1 a의 10 개 제 값을 설정할 수 NumPy와 사용 :

a[a.argsort() <= 10] = 1 

제가 동일한 사용 Keras 백엔드 기능 또는 Theano 기능을 수행 할.

답변

1

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) 

나는이 정확하게 당신이 필요로하는 경우 확실하지 않다.