python - Theano 损失函数中的对数行列式

标签 python numpy scipy theano deep-learning

我正在使用 Theano(用于深度学习的 python 包),但我对它非常陌生,并且我在损失函数中遇到了一个术语问题。该术语涉及矩阵行列式的对数;该矩阵是我的网络中隐藏单元层的函数。 我导入 Tensor 和 Tensor.nlinalg:

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'>)

有人可以提供任何建议吗? 干杯, 迈克

最佳答案

linear algebra package 中的

theano.tensor.nlinalg.Det是一个操作类,而不是一个操作函数。您需要首先初始化该类的一个实例,然后将其应用于代表矩阵的节点。例如,

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)之间的区别。

关于python - Theano 损失函数中的对数行列式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132036/

相关文章:

python - 解析雅虎财经 python httperror 502

python - eval(dir()[0]) 在 python 中做什么

python - 计算一定间隔内多列的第四个四分位数的平均值

python - 为 keras reshape 数组

python - 按最大大小将 numpy 数组拆分为 block

Python:正值的核密度估计

python - 启发式选择最大化点积的五个列数组

python - 将 pandas 数据透视表转换为二维数组

python - 选择数据集中属于多元高斯分布的点

c# - 将 ssh-keys 转换为 c# 格式以在 Windows (c#) 中加密并在 Linux (python/shell) 中解密