def save_model(self, model): """ Save the dictionary to hdf5 file """ se_model = jsonpickler.dump(model) print(se_model) h5file = h5py.File(self.model_file, 'w') def recursive_save_model(h5file_obj, dictionary): for model_key, model_value in dictionary.items(): type_name = type(model_value).__name__ try: if type_name in ['ndarray']: h5file_obj.create_dataset(model_key, (model_value.shape), data=model_value) elif type_name in ['list']: if len(model_value) > 0: list_obj = all( isinstance(x, dict) for x in model_value) if list_obj is False: h5file_obj.create_dataset( model_key, data=json.dumps(model_value)) else: for index, model_item in enumerate( model_value): model_key_item = model_key + "/" + str( index) if model_item is not None: if model_key_item in h5file_obj: recursive_save_model( model_key_item, model_item) else: group = h5file_obj.create_group( model_key_item) recursive_save_model( group, model_item) else: h5file_obj.create_dataset( model_key_item, data=json.dumps(model_item)) else: h5file_obj.create_dataset(model_key, data=model_value) elif type_name in [ 'int', 'int32', 'int64', 'float', 'float32', 'float64', 'str', 'tuple', 'bool', 'None', 'NoneType' ]: if type_name in ['None', 'NoneType']: h5file_obj.create_dataset( model_key, data=json.dumps(model_value)) else: h5file_obj.create_dataset(model_key, data=model_value) elif type_name in ['dict']: if model_key in h5file_obj: recursive_save_model(h5file_obj[model_key], model_value) else: group = h5file_obj.create_group(model_key) recursive_save_model(group, model_value) except Exception as exp: print(model_key, exp, model_value) continue recursive_save_model(h5file, se_model) print("--------------")
try: key_value = h5file_obj.get(key).value model_obj[key] = json.loads(key_value) except Exception as exp: if type(key_value).__name__ in ['ndarray']: model_obj[key] = key_value.tolist() else: model_obj[key] = key_value continue return model_obj reconstructed_model = recursive_load_model(h5file, model_obj) print(reconstructed_model) unloaded_model = jsonpickler.load(reconstructed_model) return unloaded_model''' if __name__ == "__main__": if len(sys.argv) != 1: print("Usage: python todictrecurr.py") exit(1) start_time = time.time() serialize_clf = SerializeClass() X_test, y_test, classifier = serialize_clf.serialize_class() se_classifier = jsonpickler.dump(classifier) deserialize = DeserializeClass(serialize_clf.model_file) de_classifier = deserialize.load_model() #serialize_clf.compute_prediction_score(de_classifier, X_test, y_test) end_time = time.time() print("Program finished in %s seconds" % str(end_time - start_time))