gpt4 book ai didi

Python 张量积

转载 作者:行者123 更新时间:2023-11-28 17:24:06 27 4
gpt4 key购买 nike

我有以下问题。出于性能原因,我使用 numpy.tensordot并因此将我的值存储在张量和向量中。我的一个计算如下所示:

enter image description here

<w_j>w_j 的期望值和 <sigma_i> sigma_i 的期望值. (也许我现在应该称其为 sigma,因为它与标准偏差无关)现在为了进一步计算,我还需要方差。为了获得方差,我需要计算: enter image description here

现在,当我用 numpy.tensordot 在 Python 中实现第一个公式时当它起作用时我真的很高兴,因为这很抽象而且我不习惯张量。代码看起来像这样:

erc = numpy.tensordot(numpy.tensordot(re, ewp, axes=1), ewp, axes=1)

现在这行得通了,我的问题是写下第二个公式的正确形式。我的尝试之一是:

serc = numpy.tensordot(numpy.tensordot(numpy.tensordot(numpy.tensordot
(numpy.tensordot(re, re, axes=1), ewp, axes=1), ewp, axes=1)
, ewp, axes=1), ewp, axes=1)

但这确实给了我一个标量而不是一个向量。另一个尝试是:

serc = numpy.einsum('m, m', numpy.einsum('lm, l -> m',
numpy.einsum('klm, k -> lm', numpy.einsum('jklm, j -> klm',
numpy.einsum('ijk, ilm -> jklm', re, re), ewp), ewp), ewp), ewp)

向量的长度为 l张量的维度是l * l * l .我希望我的问题是可以理解的,并在此先感谢您!

编辑:第一个公式可以用 python 写成:erc2 = numpy.einsum('ik, k -> i', numpy.einsum('ijk, k -> ij', re, ewp), ewp)

最佳答案

你可以通过一系列的减少来做到这一点,就像这样 -

p1 = np.tensordot(re,ewp,axes=(1,0))
p2 = np.tensordot(p1,ewp,axes=(1,0))
out = p2**2

解释

首先,我们可以将其分成两组操作:

Group 1: R(i,j,k) , < wj > , < wk > 
Group 2: R(i,l,m) , < wl > , < wl >

这两组中执行的操作是相同的。因此,可以计算一组并基于它得出最终输出。

现在,计算 R(i,j,k) , <wj >, <wk 并以 结束(i) ,我们需要沿着 R 的第二轴和第三轴与 w 执行逐元素乘法,然后执行 sum-reduction 沿这些轴。在这里,我们使用两个 tensordots -

分两步完成
[1] R(i,j,k) , < wj > to get p1(i,k)
[2] p1(i,k) , < wk > to get p2(i)

因此,我们最终得到一个向量p2。与第二组类似,结果将是一个相同的向量。因此,要获得最终输出,我们只需对该向量求平方,即 p**2

关于Python 张量积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044714/

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