如何在不使用扫描的情况下在Theano中堆叠矢量?

时间:2014-08-13 10:49:35

标签: python gpu theano

我正在使用theano.scan来创建像这样的上下文的叠加矢量:

Y_, scan_updates = theano.scan(fn=lambda *args,**kwargs: T.concatenate(args, axis=0),outputs_info=None, sequences=dict(input = Y_, taps=range(-left_ctx,right_ctx+1)))

扫描似乎很慢,这会减慢整个处理速度。 在信号处理中,这是相当标准的操作,所以我考虑创建一个特殊的操作,就这样。 不幸的是,我还需要这个操作的GPU实现和毕业,这对我来说看起来像是一个很长的镜头。 你能踢我正确的方向吗?我已经阅读了扩展theano文档,但仍然没有多大帮助。

示例:

的情况

left_ctx=right_ctx=1

矩阵

[[0.0, 0.1],
 [1.0, 1.1],
 [2.0, 2.1],
 [3.0, 3.1]]

将转换为

[[0.0, 0.1, 1.0, 1.1, 2.0, 2.1],
 [1.0, 1.1, 2.0, 2.1, 3.0, 3.1]]

谢谢 Ĵ

1 个答案:

答案 0 :(得分:1)

所以这个问题可以通过这种方式解决。立即行动。

Y_= T.concatenate([Y_[c:Y_.shape[0]+c-left_ctx-right_ctx] for c in range(left_ctx+right_ctx+1)], axis=1)