2017-01-07 169 views
0

我添加了一個自定義的操作並使用ResourceMgr創建ResourceBase的子類來存儲一些狀態,以及如何將狀態寫入檢查點文件。如何保存和恢復ResourceBase?

class FeatureTransformMap : public ResourceBase { 
public: 
    FeatureTransformMap(int32_t max_feature_count) : max_feature_count_(max_feature_count), feature_index_(0) { 
     cout<<"Max feature count is:"<<max_feature_count_<<endl; 
    } 
    string DebugString() {return "FeatureTransformMap";} 

    int32_t GetFeatureIndex(const string& feature) { 
     { 
      mutex_lock l(mu_); 
      feature_index_ += 1; 
     } 
     return feature_index_; 
    } 



private: 
    tensorflow::mutex mu_; 
    uint32_t feature_index_ GUARDED_BY(mu_); 
    const uint32_t max_feature_count_; 
}; 

在上面的代碼中,我怎麼能寫feature_index_檢查點文件。

回答

1

沒有通用的方法來節省tensorflow::ResourceBase實例,但你可以實現自己的檢查點支持如下:

  1. 定義一個序列化映射到的狀態,您FeatureTransformMap類的方法,和反序列化它來自一個或多個tensorflow::Tensor對象。有關示例,請參閱MutableHashTableOfScalars::ExportValues()MutableHashTableOfScalars::ImportValues()

  2. 實現新的TensorFlow OpKernel調用序列化和反序列化方法的類。有關示例,請參閱LookupTableExportOpLookupTableImportOp

  3. 在Python,落實BaseSaverBuilder.SaveableObject子類爲您的資源,其中包括新的OPS的調用。有關示例,請參閱MutableDenseHashTable._Saveable

  4. 在Python中,創建資源實例時,將其添加到tf.GraphKeys.SAVEABLE_OBJECTS的集合中。例如,請參閱MutableDenseHashTablehere