如何将theano.tensor切换到numpy.array?

时间:2014-05-14 00:41:46

标签: python numpy theano

我有简单的代码,如下所示:

class testxx(object):
    def __init__(self, input):
        self.input = input
        self.output = T.sum(input)
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype = np.float32)
classfier = testxx(a)
outxx = classfier.output
outxx = np.asarray(outxx, dtype = np.float32)

但是,我收到以下错误信息:

ValueError: setting an array element with a sequence.

此外,当我使用theano.tensor的功能时,它返回的内容似乎被称为" tensor",而我无法简单地将其切换为numpy.array类型,甚至虽然结果应该像矩阵一样形成。

这就是我的问题:如何切换outxx来输入numpy.array?

2 个答案:

答案 0 :(得分:3)

Theano" tensor"变量是符号变量。你用它们构建的东西就像你编写的程序。您需要编译Theano函数来执行此程序的功能。编译Theano函数有两种方法:

f = theano.function([testxx.input], [outxx])
f_a1 = f(a)

# Or the combined computation/execution
f_a2 = outxx.eval({testxx.input: a})

编译Theano函数时,必须告诉输入是什么以及输出是什么。这就是为什么在调用theano.function()时有2个参数。 eval()是一个接口,它将在给定的符号输入上编译和执行具有相应值的Theano函数。

答案 1 :(得分:1)

由于testxx使用sum()中的theano.tensor而不是来自numpy,因此可能需要TensorVariable作为输入,而不是numpy数组。

=>将a = np.array(...)替换为a = T.matrix(dtype=theano.config.floatX)

在您的最后一行之前,outxx将是TensorVariable,取决于a。因此,您可以通过提供a

的值来评估它

=>用以下两行替换最后一行outxx = np.asarray(...)

f = theano.function([a], outxx)
outxx = f(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype = np.float32))

以下代码运行时没有错误。

import theano
import theano.tensor as T
import numpy as np

class testxx(object):
    def __init__(self, input):
        self.input = input
        self.output = T.sum(input)
a = T.matrix(dtype=theano.config.floatX)
classfier = testxx(a)
outxx = classfier.output
f = theano.function([a], outxx)
outxx = f(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype = np.float32))

adding scalars上的Theano文档提供了其他类似示例。