python - 如何矢量化 torch 函数?

标签 python pytorch torch

当使用numpy时,我可以使用np.vectorize来向量化包含if语句的函数,以便该函数接受数组参数。如何使用 torch 执行相同操作,以便函数接受张量参数?

例如,下面代码中的最终打印语句将失败。我怎样才能做到这一点?

import numpy as np
import torch as tc

def numpy_func(x):
    return x if x > 0. else 0.
numpy_func = np.vectorize(numpy_func)

print('numpy function (scalar):', numpy_func(-1.))
print('numpy function (array):', numpy_func(np.array([-1., 0., 1.])))

def torch_func(x):
    return x if x > 0. else 0.

print('torch function (scalar):', torch_func(-1.))
print('torch function (tensor):', torch_func(tc.tensor([-1., 0., 1.])))

最佳答案

您可以使用 .apply_() 作为 CPU 张量。对于 CUDA 来说,这项任务是有问题的:if 语句不容易进行 SIMDify。

您可以对 functorch.vmap 应用与用于着色器的视频驱动程序相同的解决方法:评估条件的两个分支并坚持算术。

否则,只需使用 for 循环:这就是 np.vectorize() 的主要用途 does anyway .

def torch_vectorize(f, inplace=False):
    def wrapper(tensor):
        out = tensor if inplace else tensor.clone()
        view = out.flatten()
        for i, x in enumerate(view):
            view[i] = f(x)
        return out
    return wrapper

关于python - 如何矢量化 torch 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73791594/

相关文章:

python - 异常 : Failed to start new browser session: Error while launching browser Selenium in Python

python-3.x - pytorch模型加载和预测,AttributeError : 'dict' object has no attribute 'predict'

pytorch - 在 PyTorch 中强制 GPU 内存限制

lua/torch 中的 image.display 窗口

torch - PyTorch 和 Torch 是什么关系?

python 2.7 : Format a list within a list using for loops

python - 根据不同 Dataframe 中的多个条件删除 Dataframe 的行

python - 在python中快速修改字符串

python - Pytorch 上具有相同标签的批处理点

keras - keras NonNeg 权重约束的等价物是什么?