我正在尝试在CUDA上编写简单模型的示例。我已经运行了一些他们正在CPU和GPU上工作的示例。例如,我尝试了MNIST可以正常运行的示例。但是,我尝试使用bias=false
创建卷积层,并且崩溃了。
#include <torch/torch.h>
// Define a new Module.
struct Net : torch::nn::Module {
Net() {
torch::nn::Conv2d conv = torch::nn::Conv2d(torch::nn::Conv2dOptions(3, 16, 3)
.bias(false)
.stride(1)
.padding(1)
);
module->push_back(conv);
register_module("Layer",module);
}
torch::Tensor forward(torch::Tensor x) {
/**SOME FORWARD**/
return x;
}
torch::nn::Sequential module;
};
int main() {
auto net = std::make_shared<Net>();
net->to(at::kCUDA); // It crashes here
return 0;
}
起初,我以为它正在将模型移至CUDA,但它也因net->to(at::kCPU);
而崩溃。
它抛出
Exception thrown at 0x00007FFB4A2EA839 in Object_detection.exe: Microsoft
C++ exception: c10::Error at memory location 0x000000635F0FDE90.
Unhandled exception at 0x00007FFB4A2EA839 in Object_detection.exe: Microsoft
C++ exception: c10::Error at memory location 0x000000635F0FDE90.
仅当删除net->to(at::kCUDA);
并且模型将作为默认值或通过设置bias=true
在CPU上运行时,我才能运行此示例。
有人可以解释为什么这样做吗?