我正在寻找一种方法来编写一个函数,该函数包含两个theano表达式a
和b
,并对它们执行元素级操作(例如加法),以便使dimensions(a + b) = dimensions(a) + dimenisons(b)
。
在我的例子中,a
有一个维度,b
有两个或三个维度。
我正在考虑为二维a.dimshuffle('x', 'x', 0) + a.dimshuffle(0, 1, 'x')
做一些类似的事情,但是我不知道如何得到它的维数。b.shape
是一个theano表达式,不支持len()
。
最终目标是在多个点上计算出距离多边形的距离,这一技术将被多次使用,其中a
将具有形状(number_of_control_points,)
,b
将是二维或三维网格取样点坐标,我将在该坐标下评估距离。
我可以在不计算表达式的情况下将表达式的维数作为常规python值吗?
另一个问题:是否有一种方法可以直接完成操作,而不需要显式的模糊处理?
发布于 2016-11-04 09:56:57
使用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
https://stackoverflow.com/questions/40328831
复制