MCPcopy Create free account
hub / github.com/apple/ml-pointersect / load_state_dict

Method load_state_dict

cdslib/core/models/base_model.py:169–229  ·  view source on GitHub ↗

Load a pretrained model given a state dictionary.

(
        self,
        state_dict: T.Dict[str, T.Any],
    )

Source from the content-addressed store, hash-verified

167 v.eval()
168
169 def load_state_dict(
170 self,
171 state_dict: T.Dict[str, T.Any],
172 ):
173 """Load a pretrained model given a state dictionary."""
174
175 loaded_names = set()
176
177 # gather all base models
178 nets = inspect.getmembers(self, lambda x: isinstance(x, BaseModel)) # name, net
179 for name, net in nets:
180 if name in state_dict:
181 getattr(self, name).load_state_dict(state_dict[name])
182 else:
183 warnings.warn(f"{name} not exist in checkpoint")
184 loaded_names.add(name)
185
186 # gather all nn.modules
187 nets = inspect.getmembers(self, lambda x: isinstance(x, torch.nn.Module)) # name, net
188 for name, net in nets:
189 if name in state_dict:
190 try:
191 getattr(self, name).load_state_dict(state_dict[name])
192 except:
193 new_sub_state_dict = OrderedDict()
194 for key, val in state_dict[name].items():
195 if key.startswith("module."):
196 new_key = key[7:]
197 new_sub_state_dict[new_key] = val
198 else:
199 new_sub_state_dict[key] = val
200 getattr(self, name).load_state_dict(new_sub_state_dict)
201 else:
202 warnings.warn(f"{name} not exist in checkpoint")
203 loaded_names.add(name)
204
205 # load those in var_names_to_load other things
206 buffer_names = state_dict.get("buffer_names", set())
207 parameter_names = state_dict.get("parameter_names", set())
208
209 var_names_to_save = state_dict.get("var_names_to_save", set())
210 self.register_var_to_save(
211 var_name=var_names_to_save,
212 )
213
214 var_names_to_load = state_dict.get("var_names_to_load", set())
215 self.register_var_to_save(
216 var_name=var_names_to_load,
217 )
218
219 # load only those in var_names_to_load
220 for name in var_names_to_load - loaded_names:
221 if name not in state_dict:
222 continue
223 setattr(self, name, state_dict[name])
224
225 if name in buffer_names:
226 self.register_buffer(name, state_dict[name], persistent=True)

Callers 2

loadMethod · 0.45
load_modelFunction · 0.45

Calls 4

register_var_to_saveMethod · 0.95
register_bufferMethod · 0.95
register_parameterMethod · 0.95
getMethod · 0.80

Tested by

no test coverage detected