35 device_type_ = torch::kCUDA;
38 device_type_ = torch::kCPU;
42 torch::Device
device(device_type_, device_id_);
47 for (
const auto &name : input_names_) {
48 auto iter = shapes.find(name);
49 if (iter != shapes.end()) {
50 auto blob = std::make_shared<Blob<float>>(iter->second);
51 blobs_.emplace(name, blob);
55 for (
const auto &name : output_names_) {
56 auto iter = shapes.find(name);
57 if (iter != shapes.end()) {
58 auto blob = std::make_shared<Blob<float>>(iter->second);
59 blobs_.emplace(name, blob);
86 torch::Device
device(device_type_, device_id_);
88 std::vector<torch::jit::IValue> torch_inputs;
89 for (
const auto &name : input_names_) {
91 if (blob !=
nullptr) {
92 std::vector<int64_t>
shape(blob->shape().begin(), blob->shape().end());
93 torch::Tensor torch_blob = torch::from_blob(
94 blob->data()->mutable_cpu_data(),
shape, torch::kFloat32);
95 torch_blob = torch_blob.to(
device);
96 torch_inputs.push_back(torch_blob);
105 for (
const auto &name : output_names_) {
107 if (blob !=
nullptr) {
113 std::vector<torch::Tensor> output =
114 net_.forward(torch_inputs).toTensorVector();
117 for (
size_t i = 0; i < output_names_.size(); ++i) {
118 auto blob =
get_blob(output_names_[i]);
119 if (blob !=
nullptr && i < output.size()) {
120 std::vector<int64_t> output_size = output[i].sizes().vec();
121 std::vector<int>
shape(output_size.begin(), output_size.end());
122 blob->Reshape(
shape);
123 blob->set_gpu_data(output[i].data_ptr<float>());