27int main(
int argc,
char** argv) {
28 google::ParseCommandLineFlags(&argc, &argv,
true);
30 torch::jit::script::Module model;
31 std::cout <<
"is_optimized:" << model.is_optimized() << std::endl;
32 std::cout <<
"parameter size:" << model.parameters().size() << std::endl;
34 torch::Device
device(torch::kCPU);
36 torch::set_num_threads(1);
39 model = torch::jit::load(FLAGS_model_file,
device);
40 }
catch (
const c10::Error& e) {
41 std::cerr <<
"error loading the model\n";
44 std::cout <<
"is_optimized:" << model.is_optimized() << std::endl;
45 std::cout <<
"after loading parameter size:" << model.parameters().size()
48 std::vector<torch::jit::IValue> torch_inputs;
50 int input_dim = 2 * 3 * 224 * 224 + 2 * 14;
51 std::vector<double> feature_values(input_dim, 0.5);
53 std::vector<torch::jit::IValue> inputs;
54 std::vector<torch::jit::IValue> tuple;
55 tuple.push_back(torch::zeros({2, 3, 224, 224}));
56 tuple.push_back(torch::zeros({2, 14}));
57 inputs.push_back(torch::ivalue::Tuple::create(tuple));
59 auto torch_output = model.forward(inputs);
60 std::cout << torch_output << std::endl;
61 std::cout <<
"isDoubleList:" << torch_output.isDoubleList() << std::endl;
62 std::cout <<
"isTensorList:" << torch_output.isTensorList() << std::endl;
63 std::cout <<
"isTensor:" << torch_output.isTensor() << std::endl;
64 auto torch_output_tensor = torch_output.toTensor();
65 std::cout <<
"tensor dim:" << torch_output_tensor.dim() << std::endl;
66 std::cout <<
"tensor sizes:" << torch_output_tensor.sizes() << std::endl;
67 std::cout <<
"tensor toString:" << torch_output_tensor.toString()
69 std::cout <<
"tensor [0,0,0] element:" << torch_output_tensor[0][0][0]
71 std::cout <<
"tensor [0,0,1] element:" << torch_output_tensor[0][0][1]
73 std::cout <<
"tensor [0,0,0] element:"
74 << double(torch_output_tensor.accessor<
float, 3>()[0][0][0])
76 std::cout <<
"tensor [0,0,1] element:"
77 << double(torch_output_tensor.accessor<
float, 3>()[0][0][1])