create 1-D const op, filled by zeros
| 831 | |
| 832 | // create 1-D const op, filled by zeros |
| 833 | Status CreateDefaultValueNode(Graph* graph, int dim_size, |
| 834 | Node** new_node, DataType type, |
| 835 | const std::string& name) { |
| 836 | NodeDef const_def; |
| 837 | const_def.set_name(name); |
| 838 | const_def.set_op("Const"); |
| 839 | auto* attr = const_def.mutable_attr(); |
| 840 | (*attr)["dtype"].set_type(type); |
| 841 | Tensor const_tensor(type, TensorShape({dim_size})); |
| 842 | for (int i = 0; i < dim_size; ++i) { |
| 843 | switch (type) { |
| 844 | case DT_INT32: { |
| 845 | const_tensor.vec<int>()(i) = 0; |
| 846 | break; |
| 847 | } |
| 848 | case DT_INT64: { |
| 849 | const_tensor.vec<int64>()(i) = 0; |
| 850 | break; |
| 851 | } |
| 852 | case DT_FLOAT: { |
| 853 | const_tensor.vec<float>()(i) = 0.0; |
| 854 | break; |
| 855 | } |
| 856 | case DT_DOUBLE: { |
| 857 | const_tensor.vec<double>()(i) = 0.0; |
| 858 | break; |
| 859 | } |
| 860 | case DT_STRING: { |
| 861 | const_tensor.vec<std::string>()(i) = ""; |
| 862 | break; |
| 863 | } |
| 864 | default: { |
| 865 | LOG(FATAL) << "CreateDefaultValueNode not support type : " |
| 866 | << type; |
| 867 | } |
| 868 | } |
| 869 | } |
| 870 | const_tensor.AsProtoTensorContent((*attr)["value"].mutable_tensor()); |
| 871 | |
| 872 | Status s_add_node; |
| 873 | *new_node = graph->AddNode(const_def, &s_add_node); |
| 874 | return s_add_node; |
| 875 | } |
| 876 | |
| 877 | Status GetNodeAttr(const Node* node, |
| 878 | const std::string& attr_name, |
no test coverage detected