theano中总是增加维度的操作

Operation in theano that always adds dimensions

我正在寻找一种方法来编写一个函数,该函数接受两个 theano 表达式 ab 并对它们进行元素运算(比方说加法),以便 dimensions(a + b) = dimensions(a) + dimenisons(b) .

在我的例子中,a 有一个维度,b 有两个或三个维度。

我正在考虑为二维 b 做类似 a.dimshuffle('x', 'x', 0) + a.dimshuffle(0, 1, 'x') 的事情,但我不知道如何获得它的维数。 b.shape 是 theano 表达式,不支持 len().

这个的最终目标是计算多点折线的距离,这个技术将被多次使用,其中 a 的形状为 (number_of_control_points,)b 的形状为我将评估距离的 2D 或 3D 网格采样点坐标。

我可以在不计算表达式的情况下将表达式的维数作为常规 python 值获取吗?

替代问题:有没有办法直接进行操作而无需显式 dimshuffle?

使用 tile 一点广播魔法:

import theano as th
import theano.tensor as T

def general_outer(elem_op, a, b):
    a_shape = T.shape(a)
    b_shape = T.shape(b)
    return elem_op(T.tile(a, T.join(0,T.ones_like(a_shape),b_shape), b)) #note the broadcast