值错误 Tensorflow 在 Django 中加载机器学习项目时



将我们的机器学习项目加载到 Django 服务器时,我们收到以下错误:

回溯(最近一次调用(:文件 "/home/akhil/anaconda3/lib/python3.6/site-packages/django/core/handlers/exception.py", 第 34 行,在内部 响应 = get_response(request( 文件 "/home/akhil/anaconda3/lib/python3.6/site-packages/django/core/handlers/base.py", 126号线,_get_response 响应 = self.process_exception_by_middleware(e, request( 文件 "/home/akhil/anaconda3/lib/python3.6/site-packages/django/core/handlers/base.py", 124号线,_get_response 响应 = wrapped_callback(request, *callback_args, **callback_kwargs( 文件 "/home/akhil/tocoblo/msg/views.py",第 6 行,在索引中 a=fuctioncall.show(( 文件 "/home/akhil/tocoblo/msg/fuctioncall.py",第 6 行,在 show 中 a=Loadmodel.predict_string(( 文件 "/home/akhil/tocoblo/msg/Loadmodel.py",第 69 行,predict_string b=loaded_model.predict(y( File "/home/akhil/anaconda3/lib/python3.6/site-packages/keras/engine/training.py", 第 1164 行,在预测中 self._make_predict_function(( 文件 "/home/akhil/anaconda3/lib/python3.6/site-packages/keras/engine/training.py", 554号线,_make_predict_function **kwargs( 文件 "/home/akhil/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", 2744行,在函数中 返回函数(inputs, outputs, updates=updates, **kwargs( File "/home/akhil/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", 第 2546 行,在带有 tf.control_dependencies(self.outputs( 的初始化中:文件 "/home/akhil/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", 5002行,control_dependencies 返回 get_default_graph((.control_dependencies(control_inputs( 文件 "/home/akhil/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", 4541路,control_dependencies c = self.as_graph_element(c( 文件 "/home/akhil/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", 3488路,as_graph_element 返回self._as_graph_element_locked(对象、allow_tensor、allow_operation( 文件 "/home/akhil/.local/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", 3567行,_as_graph_element_locked raise ValueError("Tensor %s 不是此图的一个元素。 % obj( ValueError: Tensor Tensor("dense_4/Sigmoid:0", shape=(?, 6(, dtype=float32( 不是此图的元素。

加载的代码 Loadmodel.py:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
import sys  
import gzip
import keras
import sys
import pickle
from sklearn.model_selection import train_test_split
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.layers import Dense, Input, LSTM, Embedding, Dropout, Activation
from keras.layers import Bidirectional, GlobalMaxPool1D
from keras.models import Model, Sequential
from keras import initializers, regularizers, constraints, optimizers, layers
from keras.callbacks import ModelCheckpoint
from keras.models import Sequential
from keras.layers import Dense
from keras.models import model_from_json
import numpy
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import json
from pprint import pprint
json_file = open('msg/model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
loaded_model.load_weights("msg/model.h5")
print("Loaded model from disk")
pickle_in = open("msg/dict.pickle","rb")
#pickle_in.encoding = 'latin1'
tokenizer = pickle.load(pickle_in, encoding='latin1') 
#tokenizer = pickle.load(pickle_in)
with open('msg/data.json') as f:
data = json.load(f)
def predict_string():    
maxlen=200
string=""
for j in range(0,120):
flag=0
s=(data["maps"][j]["comment"],)
x=tokenizer.texts_to_sequences(s)
y=pad_sequences(x,maxlen=maxlen)
b=loaded_model.predict(y)
for i in range(0,6):
if(b[0][i]>=0.3):
flag=1
cnt=0
if(flag==1):
for i in range(0,6):
if(b[0][i]>0.3):
cnt=cnt+1
flag=cnt
string=string+str(flag)
return string
`
fuctioncall.py
from . import Loadmodel
from django.http import HttpResponse, JsonResponse

def show():
a=Loadmodel.predict_string()
return ("GOT"+a);

urls.py:

from django.urls import path
from . import views
from . import fuctioncall
urlpatterns = [
path('', views.index, name='index'),
path('<str:com>', views.com, name='com'),
]

如何解决此错误?另外,如何在 Django 服务器中加载机器学习项目并调用它?

在导入之后,添加以下 2 行:

global graph
graph = tf.get_default_graph()

然后,每当尝试对模型运行推理时,请使用:

with graph.as_default():
prediction = mode.predict(...)

希望对:)有所帮助

最新更新