日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

坑 之 tensorflow使用sess.run处理图片时越来越慢,占用内存越来越大的问题

發(fā)布時間:2024/4/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 坑 之 tensorflow使用sess.run处理图片时越来越慢,占用内存越来越大的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在項目中需要使用tensorflow來對圖片進行離線預處理,但是使用sess.run時代碼越來越慢,最后幾分鐘才能處理一張圖片,這可怎么能行,我的數據集有數萬張圖片......

原始代碼

def process(img, .. , .. ,):.......return imgdef main():.......with tf.Session() as sess:for i in range(len(dataset)):img_op = process(...) #構圖動作img = sess.run(img_op).......if __name__ == "__main__":main()

代碼在執(zhí)行的過程中越來越慢,并且占用的內存空間越來越大,這就說明代碼本身是存在問題的。
我們知道,tensorflow在執(zhí)行之前是要先構圖,然后再向圖中feed數據,正常來說,這兩個過程應該是分開進行的,但是由于我們在編寫代碼時的不規(guī)范,就容易在feed數據的過程在向計算圖中添加新的計算節(jié)點,你比如,我這里的img_op = process(.....)本身就是添加計算節(jié)點的動作,又叫做構圖動作,這些動作是非常危險的,不僅會影響運行速度,還會擴大計算圖的規(guī)模,占用過多的內存,有可能會導致程序崩潰。所以導致我代碼運行緩慢的原因是找到了,那么該怎么解決呢?
有兩種方案:1.將構圖動作移動到循環(huán)外。2.再循環(huán)里不斷變換當前的計算圖。
我們來分析以下兩種方法分別適合什么樣的場景:
1.將構圖動作移動到循環(huán)外。代碼如下:

def process(, .. , .. ,):img = tf.placeholder(tf.int64, shape=[,,,], name='input').......return imgdef main():.......img_op = process(...) #構圖動作with tf.Session() as sess:for i in range(len(dataset)):img_np = np.array(..)img = sess.run(img_op, feed_dict = {input:0: img_np}).......if __name__ == "__main__":main()

使用標準的構圖方式建立一個計算圖,使用feed_dict喂入數據,那么聰明的你可能已經發(fā)現了一個問題,就是,如果我的圖片size大小不一怎么辦,沒辦法使用tf.placeholder來占位。沒錯,這種辦法由于是靜態(tài)計算圖的原因,只適用于固定輸入尺寸的處理任務,想要解決剛剛的問題只能使用第二種辦法。
2.再循環(huán)里不斷變換當前的計算圖。代碼如下:

def process(img, .. , .. ,):.......return imgdef main():.......for i in range(len(dataset)):tf.reset_default_graph() #########重置計算圖with tf.Session() as sess:img_op = process(...) #構圖動作,創(chuàng)建計算圖img = sess.run(img_op)tf.get_default_graph().finalize() #關閉當前計算圖.......if __name__ == "__main__":main()

這種辦法,我們發(fā)現,我們每次送入圖中的數據都可以是尺寸不一的,因為在處理每一個數據時都會創(chuàng)建新的計算圖,并且在處理結束后關閉當前計算圖。通過這樣的方式,我們就實現了代碼維護一個動態(tài)的計算圖,就避免了一開始計算圖越來越大所導致的種種問題。

兩種辦法所使用的場景不相同,重點是大家可以理解二者的區(qū)別究竟在哪里,并理解tensorflow的圖計算機制,來選擇適合自己工程的方式

總結

以上是生活随笔為你收集整理的坑 之 tensorflow使用sess.run处理图片时越来越慢,占用内存越来越大的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。