当东西在 GPU 上时评估和修改 theano 张量

Evaluating and modifying theano tensors when stuff is on GPU

我很长时间以来一直被某些东西困扰着。我需要一些帮助。

我是 运行 GPU 上的 theano 转换网络。 网络有这样的损失函数

def mse(x, t): return T.mean((x - t) ** 2)

这里x是一个整流线性单元的预测值,t是期望值。

现在对于一个特定的学习问题,我正在尝试修改函数,以便我想要对 x 的值设置阈值。所以基本上像这样简单的东西

x[x>ts] = ts

但我真的很挣扎。我尝试了很多东西

ts = 0.91 Y = T.vector() #x_update = (x, T.set_subtensor(x[(x > ts).eval()], Y)) #f = function([Y], updates=[x_update]) #v=np.empty(len((x > ts).eval())) #v.fill(ts) #f(v) #x.shape.eval() x_arr = x.flatten() print type(x_arr) print type(t) print type(x) #print T.shape(x_arr).eval() #print x.shape.eval() #print x_arr.shape.eval() #print t.shape.eval() #print x.eval() #print x_arr.get_value() #x_newarr = x_arr.eval() #x_newarr[x_newarr>ts] = ts #x = T.shared(x_newarr) return T.mean((x - t) ** 2)

除了三个打印件,它们都打印 <class 'theano.tensor.var.TensorVariable' > 其他一切都给我错误。 所以我不知道如何做这个简单的事情。 是不是因为这个东西在 GPU 上?

我确实在本地 python 提示符下测试了代码,方法是构建一个 numpy 数组并将其转换为张量共享变量。上面不同的东西起作用了。 但我意识到类型是 theano.tensor.sharedvar.TensorSharedVariable 而不是 theano.tensor.var.TensorVariable。

如果有人在这里帮我一把,我将不胜感激。

此致

请在以下位置找到 pascal 给出的此问题的答案 https://groups.google.com/forum/#!topic/theano-users/cNnvw2rUHc8

失败是正确的,因为在调用函数时没有提供输入值,因为它是符号的。

答案是使用T.minimum(x,threshold)