如何查看tensorflow源代码
剛入門機器學習相關的軟件包時,里面好多函數參數不知道應該怎么填,很茫然,這就需要看他自己的函數是怎么實現的,最起碼知道調用的函數需要什么參數,報錯了也不知道為什么會報錯,如果只是依賴網上查,出錯了就去網上搜,有點不知所以然,以下總結了一些對應方法,需要的點贊、收藏:
如何查看Python函數的源代碼:
inspect庫
inspect模塊用于收集python對象的信息,可以獲取類或者函數的參數信息,源碼,解析堆棧,對對象進行類型檢查等
使用方法:
import tensorflow as tf import inspect##查看文檔定義 inspect.getdoc(tf.compat.v1.constant) #tensorflow 2.0版本 insprct.getdoc(tf.constant) #tensorflow < 2.0#查看源程序路徑 inpect.getsourcefile(tf.compat.v1.constant)輸出結果如下所示:
另外,python還提供了一些底層的函數來查看函數內容:dir(function), help(function), function.__file__, python官網。但是這些函數在查看tensorflow相關函數時不是特別的有效。
另外比較簡單的一種方法是在pycharm中選中一個函數,然后按F4,就可以直接定位tensorflow中的函數了。
如何查看tensorflow底層代碼實現(c,c++):
tensorflow中op的實現基本上都是有底層的一些算法程序,這樣可以充分發揮c,c++的計算效率以及python簡單的優勢,一般在tensorflow中定義新的op需要下面的步驟:
1. 定義op接口并注冊到tensorflow中,
2. 注冊op實現,調用宏REGISTER_KERNEL_BUILDER,如下面的形式:
因此,對于一般的op,在tensorflow源代碼中搜索REGISTER_OP("OpName")和REGISTER_KERNEL_BUILDER(Name("OpName")基本上就可以精確定位到這個op的接口定義和具體實現了。
另外一種方法可以參照博客https://blog.csdn.net/yolan6824/article/details/82620521所示,通過寫一些腳本來進行實現,截圖如下:
import os import sysfindCount = 0 findId = "bidirectional_dynamic_rnn" findDir = "C:/Users/dell/Anaconda3/envs/tensorflow1/Lib" resultDir = "" #自己寫一個目錄 resultFile = os.path.join(resultDir,"bilstm.txt")def writeResultAndPrint(fullPath):file = open(resultFile,'a')file.write(fullPath)file.write("\n")print "write ok!\n"file.close()def findKey(findId,fullPath):file = open(fullPath,'r')content = file.read()file.close()isExist = content.find(findId)if isExist > 0:global findCountfindCount = findCount + 1writeResultAndPrint(fullPath)def findFiles():clean()for dirPath,dirNames,fileNames in os.walk(findDir):for file in fileNames:fullPath = os.path.join(dirPath,file)findKey(findId,fullPath)print "has the string!!:" + str(findCount)def clean():if os.path.exists(resultFile):os.remove(resultFile)if __name__ == '__main__': # a = sys.argv[1:] # findId += a[0] # findDir += a[1] # resultDir += a[2]findFiles()酌情使用!!!
參考文獻:
https://blog.csdn.net/yolan6824/article/details/82620521
總結
以上是生活随笔為你收集整理的如何查看tensorflow源代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python做俄罗斯方块如何显示下一个随
- 下一篇: amqp协议 面试_分布式消息中间件-R