【发布时间】:2019-09-25 09:22:02
【问题描述】:
我正在尝试将函数应用于 3d 火炬张量,而该函数应用于通过 3d 火炬张量的轴 1 读取的 2d 张量。
例如,我有一个形状为 (51, 128, 20100) 的火炬张量(一个名为 autoencode_logprob 的变量),函数 (rawid2sentence) 在形状 (51, 20100) 的输入上运行。
现在我编写了代码以使用幼稚的 for 循环运行,使用 range(128) 一个接一个地循环。
但是,它太慢了。以下是重要的代码部分。
autoencode_logprobs 是 3d 张量,我需要沿其第二个轴应用 rawids2sentence 函数。对矢量化有什么帮助吗?
for i in range(128):
output_sent = self.dictionary.rawids2sentence(
autoencode_logprobs[:, i].max(1)[
1].data.cpu().numpy(),
oov_dicts[i],
)
output_sent_encoding = ifst_model.encode([output_sent])
【问题讨论】:
-
只有 128 次迭代,我会关注任务本身的速度,而不是消除迭代。
-
有数百万个批次来处理同一个任务。消除迭代是深度学习的基础和根本。
标签: python numpy vectorization pytorch