Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
  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'])
Exemplo n.º 3
0
  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
Exemplo n.º 4
0
  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)
Exemplo n.º 5
0
 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")