为什么我无法正确使用theano.tensor.argmax和theano.tensor.mean

时间:2016-03-21 08:20:35

标签: python theano

我现在正在学习Theano,但总有一些问题。我的代码如下:

import theano 
from numpy import *
import theano.tensor as T
a = [1,2,3,4]
b = [7,8,9,10]
print T.argmax(a)

我认为它会打印' 4'的索引,但结果是:

argmax

当我使用T.neq()时,还有更多内容,如下所示:

import theano 
from numpy import *
import theano.tensor as T
a = [1,2,3,4]
b = [7,8,9,10]
print T.neq(a,b)

结果显示:

Elemwise{neq,no_inplace}.0

我真的很陌生,不知道,我有什么想念吗?提前谢谢你......

1 个答案:

答案 0 :(得分:5)

T.argmax()期待一种Theano TensorVariable类型。 Theano中使用的一些变量类型列于here。不要让名字"完全打字的构造者"吓你。根据您希望用作输入的数据类型,更多地考虑它们。你在使用浮动矩阵吗?然后相关的TensorVariable类型可能是" fmatrix。"你在处理批量的RGB图像数据吗?那么相关的TensorVariable类型可能是" tensor4。"

在您的代码中,我们尝试将列表类型输入到T.argmax()中。因此,从上述观点来看,这不会起作用。另请注意,类型(T.argmax(a))是theano.tensor.var.TensorVariable类型。所以它期望TensorVariable作为输入,并且它也输出TensorVariable类型。 所以这不会返回实际的argmax

好的,那有什么用呢?我们怎样才能在Theano中进行这种计算?

让我们首先确定您要处理的数据类型。这将是我们将要构建的计算图的起点。在这种情况下,看起来我们想要处理数组或向量。 Theano有一个ivector类型,它是一个整数向量,或者是一个fvector类型,它是float32值的向量。由于我们有整数值,因此我们坚持使用您的数据并执行ivector:

x = T.ivector('input')

这一行刚刚创建了一个TensorVariable x,它表示我们想要的输入类型,一个整数数组。

现在让我们为x的元素的argmax定义一个TensorVariable:

y = T.argmax(x)

到目前为止,我们已经构建了一个计算图,它期望一个整数数组作为输入,并将输出该数组的argmax。但是,为了实际执行此操作,我们必须将其编译为函数:

get_argmax = theano.function([x], y)

可以找到theano.function语法here

将此函数视为现在实际执行我们使用x和y定义的计算。

执行时:

get_argmax([1,2,3,4,19,1])

它返回:

array(4)

那我们到底做了什么?通过定义Theano变量并使用theano.tensor函数,我们构建了一个计算图。然后我们使用theano.function编译一个函数,该函数实际上对我们指定的实际输入执行计算。

结束:如何做不等于操作?

a = T.ivector('a')
b = T.ivector('b')
out = T.neq(a,b)
get_out = theano.function([a,b], out)
print get_out([1,2,3,4], [7,8,9,10])

将返回:

[1,1,1,1]

其中一个关键的概念差异是我将a,b视为theano TensorVariables,而不是将它们分配给显式变量。

你可以摆脱它,只记得你需要根据Theano TensorVariables定义你的计算,然后实际使用它"你必须使用theano.function编译它。