python - 在 PyTorch 中计算张量/外积空间中的线性层非常慢

标签 python neural-network pytorch linear-algebra tensor

我想制作一个 PyTorch 模型,它采用输入与其自身的外积,然后对其进行线性回归。举个例子,考虑输入向量[1,2,3],然后我想计算wb来优化[1*1, 1*2, 1*3, 2*1, 2*2, 2*3, 3*1, 3*2, 3*3] @ w + b.

对于具有 r 行和 c 列的批量输入,我可以在 PyTorch 中执行此操作

(input.reshape(r,c,1) @ input.reshape(r,1,c)).reshape(r,c**2) @ weigts + b

我的问题是它非常慢。就像一个比添加完全连接的 c*c RELU 层慢 1000 倍且消耗更多内存的因子,即使它具有相同数量的权重。

我的问题是为什么会发生这种情况?

reshape 对于 PyTorch 来说是一个非常昂贵的操作吗?我可以用不同的方式重新表述它,从而提高效率吗?

我知道的另一个等效公式是torch.diag(input @ Weights @ input.T) + b,但现在我们计算的值比我们需要的多得多(r*r)只是为了再次把它们扔掉。

最佳答案

当您必须在模型的训练循环期间 reshape 张量时,最好使用 view而不是 reshape 。 View 似乎没有任何性能开销,但它确实要求张量数据是连续的。

如果你的张量在开头 aren't contiguous您可以重新复制张量并将其设为 contiguous .

关于python - 在 PyTorch 中计算张量/外积空间中的线性层非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60025695/

相关文章:

python - PyTorch:传递 numpy 数组以进行权重初始化

python - 如何对 pandas、torch 和 numpy 输入使用打字覆盖

python - 解释深度神经网络的训练轨迹 : very low training loss and even lower validation loss

python - 使用 pytorch 进行多类句子分类(使用 nn.LSTM)

python - RNN 参数没有更新?

python - 从 django 中的表中过滤掉空值

python - 从 DRF 中的 token 字符串获取用户对象?

python - cgi不执行HTML

python - Keras - 如何获得训练中每一层所花费的时间?

batch-file - 反向传播和批量训练