【发布时间】:2021-12-13 22:44:21
【问题描述】:
我在 Python 平台上训练了我的模型。训练后,我面对每个随机输入的相同输出。我通过使用 model.eval() 方法停用 BatchNorm 层解决了这个问题。但是当我尝试使用Pytorch C++ API 在 C++ 中加载我训练有素的模型时,这个问题再次出现,而model.eval() 此时没有帮助我。我再次面对每个随机输入的相同输出。
这是我的 C++ 模型加载函数:
std::vector<torch::jit::script::Module> module_loader(std::string file_addr) {
std::vector<torch::jit::script::Module> modul;
torch::jit::script::Module model = torch::jit::load(file_addr);
model.eval();
modul.push_back(model);
return modul;
}
这是我的测试功能:
void test(std::vector<torch::jit::script::Module> &model) {
std::vector<torch::jit::IValue> inputs;
inputs.push_back(torch::rand({1, 2, 64, 172}));
torch::Tensor output = model[0].forward(inputs).toTensor();
std::cout << output << std::endl;
}
毕竟,我把它们放在main() 中是这样的:
int main() {
auto modul = module_loader(MODEL_ADDRESS);
test(modul);
}
MODEL_ADDRESS 是我本地磁盘上训练模型地址的宏。
程序每次运行的输出都是这样的:
0.3231 [ CPUFloatType{1,1} ]
【问题讨论】:
标签: python c++ deep-learning pytorch