gpt4 book ai didi

python - Theano 中的符号矩阵幂级数

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:54 24 4
gpt4 key购买 nike

假设我有一个二维张量A。我想以符号方式计算 Apow,即 A 的幂级数,它是一个 3d 张量,定义如下:

Apow = [I, A, A^2, A^3, ..., A^k]

其中A^2表示A.dot(A)(即幂级数是根据点积而不是元素来定义的)。 k 是一个符号标量,指定序列的长度。

我如何在 Theano 中实现这个?看起来解决方案将基于 scan,但我无法让它发挥作用。

有什么想法吗?

最佳答案

让我将我的答案分为 numpy 实现和 theano 实现:

使用numpy:

def kpow(A, k):
if k == 0:
return np.identity(A.shape[0])
if k == 1:
return A
else:
return np.dot(A, kpow(A, k-1))

然后你可以像这样得到你的Apow:

k = 5
A = np.array([[1, 1, 1],[2, 2, 2],[3, 3, 3]])
Apow = [kpow(A,i) for i in range(k)]

当然,您可以通过实际积累一个列表来提高这种方式的效率。需要注意的重要一点是递归,即我们如何使用前一个结果来计算下一个结果。

使用 theano:

首先,我们为 k 和矩阵 M 定义两个符号变量:

k = T.iscalar('k')
M = T.dmatrix('M')

接下来,让我们定义一个递归函数:

def recurrence(M, prev_result):
return prev_result * M

最后,是时候使用扫描功能了:

result, updates = theano.scan(fn=recurrence,
outputs_info=T.identity_like(M),
non_sequences=M,
n_steps=k)

现在让我们得到一些结果:

A = np.array([[1, 1, 1],[2, 2, 2],[3, 3, 3]], dtype='int32')
kpow_theano = theano.function(inputs=[M,k], outputs=result)
Apow = [kpow_theano(A,10)[i] for i in range(10)]

我不确定如何使用 theano 获得前面的单位矩阵。我想您可以将其添加到列表中。

关于python - Theano 中的符号矩阵幂级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40345148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com