| 107 | } |
| 108 | |
| 109 | std::pair<std::unique_ptr<TensorSliceReader::VarToShapeMap>, |
| 110 | std::unique_ptr<TensorSliceReader::VarToDataTypeMap>> |
| 111 | CheckpointReader::BuildV2VarMaps() { |
| 112 | CHECK(v2_reader_ != nullptr); |
| 113 | CHECK(v2_reader_->status().ok()); |
| 114 | |
| 115 | // First pass: filters out the entries of the slices. |
| 116 | std::unordered_set<string> filtered_keys; |
| 117 | BundleEntryProto entry; |
| 118 | v2_reader_->Seek(kHeaderEntryKey); |
| 119 | for (v2_reader_->Next(); v2_reader_->Valid(); v2_reader_->Next()) { |
| 120 | CHECK(entry.ParseFromArray(v2_reader_->value().data(), |
| 121 | v2_reader_->value().size())) |
| 122 | << entry.InitializationErrorString(); |
| 123 | for (int i = 0; i < entry.slices_size(); ++i) { |
| 124 | const auto& slice_proto = entry.slices(i); |
| 125 | CHECK(filtered_keys |
| 126 | .insert(EncodeTensorNameSlice( |
| 127 | string(v2_reader_->key()) /* full var's name */, |
| 128 | TensorSlice(slice_proto))) |
| 129 | .second); |
| 130 | } |
| 131 | } |
| 132 | |
| 133 | // Second pass: adds the entries, ignoring the filtered keys. |
| 134 | std::unique_ptr<TensorSliceReader::VarToShapeMap> var_to_shape_map( |
| 135 | new TensorSliceReader::VarToShapeMap); |
| 136 | std::unique_ptr<TensorSliceReader::VarToDataTypeMap> var_to_data_type_map( |
| 137 | new TensorSliceReader::VarToDataTypeMap); |
| 138 | v2_reader_->Seek(kHeaderEntryKey); |
| 139 | for (v2_reader_->Next(); v2_reader_->Valid(); v2_reader_->Next()) { |
| 140 | if (filtered_keys.count(string(v2_reader_->key())) > 0) continue; |
| 141 | CHECK(entry.ParseFromArray(v2_reader_->value().data(), |
| 142 | v2_reader_->value().size())) |
| 143 | << entry.InitializationErrorString(); |
| 144 | string key(v2_reader_->key()); |
| 145 | (*var_to_shape_map)[key] = TensorShape(entry.shape()); |
| 146 | (*var_to_data_type_map)[key] = DataType(entry.dtype()); |
| 147 | } |
| 148 | // The returned pointers are owned by the caller. |
| 149 | return std::make_pair(std::move(var_to_shape_map), |
| 150 | std::move(var_to_data_type_map)); |
| 151 | } |
| 152 | |
| 153 | } // namespace checkpoint |
| 154 | } // namespace tensorflow |
nothing calls this directly
no test coverage detected