这是我存储在util.py
中的自定义模块,该模块总结了我使用tensorflow
时读取图像所经历的三步操作
#tf_load_image from path
def load_image(image_path, image_shape, clr_normalize = True ):
'''returns tensor-array on given image path and image_shape [height, width]'''
import tensorflow as tf
image = tf.read_file(image_path)
image = tf.image.decode_jpeg(image, channels=3)
if clr_normalize == True:
image = tf.image.resize_images(image, image_shape) / 127.5 - 1
else:
image = tf.image.resize_images(image, image_shape)
return image
但是,这在处理大量图像负载方面效率很低,因为每次我读“单个图像”时,它通常都会调用import tensorflow as tf
。
我想让此函数从实际导入load_image的tf
的tf继承main.py
命令。
就像..
import tensor flow as tf
from util import load_image
image = load_image("path_string") #where load_image no longer wraps the import tensorflow as tf in itself.
答案 0 :(得分:1)
但这效率很低(...),因为每次我读“单个图像”时,它通常都会调用
import tensorflow as tf
。
已导入的模块在首次导入时被缓存在sys.modules
中(我的意思是“在给定进程中第一次导入模块”),后续调用将从该缓存中检索已导入的模块,因此开销是比您想象的要少。但是无论如何:
我想让此函数从实际导入load_image的main.py的tf继承tf命令。
唯一的方法是将模块显式传递给您的函数,即:
# utils.py
def load_image(tf, ....):
# code here using `tf`
然后
# main.py
import tensorflow as tf
from utils import load_image
im = load_image(tf, ...)
这实际上是完全没有用的:您要做的就是在utils.py中将import语句移出函数:
# utils.py
import tensorflow as tf
def load_image(image_path, image_shape, clr_normalize = True ):
'''returns tensor-array on given image path and image_shape [height, width]'''
import tensorflow as tf
image = tf.read_file(image_path)
image = tf.image.decode_jpeg(image, channels=3)
if clr_normalize:
image = tf.image.resize_images(image, image_shape) / 127.5 - 1
else:
image = tf.image.resize_images(image, image_shape)
return image
FWIW,it IS officially recommanded to put all your imports at the top of the module,在任何其他定义(函数,类等)之前。在函数中的导入仅应作为循环导入的Q&D不得已的修复方法(通常这是确定设计存在问题的肯定信号,实际上应该通过修复设计本身来进行修复)。
答案 1 :(得分:0)
正如@MatrixTai在评论中建议的那样,您可以像这样制作utils.py
:
import tensorflow as tf
def load_image(.........):
............
,在main.py
中,您可以根据需要import util
。