【发布时间】:2021-08-11 01:46:54
【问题描述】:
我有几行代码,其中有一个 torch tensor (200.000 x 512),我想计算每个嵌入之间的余弦距离。
现在,我正在做:
similarity = (image_features.cpu() @ image_features.cpu().T).squeeze()
但是时间太长了。也许matlab要快得多。有谁可以告诉我在那里怎么做? (将我的张量转换为 .mat 文件 + 代码)
【问题讨论】:
我有几行代码,其中有一个 torch tensor (200.000 x 512),我想计算每个嵌入之间的余弦距离。
现在,我正在做:
similarity = (image_features.cpu() @ image_features.cpu().T).squeeze()
但是时间太长了。也许matlab要快得多。有谁可以告诉我在那里怎么做? (将我的张量转换为 .mat 文件 + 代码)
【问题讨论】:
你可以convert your torch tensor into a numpy array,
然后save that to a .mat with scipy's savemat()。
from scipy.io import savemat
# to numpy array
arr = tensor.numpy()
# to .mat, needs second input to be a dict type
savemat("filename.mat", {'a': arr})
但是,MATLAB isn't always faster than Python (Numpy);尤其是在进行矩阵乘法时,因为 Numpy 本身也是高度优化的。所以我相信在 MATLAB 上尝试相同的矩阵乘法不会加快速度。事实上,如果你有 GPU 可用,在 pytorch 中进行计算可能会更快。
也许这里更相关的问题是how to calculate the cosine similarity of large datasets?
【讨论】: