gpt4 book ai didi

python - 在 PyTorch 和 Numpy 中快速生成形状为 (1, 1, 256) 和 (10, 1, 256) 的多个 3D 张量

转载 作者:行者123 更新时间:2023-11-28 21:36:46 25 4
gpt4 key购买 nike

我正在尝试根据自己的任务调整 seq2seq 模型,https://github.com/spro/practical-pytorch/blob/master/seq2seq-translation/seq2seq-translation.ipynb

我在解码阶段有两个张量

rnn_output: (1, 1, 256)       # time_step x batch_size x hidden_dimension
encoder_inputs: (10, 1, 256) # seq_len x batch_size x hidden_dimension

它们应该相乘以获得形状的注意力分数(在 softmax 之前)

attn_score: (10, 1, 1) 

最好的方法是什么? notebook好像用了for循环,有没有更好的矩阵乘法之类的操作?

最佳答案

没有使用 pytorch 的经验,但是这样的东西可以工作吗?

torch.einsum('ijk,abk->abc', (rnn_output, encoder_inputs))

它对最后一个轴进行点积,并向后添加几个空轴。

类似的东西可以用纯 numpy 实现(pytorch 0.4 还没有 ... 符号)

np.einsum('...ik,...jk', rnn_output.numpy(), encoder_inputs.numpy())

或者用np.tensordot

np.tensordot(rnn_output.numpy(), encoder_inputs.numpy(), axes=[2,2])

但是在这里你会得到输出形状:(1, 1, 10, 1)

您可以通过挤压和重新展开来解决这个问题(几乎可以肯定必须有一些更清洁的方法来做到这一点)

 np.tensordot(rnn_output.numpy(), encoder_inputs.numpy(), axes=[2,2]).squeeze()[..., None, None]

关于python - 在 PyTorch 和 Numpy 中快速生成形状为 (1, 1, 256) 和 (10, 1, 256) 的多个 3D 张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50570697/

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