verify_grad 函数:'TensorVariable' 对象不可调用

verify_grad function: 'TensorVariable' object is not callable

我想使用 verify_grad 函数,但出现“'TensorVariable' 对象不可调用”形式的错误。

theano.gradient.verify_grad(fun, pt, n_tests=2, rng=None, eps=None, out_type=None, abs_tol=None, rel_tol=None, mode=None, cast_to_output_type=False)

文档中说乐趣是 "a Python function that takes Theano variables as inputs, and returns a Theano variable. For instance, an Op instance with a single output."

我已经阅读了文档中的图形结构部分,我认为我了解什么是操作节点,但显然我不了解。

例如如果我有两个 TensorVariables x 和 y 并且我想取它们的乘积,那么 * 是操作节点,对吗?但是如果我声明 z=x*y,那么 z 又是一个 TensorVariable,对吧?

那么有什么方法可以为例如一个负对数似然函数来评估该函数梯度的正确性?或者有没有其他方法可以在 theano 中为您构建的函数获取数值梯度?

下面是 verify_grad 的使用示例:

import numpy
import theano

def something_complicated(x, y):
    z = x * y
    return z

x_value = numpy.array([[1., 2., 3.], [4., 5., 6.]], dtype=theano.config.floatX)
y_value = numpy.array([[7., 8., 9.], [10., 11., 12.]], dtype=theano.config.floatX)
theano.gradient.verify_grad(something_complicated, (x_value, y_value), rng=numpy.random)

根据要求,something_complicated为"a Python function that takes Theano variables as inputs [x and y in this case], and returns a Theano variable [z in this case]."

您可以在 something_complicated 中构建任何符号表达式,例如负对数似然的计算。

一个Theano操作可以是任何东西只要

  1. 它是可调用的(对象如果实现特殊的__call__ function是可调用的)
  2. 调用时,它将所有输入视为 Theano 变量
  3. 调用时,只有return个Theano变量。

something_complicated显然符合这些要求。由于是一个 Python 函数,它是可调用的,它假设 xy 是 Theano 变量,它的 return 值 z 也是一个 Theano 变量.