theano中总是增加维度的操作
Operation in theano that always adds dimensions
我正在寻找一种方法来编写一个函数,该函数接受两个 theano 表达式 a
和 b
并对它们进行元素运算(比方说加法),以便 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
我正在寻找一种方法来编写一个函数,该函数接受两个 theano 表达式 a
和 b
并对它们进行元素运算(比方说加法),以便 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