您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何解決Tensorflow sess.run導致的內存溢出問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
下面是調用模型進行批量測試的代碼(出現溢出),開始以為導致溢出的原因是數據讀入方式問題引起的,用了tf , PIL和cv等方式讀入圖片數據,發現越來越慢,內存占用飆升,調試時發現是sess.run這里出了問題(隨著for循環進行速度越來越慢)。
# Creates graph from saved GraphDef create_graph(pb_path) # Init tf Session config = tf.ConfigProto() config.gpu_options.allow_growth = True sess = tf.Session(config=config) init = tf.global_variables_initializer() sess.run(init) input_image_tensor = sess.graph.get_tensor_by_name("create_inputs/batch:0") output_tensor_name = sess.graph.get_tensor_by_name("conv6/out_1:0") for filename in os.listdir(image_dir): image_path = os.path.join(image_dir, filename) start = time.time() image_data = cv2.imread(image_path) image_data = cv2.resize(image_data, (w, h)) image_data_1 = image_data - IMG_MEAN input_image = np.expand_dims(image_data_1, 0) raw_output_up = tf.image.resize_bilinear(output_tensor_name, size=[h, w], align_corners=True) raw_output_up = tf.argmax(raw_output_up, axis=3) predict_img = sess.run(raw_output_up, feed_dict={input_image_tensor: input_image}) # 1,height,width predict_img = np.squeeze(predict_img) # height, width voc_palette = visual.make_palette(3) masked_im = visual.vis_seg(image_data, predict_img, voc_palette) cv2.imwrite("%s_pred.png" % (save_dir + filename.split(".")[0]), masked_im) print(time.time() - start) print(">>>>>>Done")
下面是解決溢出問題的代碼(將部分代碼放在for循環外)
# Creates graph from saved GraphDef create_graph(pb_path) # Init tf Session config = tf.ConfigProto() config.gpu_options.allow_growth = True sess = tf.Session(config=config) init = tf.global_variables_initializer() sess.run(init) input_image_tensor = sess.graph.get_tensor_by_name("create_inputs/batch:0") output_tensor_name = sess.graph.get_tensor_by_name("conv6/out_1:0") ############################################################################################################## raw_output_up = tf.image.resize_bilinear(output_tensor_name, size=[h, w], align_corners=True) raw_output_up = tf.argmax(raw_output_up, axis=3) ############################################################################################################## for filename in os.listdir(image_dir): image_path = os.path.join(image_dir, filename) start = time.time() image_data = cv2.imread(image_path) image_data = cv2.resize(image_data, (w, h)) image_data_1 = image_data - IMG_MEAN input_image = np.expand_dims(image_data_1, 0) predict_img = sess.run(raw_output_up, feed_dict={input_image_tensor: input_image}) # 1,height,width predict_img = np.squeeze(predict_img) # height, width voc_palette = visual.make_palette(3) masked_im = visual.vis_seg(image_data, predict_img, voc_palette) cv2.imwrite("%s_pred.png" % (save_dir + filename.split(".")[0]), masked_im) print(time.time() - start) print(">>>>>>Done")
關于“如何解決Tensorflow sess.run導致的內存溢出問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。