Hi. I would like to use the python model for fine tuning in C++(Libtorch)
The model is for example.
------------------- PYTHON
model = torchvision.models.resnet50(pretrained=True)
for param in model.parameters():
param.requires_grad = False
model.fc = torch.nn.Linear(model.fc.in_features, 2)
traced_script_module = torch.jit.trace(model, img_batch)
traced_script_module.save(save_path)
Load this model in C++
--------------------- C++
torch::jit::script::Module module;
module = torch::jit::load("./model/model_resnet50_classification2_TL.pt");
module.to(device(torch::kCPU));
/* ****************************************
【 HOW DO I SET IT IN OPTIMIZER? 】
[NG1] torch::optim::Adam optimizer(module.parameters(), torch::optim::AdamOptions(1e-3));
[NG2] torch::jit::parameter_list params = module.parameters();
std::transform(params.begin(), params.end(), std::back_inserter(paramsVector),
(const torch::jit::IValue& ivalue) { return ivalue.toTensor(); });
torch::optim::Adam optimizer(paramsVector, torch::optim::AdamOptions(1e-3));
[NG3] std::vectortorch::Tensor paramsVector;
int i = 0;
for (const auto& params : module.parameters()) {
std::cout << " " << params.requires_grad() << std::endl;
paramsVector.push_back(params[i].variable_data());
i++;
}
torch::optim::Adam optimizer(paramsVector, torch::optim::AdamOptions(1e-3));
**************************************** */
// ..... MAKE INPUT TENSOR (IMAGE 3*224*224) & Labels ......
......... EPOCH & BATCH LOOP
module.train();
optimizer.zero_grad();
output = module.forward({ input }).toTensor();
loss = torch::nll_loss(torch::log_softmax(output, 1), label);
loss.backward();
optimizer.step();