如何在Theano中不使用scan叠加向量?
我正在使用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)))
但是,scan的速度似乎非常慢,这导致整个处理过程变得很慢。在信号处理领域,这种操作是相当标准的,所以我在考虑为此创建一个特殊的操作。可惜的是,我还需要这个操作的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 个回答
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)