Entw.: Tensorflow mit Delphi (2)

Im Verzeichnis tensorflow/c der GIT-Repository befindet sich ein Programm c_api_test.cc zum Testen der C-API. Eine Umsetzung dieses Programm nach Delphi zeigte aber, dass die bisher vorliegende C-API von Tensorflow nicht ausreicht, um das C-Testprogramm nach Delphi umzusetzen. Es bedurfte einer Erweiterung der C-API und der Umsetzung nach Delphi. Man hat nun jederzeit die Möglichkeit die zukünftigen Änderungen an der C-API und deren Delphi-Umsetzung schnell zu testen. Dadurch sind notwendige Anpassungen an der Delphi-API nur mit geringem Aufwand möglich.

Erweiterung der C-API

Die folgende C-Source zeigt die Erweiterung als Teil einer Header-Datei.

#ifdef
 __cplusplus
extern "C" {
#endif

TF_CAPI_EXPORT extern void* TFEX_GetGraphDefFromBuffer(TF_Buffer* graph_def_buf);

TF_CAPI_EXPORT extern void* TFEX_GetNodeDefFromBuffer(TF_Buffer* node_def_buf);

TF_CAPI_EXPORT extern void* TFEX_GetAttrValueFromBuffer(TF_Buffer* attr_value_buf);

TF_CAPI_EXPORT extern void* TFEX_GetOpListFromBuffer(TF_Buffer* op_list_buf);

TF_CAPI_EXPORT extern void  TFEX_DeleteOpList(void* op_list);

TF_CAPI_EXPORT extern int   TFEX_GetOpListCount(void* op_list);

TF_CAPI_EXPORT extern void* TFEX_GetOpDef(void* op_list, int index);

TF_CAPI_EXPORT extern const char* TFEX_GetOpDefName(const void* op_def);

TF_CAPI_EXPORT extern int   TFEX_GetOpDefInputArgCount(const void* op_def);

TF_CAPI_EXPORT extern void* TFEX_GetOpDefInputArg(const void* op_def, int idx);

TF_CAPI_EXPORT extern int   TFEX_GetOpDefOutputArgCount(const void* op_def);

TF_CAPI_EXPORT extern void* TFEX_GetOpDefOutputArg(const void* op_def, int idx);

TF_CAPI_EXPORT extern const char* TFEX_GetOpDefArgDefName(const void* arg_def);

TF_CAPI_EXPORT extern const char* TFEX_GetOpDefArgDefDescription(const void* arg_def);

TF_CAPI_EXPORT extern int TFEX_GetOpDefArgDefDataType(const void* arg_def);

TF_CAPI_EXPORT extern const char* TFEX_GetOpDefArgDefTypeAttr(const void* arg_def);

TF_CAPI_EXPORT extern int   TFEX_GetOpDefAttrCount(const void* op_def) ;

TF_CAPI_EXPORT extern void* TFEX_GetOpDefAttr(const void* op_def, int idx);

TF_CAPI_EXPORT extern const char* TFEX_GetOpDefAttrName(const void* op_def_attr);

TF_CAPI_EXPORT extern const char* TFEX_GetOpDefAttrDescription(const void* op_def_attr);

TF_CAPI_EXPORT extern void* TFEX_GetOpDefAttrMetadata(const void* op_def_attr);

TF_CAPI_EXPORT extern const char* TFEX_GetOpDefAttrType(const void* op_def_attr);

TF_CAPI_EXPORT extern void* TFEX_GetOpDefAttrDefaultValue(const void* op_def_attr);

TF_CAPI_EXPORT extern void* TFEX_GetAttrValue(TF_Operation* oper, const char* attr_name,
                            TF_Status* s);

TF_CAPI_EXPORT extern int   TFEX_GetAttrValueCase(const void* attr_value);

TF_CAPI_EXPORT extern int   TFEX_GetAttrValueType(const void* attr_value);

TF_CAPI_EXPORT extern int   TFEX_AttrValueHasTensor(const void* attr_value);

TF_CAPI_EXPORT extern void* TFEX_GetAttrValue_tensor(const void* attr_value);

TF_CAPI_EXPORT extern const char* TFEX_GetAttrValue_s(const void* attr_value);

TF_CAPI_EXPORT extern int64_t TFEX_GetAttrValue_i(const void* attr_value);
	
TF_CAPI_EXPORT extern float TFEX_GetAttrValue_f(const void* attr_value);

TF_CAPI_EXPORT extern void* TFEX_GraphToGraphDef(const void* graph);

TF_CAPI_EXPORT extern void  TFEX_DeleteGraphDef(void* graph_def);

TF_CAPI_EXPORT extern int   TFEX_GetNodeDefsCount(const void* graph_def);

TF_CAPI_EXPORT extern void* TFEX_GetNodeDef(const void* graph_def, int idx);

TF_CAPI_EXPORT extern const char* TFEX_GetNodeDefOp(const void* node_def);

TF_CAPI_EXPORT extern const char* TFEX_GetNodeDefName(const void* node_def);

TF_CAPI_EXPORT extern int   TFEX_GetNodeDefInputCount(const void* node_def);

TF_CAPI_EXPORT extern const char* TFEX_GetNodeDefInput(const void* node_def, int idx);

TF_CAPI_EXPORT extern void* TFEX_GetNodeDefAttrMap(const void* node_def);

TF_CAPI_EXPORT extern const void* TFEX_GetAttrMapAt(const void* map, const char* key);

TF_CAPI_EXPORT extern int  TFEX_TensorIntValCount(const void* tensor);

TF_CAPI_EXPORT extern int  TFEX_TensorIntVal(const void* tensor, int idx);

#ifdef __cplusplus
} /* end extern "C" */
#endif

Die Erweiterung der C-API finden Sie in meiner Github-Repository . Die Repository enthält im Verzeichnis c_api_extensions die Dateien c_api_ex.h und c_api_ex.cc.