def save_state(self, hmodel, iterid, lap, evBound, doFinal=False): ''' Save state of the hmodel's global parameters and evBound ''' traceEvery = self.outputParams['traceEvery'] if traceEvery <= 0: traceEvery = -1 doTrace = isEvenlyDivisibleFloat(lap, traceEvery) or iterid < 3 if traceEvery > 0 and (doFinal or doTrace) and lap not in self.TraceLaps: # Record current evidence self.evTrace.append(evBound) self.TraceLaps.add(lap) # Exit here if we're not saving to disk if self.savedir is None: return # Record current state to plain-text files with open(self.mkfile('laps.txt'), 'a') as f: f.write('%.4f\n' % (lap)) with open(self.mkfile('evidence.txt'), 'a') as f: f.write('%.9e\n' % (evBound)) with open(self.mkfile('nObs.txt'), 'a') as f: f.write('%d\n' % (self.nObsProcessed)) with open(self.mkfile('times.txt'), 'a') as f: f.write('%.3f\n' % (self.get_elapsed_time())) if self.hasMove('birth') or self.hasMove('merge'): with open(self.mkfile('K.txt'), 'a') as f: f.write('%d\n' % (hmodel.obsModel.K)) saveEvery = self.outputParams['saveEvery'] if saveEvery <= 0 or self.savedir is None: return doSave = isEvenlyDivisibleFloat(lap, saveEvery) or iterid < 3 if (doFinal or doSave) and iterid not in self.SavedIters: self.SavedIters.add(iterid) with open(self.mkfile('laps-saved-params.txt'), 'a') as f: f.write('%.4f\n' % (lap)) prefix = ModelWriter.makePrefixForLap(lap) ModelWriter.save_model(hmodel, self.savedir, prefix, doSavePriorInfo=(iterid < 1), doLinkBest=True)
def test_save_then_load_same_model(self, prefix='Test'): ''' Verify that we can save model H to disk, load it back in as G, and get same results from calculations on H,G with same inputs ''' ModelWriter.save_model(self.hmodel, '/tmp/', prefix) gmodel = ModelReader.load_model('/tmp/', prefix) assert type(gmodel.allocModel) == type(self.hmodel.allocModel) assert gmodel.allocModel.K == self.hmodel.allocModel.K K = gmodel.allocModel.K for k in range(K): gSig = gmodel.obsModel.comp[k].ECovMat() hSig = self.hmodel.obsModel.comp[k].ECovMat() assert np.allclose(gSig, hSig) # Make sure we get same responsibilities before and after hLP = self.hmodel.calc_local_params(self.Data) gLP = gmodel.calc_local_params(self.Data) assert np.allclose(hLP['resp'], gLP['resp'])
def setUp(self, K=7): ''' Create random data, and a K component MixModel to go with it Call this original model "hmodel". We copy hmodel into "modelB", and then save to file via save_model() ''' self.K = K PRNG = np.random.RandomState(867) X = PRNG.randn(100,2) self.Data = XData(X=X) aPDict = dict(alpha0=1.0) oPDict = dict(min_covar=1e-9) self.hmodel = HModel.CreateEntireModel('EM','MixModel','ZMGauss', aPDict, oPDict, self.Data) modelB = self.hmodel.copy() initParams = dict(initname='randexamples', seed=0, K=self.K) modelB.init_global_params(self.Data, **initParams) ModelWriter.save_model(modelB, '/tmp/', 'Test') self.modelB = modelB
def save_state(self, hmodel, iterid, lap, evBound, doFinal=False): ''' Save state of the hmodel's global parameters and evBound ''' traceEvery = self.outputParams['traceEvery'] if traceEvery <= 0: traceEvery = -1 doTrace = isEvenlyDivisibleFloat(lap, traceEvery) or iterid < 3 if traceEvery > 0 and (doFinal or doTrace) and lap not in self.TraceLaps: # Record current evidence self.evTrace.append(evBound) self.TraceLaps.add(lap) # Exit here if we're not saving to disk if self.savedir is None: return # Record current state to plain-text files with open( self.mkfile('laps.txt'), 'a') as f: f.write('%.4f\n' % (lap)) with open( self.mkfile('evidence.txt'), 'a') as f: f.write('%.9e\n' % (evBound)) with open( self.mkfile('nObs.txt'), 'a') as f: f.write('%d\n' % (self.nObsProcessed)) with open( self.mkfile('times.txt'), 'a') as f: f.write('%.3f\n' % (self.get_elapsed_time())) if self.hasMove('birth') or self.hasMove('merge'): with open( self.mkfile('K.txt'), 'a') as f: f.write('%d\n' % (hmodel.obsModel.K)) saveEvery = self.outputParams['saveEvery'] if saveEvery <= 0 or self.savedir is None: return doSave = isEvenlyDivisibleFloat(lap, saveEvery) or iterid < 3 if (doFinal or doSave) and iterid not in self.SavedIters: self.SavedIters.add(iterid) with open(self.mkfile('laps-saved-params.txt'), 'a') as f: f.write('%.4f\n' % (lap)) prefix = ModelWriter.makePrefixForLap(lap) ModelWriter.save_model(hmodel, self.savedir, prefix, doSavePriorInfo=(iterid<1), doLinkBest=True)
def saveParams(self, lap, hmodel, SS=None, **kwargs): ''' Save current model to disk ''' if lap in self.SavedIters or self.task_output_path is None: return ElapsedTimeLogger.startEvent("io", "saveparams") self.SavedIters.add(lap) prefix = ModelWriter.makePrefixForLap(lap) with open(self.mkfile('snapshot_lap.txt'), 'a') as f: f.write('%.4f\n' % (lap)) with open(self.mkfile('snapshot_elapsed_time_sec.txt'), 'a') as f: f.write('%.3f\n' % (self.get_elapsed_time())) if self.outputParams['doSaveFullModel']: ModelWriter.save_model( hmodel, self.task_output_path, prefix, doSavePriorInfo=np.allclose(lap, 0.0), doLinkBest=True, doSaveObsModel=self.outputParams['doSaveObsModel']) if self.outputParams['doSaveTopicModel']: ModelWriter.saveTopicModel( hmodel, SS, self.task_output_path, prefix, **kwargs) ElapsedTimeLogger.stopEvent("io", "saveparams")