python - 不支持在图形模式下调用“myModel.predict”
问题描述
在开发图像识别网站时遇到了一些问题
[2021-07-19 02:27:21,880] ERROR in app: Exception on /uploads/comedy3.jpg [GET]
Traceback (most recent call last):
File "C:\Users\Ram Raj\anaconda3\envs\Tutorial\lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\Ram Raj\anaconda3\envs\Tutorial\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\Ram Raj\anaconda3\envs\Tutorial\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Ram Raj\anaconda3\envs\Tutorial\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\Ram Raj\anaconda3\envs\Tutorial\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\Ram Raj\anaconda3\envs\Tutorial\lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\Ram Raj\Desktop\Ai project\website.py", line 83, in uploaded_file
result = myModel.predict(test_image)
File "C:\Users\Ram Raj\anaconda3\envs\Tutorial\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1671, in predict
version_utils.disallow_legacy_graph('Model', 'predict')
File "C:\Users\Ram Raj\anaconda3\envs\Tutorial\lib\site-packages\tensorflow\python\keras\utils\version_utils.py", line 130, in disallow_legacy_graph
raise ValueError(error_msg)
ValueError: Calling `Model.predict` in graph mode is not supported when the `Model` instance was constructed with eager mode enabled. Please construct your `Model` instance in graph mode or call `Model.predict` with eager mode enabled.
这是代码
from flask import render_template
from flask import Flask, flash, request, redirect, url_for
from werkzeug.utils import secure_filename
import numpy as np
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import load_model
from keras.backend import set_session
import tensorflow as tf
app = Flask(__name__)
def load_model_from_file():
mySession = tf.compat.v1.Session()
set_session(mySession)
myModel = load_model('saved_model.h5')
myGraph = tf.compat.v1.get_default_graph()
return (mySession, myModel, myGraph)
我刚刚展示了它只显示错误的部分。希望能看懂
@app.route('/uploads/<filename>')
def uploaded_file(filename):
test_image = image.load_img(UPLOAD_FOLDER+"/"+filename, target_size =(150,150))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis=0)
mySession = app.config['SESSION']
myModel = app.config['MODEL']
myGraph = app.config['GRAPH']
with myGraph.as_default():
set_session(mySession)
result = myModel.predict(test_image)
image_src = "/"+UPLOAD_FOLDER +"/"+filename
if result[0] < 0.5 :
answer = "<div class='col text-center'><img width='150' height='150' src='"+image_src+"' class='img-thumbnail' /><h4>guess:"+x+" "+str(result[0])+"</h4></div><div class='col'></div><div class='w-100'></div>"
else:
answer = "<div class='col'></div><div class='col text-center'><img width='150' height='150' src='"+image_src+"' class='img-thumbnail' /><h4>guess:"+y+" "+str(result[0])+"</h4></div><div class='w-100'></div>"
results.append(answer)
return render_template('index.html',myX=x,myY=y,mySampleX=samplex,mySampleY=sampley,len=len(results),results=results)
def main():
(mySession, myModel, myGraph) = load_model_from_file()
app.config['SECRET_KEY'] = 'super secret key'
app.config['SESSION'] = mySession
app.config['MODEL'] = myModel
app.config['GRAPH'] = myGraph
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
app.run()
results = []
main()
关于我做错在哪里的任何想法?因为当我在 tensorflow 网站上搜索它时,我也无法理解。我正在使用的版本是 2.5.0 在此先感谢您的帮助
解决方案
ValueError:在启用了 Eager 模式的情况下构造实例
Model.predict
时,不支持以图形模式调用。启用急切模式。Model
Please construct your Model instance in graph mode or call Model.predict
正如错误所说,加载模型图模式并调用 Model.predict 函数。
将模型加载到图中,如下所示:
with graph.as_default():
#Load your model
#call model.predict
Model.predict()
return
推荐阅读
- c# - 是否可以一次阻止多个设备同步到 Google 云端硬盘?
- javascript - 响应时字体大小不同
- python - 如何使用另一个数组更改数组的内容?
- node.js - 将 XLSX 文件存储在 CosmosDB 中并能够将结果分块发送回的最佳方法?
- c++ - 我将如何在 C++ 中实现处理器调度模拟器?
- java - 在 spring mvc 中创建具有自动装配功能的基本控制器
- laravel - 在 Laravel 中多次构建单例绑定
- java - Oracle 泛型示例中没有带有擦除的警告
- angular - 无法在 Angular 7 中绑定到“formGroup”?
- swift - 以日期格式获取当前时间