2015-05-08 3 views
2

Я использую Theano (пакет python для глубокого обучения), но я очень к этому знаком, и у меня возникает проблема с термином в моей функции потерь. Этот термин включает в себя взятие логарифма определителя матрицы; матрица является функцией слоя скрытых единиц в моей сети. импортировать тензорные и Tensor.nlinalg:Логарифмический определитель в функции потери звука в Anano

import theano 
import theano.tensor as T 
import theano.tensor.nlinalg as Tnlinalg 

, а затем придерживаться этого термина в моей функции потерь:

my_mat_det = Tnlinalg.Det(computed_matrix) 
log_det_term = -T.log(my_mat_det) 

, но когда я пытаюсь обучить его, я получаю следующее исключение и отслеживающие:

File "/SdaModule.py", line 88, in __init__ 
    log_det_term = -T.log(my_mat_det) 
File "/home/username/anaconda/lib/python2.7/site-packages/theano/gof/op.py", line 481, in __call__ 
    node = self.make_node(*inputs, **kwargs) 
File "/home/username/anaconda/lib/python2.7/site-packages/theano/tensor/elemwise.py", line 527, in make_node 
    inputs = map(as_tensor_variable, inputs) 
File "/home/username/anaconda/lib/python2.7/site-packages/theano/tensor/basic.py", line 202, in as_tensor_variable 
    raise AsTensorError("Cannot convert %s to TensorType" % str_x, type(x)) 
theano.tensor.var.AsTensorError: ('Cannot convert Det to TensorType', <class 'theano.tensor.nlinalg.Det'>) 

Может кто-нибудь предложить какие-либо советы? Приветствия, Майк

ответ

3

theano.tensor.nlinalg.Det в linear algebra package является классом операции, а не функция работы. Вам нужно сначала запустить экземпляр класса, а затем применить его к узлу, представляющему вашу матрицу. Например,

import numpy 

import theano 
import theano.tensor.nlinalg 

x = theano.tensor.matrix('x', dtype=theano.config.floatX) 
p = theano.shared(numpy.array([[2, 0], [0, 3]], dtype=theano.config.floatX)) 
y = theano.dot(x, p) 
c = theano.tensor.log(theano.tensor.nlinalg.Det()(y)) 
g = theano.grad(c, x) 

print theano.printing.pp(g) 

Обратите внимание на разницу между theano.tensor.nlinalg.Det()(y) и theano.tensor.nlinalg.Det(y).

Смежные вопросы