| 300 | } |
| 301 | |
| 302 | tensorflow::Tensor Proto2Tensor(const tensorflow::eas::ArrayProto& input) { |
| 303 | tensorflow::TensorShape tensor_shape; |
| 304 | tensorflow::int64 total_size = 1; |
| 305 | for (int i = 0; i < input.array_shape().dim_size(); ++i) { |
| 306 | tensor_shape.AddDim(input.array_shape().dim(i)); |
| 307 | total_size *= input.array_shape().dim(i); |
| 308 | } |
| 309 | |
| 310 | switch (input.dtype()) { |
| 311 | case tensorflow::eas::DT_FLOAT: { |
| 312 | if (total_size != input.float_val_size()) { |
| 313 | LOG(FATAL) << "Invalid input."; |
| 314 | } |
| 315 | tensorflow::Tensor tensor(tensorflow::DT_FLOAT, tensor_shape); |
| 316 | auto flat = tensor.flat<float>(); |
| 317 | memcpy(flat.data(), input.float_val().data(), |
| 318 | input.float_val_size() * sizeof(float)); |
| 319 | |
| 320 | return tensor; |
| 321 | } |
| 322 | case tensorflow::eas::DT_INT64: { |
| 323 | if (total_size != input.int64_val_size()) { |
| 324 | LOG(FATAL) << "Invalid input."; |
| 325 | } |
| 326 | tensorflow::Tensor tensor(tensorflow::DT_INT64, tensor_shape); |
| 327 | auto flat = tensor.flat<tensorflow::int64>(); |
| 328 | memcpy(flat.data(), input.int64_val().data(), |
| 329 | input.int64_val_size() * sizeof(int64_t)); |
| 330 | |
| 331 | return tensor; |
| 332 | } |
| 333 | case tensorflow::eas::DT_STRING: { |
| 334 | if (total_size != input.string_val_size()) { |
| 335 | LOG(FATAL) << "Invalid input."; |
| 336 | } |
| 337 | tensorflow::Tensor tensor(tensorflow::DT_STRING, tensor_shape); |
| 338 | auto flat = tensor.flat<std::string>(); |
| 339 | for (int i = 0; i < input.string_val_size(); i++) { |
| 340 | flat(i) = input.string_val(i); |
| 341 | } |
| 342 | return tensor; |
| 343 | } |
| 344 | default: { |
| 345 | LOG(FATAL) << "Input Tensor Not Support this DataType"; |
| 346 | break; |
| 347 | } |
| 348 | } |
| 349 | |
| 350 | return tensorflow::Tensor(); |
| 351 | } |
| 352 | |
| 353 | |
| 354 | int main() { |