Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何缩短预训练模型的加载时间?_Python_Keras_Deep Learning_Resnet_Transfer Learning - Fatal编程技术网

Python 如何缩短预训练模型的加载时间?

Python 如何缩短预训练模型的加载时间?,python,keras,deep-learning,resnet,transfer-learning,Python,Keras,Deep Learning,Resnet,Transfer Learning,使用ResNet50加载“Imagenet”的权重时,每次加载权重几乎需要10-11秒。 有没有办法缩短装载时间 代码: 所用时间在8-11秒之间。 如果它在3-4秒内加载模型并进行分类,我会很好 提前感谢您可以这样做,即在特定会话中加载模型,然后每当您想要使用模型时,只需设置该特定会话,然后在需要时调用predict: app = Flask(__name__) sess = tf.Session(config=tf_config) graph = tf.get_default_graph()

使用ResNet50加载“Imagenet”的权重时,每次加载权重几乎需要10-11秒。 有没有办法缩短装载时间

代码:

所用时间在8-11秒之间。 如果它在3-4秒内加载模型并进行分类,我会很好


提前感谢

您可以这样做,即在特定会话中加载模型,然后每当您想要使用模型时,只需设置该特定会话,然后在需要时调用predict:

app = Flask(__name__)
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the 
session there has been set
set_session(sess)

model = InceptionV3(weights="imagenet")

@app.route('/object_rec', methods=['POST'])
def object_rec():
   global sess
   global graph
   with graph.as_default():
      set_session(sess)
      model.predict(...)

if __name__ == '__main__':
   app.run(host='0.0.0.0',port=6000,debug=True)

您应该在函数外部实例化模型,以便只加载一次~对于像ResNet这样的大型模型来说,10秒并不令人惊讶。是的,但是在函数之外调用模型是行不通的。事实上,我正在使用flask将代码转换为API,因此当我实例化在函数外部加载的模型时,会给我一个tensor错误。我根据一个tf+flask错误更新了答案,发现这样做会给我一个错误:ValueError:tensor tensor(“fc1000/Softmax:0”,shape=(?,1000),dtype=float32)不是这个图的元素。当我在object_rec()内部调用这个get_model()时,它每次都会重新加载。你不会在object_req内部加载它,而是像我写的那样在外部加载它。要解决此问题,请尝试app.run(…,threaded=False)我得到相同的错误:ValueError:Tensor Tensor(“fc1000/Softmax:0”,shape=(?,1000),dtype=float32)不是此图的元素。仍然存在相同的错误:ValueError:Tensor Tensor(“fc1000/Softmax:0”,shape=(?,1000),dtype=float32)不是此图的元素。是否正在开发、部署?这取决于您正在使用的配置
app = Flask(__name__)
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the 
session there has been set
set_session(sess)

model = InceptionV3(weights="imagenet")

@app.route('/object_rec', methods=['POST'])
def object_rec():
   global sess
   global graph
   with graph.as_default():
      set_session(sess)
      model.predict(...)

if __name__ == '__main__':
   app.run(host='0.0.0.0',port=6000,debug=True)