如何在Theano中不使用scan叠加向量?

4 投票
1 回答
926 浏览
提问于 2025-04-18 17:07

我正在使用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)

撰写回答