自定义实现C++拓展pytorch功能

ncrelu.cpp

cpp 复制代码
#include <torch/extension.h>					// 头文件引用部分

namespace py = pybind11;

torch::Tensor ncrelu_forward(torch::Tensor input) {
    auto pos = input.clamp_min(0);				       // 具体实现部分
    auto neg = input.clamp_max(0);
    return torch::cat({pos, neg}, 1);
}

PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {	// 绑定部分
    m.def("forward", &ncrelu_forward, py::arg("input"), "NCReLU forward");
}

setup.py

python 复制代码
from setuptools import setup
from torch.utils import cpp_extension


setup(
    name='ncrelu_cpp',
    version='1.0',# 编译后的链接库名称
    py_modules=['ncrelu_cpp'],
    ext_modules=[
        cpp_extension.CppExtension(
            'ncrelu_cpp', ['ncrelu.cpp'],
            extra_compile_args={'cxx': ['-O2']}
            # 待编译文件,及编译函数
        )
    ],
    cmdclass={						       # 执行编译命令设置
        'build_ext': cpp_extension.BuildExtension
    }
)

test.py

python 复制代码
import torch
import ncrelu_cpp
import sys
print(sys.path)
a = torch.randn(4,3)
print(a)
b = ncrelu_cpp.forward(a)

python setup.py install

或pip install .

但是在Windows平台下不知道为什么会报错找不到包,或者找不到函数,很奇怪,但是正常运行没有任何问题

相关推荐
意.远20 分钟前
使用PyTorch实现目标检测边界框转换与可视化
人工智能·pytorch·python·深度学习·神经网络·目标检测
ricky_fan1 小时前
Leetcode39:组合总和——回溯算法
开发语言·c++·leetcode
爱看烟花的码农1 小时前
LeetCode 热题 8/100打卡
c++·python·算法·leetcode
不爱吃于先生1 小时前
Python基础语法速通(自用笔记)
开发语言·python
假意诗人1 小时前
Python3笔记之号称替代pip的uv包管理器
python·pip·uv
共享家95272 小时前
C/C++内存管理:从基础到进阶
c++
ChoSeitaku2 小时前
NO.91十六届蓝桥杯备战|图论基础-图的存储和遍历|邻接矩阵|vector|链式前向星(C++)
c++·蓝桥杯·图论
虾球xz2 小时前
游戏引擎学习第223天
c++·学习·游戏引擎
爱的叹息2 小时前
Java Lambda 表达式详解:发展史、语法、使用场景及代码示例
java·开发语言·python
呼呼~²⁰¹⁷2 小时前
两个树莓派如何通过wifi direct传输视频并显示
python