我现在正在学习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
我真的很陌生,不知道,我想念什么吗?提前谢谢您。
T.argmax()需要Theano TensorVariable类型。这里列出了Theano中使用的一些变量类型。不要让“完全类型化的构造函数”这个名字吓到您了。关于要用作输入的数据类型,请多考虑一下它们。您在使用浮点矩阵吗?那么相关的TensorVariable类型可能是“ fmatrix”。您正在处理一批RGB图像数据吗?那么相关的TensorVariable类型可能是“ tensor4”。
在您的代码中,我们试图将列表类型输入T.argmax()。因此,从以上角度来看,这是行不通的。另外,请注意type(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语法可以在这里找到。
将此函数视为现在实际执行我们使用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对其进行编译。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句