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.
Copyright © 20.06.2017 hadv.de. All Rights Reserved.