2

你能告诉我Theano中的形状0,(?,),(1,?),(?,?)有什么区别吗?为什么我定义为的数组

arr = np.array([1,2,3])

是 (3,) 的数组吗?我怎么能定义一个 (3,1) 的数组?

此外,我编写代码如下:

import theano.tensor as T
from theano import shared
import numpy as np
from theano import function


class hiddenLayer():
    """ Hidden Layer class
    """
    def __init__(self, inputs, n_in, n_out, act_func):
        rng = np.random
        self.W = shared(np.asarray(rng.uniform(low=-4*np.sqrt(6. / (n_in + n_out)),
                                               high=4*np.sqrt(6. / (n_in + n_out)),
                                               size=(n_in, n_out)),
                                   dtype=T.config.floatX),
                        name='W')
        self.inputs = inputs
        self.b = shared(np.zeros(n_out, dtype=T.config.floatX), name='b')
        self.x = T.dvector('x')
        self.z = T.dot(self.x, self.W) + self.b
        self.ac = function([self.x], self.z)

a = hiddenLayer(np.asarray([1, 2, 3], dtype=T.config.floatX), 3, 3, T.tanh)
print a.ac(a.inputs, a.z)

为什么会报错:

  'Expected an array-like object, but found a Variable: '
TypeError: ('Bad input argument to theano function at index 1(0-based)', 'Expected an array-like object, but found a Variable: maybe you are trying to call a function on a (possibly shared) variable instead of a numeric array?')

非常感谢!</p>

4

1 回答 1

2

你试图传递a.za.ac(),而a.z实际上是的结果a.ac(x)

相反,您可能想要这样做:

a.ac(a.inputs)
# array([  8.61379147, -13.0183053 ,  -4.41056323])

符号变量的值在a.z之前是不确定的a.xa.W并且a.b都可以被计算。像这样工作的语法theano.function

find_x = theano.function([<inputs needed to compute x>], <output x>)

当你真正想调用find_x()时,你只需要给它方括号里的东西,第二个参数theano.function就是返回值find_x()

于 2014-05-13T15:33:08.417 回答