1

I have created an LSTM model, when run it I get the following error:

 (...) File "/Users/myfolder/Desktop/Project-Deep-Learning-master/Flask_App/app.py", line 40, in <module>

    graph = tf.get_default_graph()

AttributeError: module 'tensorflow' has no attribute 'get_default_graph'

I read in a different post about this. The error might be caused by the version that I'm currently using for TensorFlow.

I downgraded my TensorFlow version to the latest stable version (1.13.1). It didn't solve the issue, the error persists.

I'm new to using keras and machine learning so I apologize if this is something obvious.

My code is, app.py

from __future__ import division, print_function
# coding=utf-8
import sys
import os
import glob
import re
import numpy as np

# Keras
from keras.applications.imagenet_utils import preprocess_input, decode_predictions
from keras.models import load_model
from keras.preprocessing import image


from flask import Flask, redirect, url_for, request, render_template
from werkzeug.utils import secure_filename
from gevent.wsgi import WSGIServer

# Define a flask app
app = Flask(__name__)

# Model saved with Keras model.save()
MODEL_PATH = 'models/my_model.h5'

#Load your trained model
model = load_model(MODEL_PATH)
model._make_predict_function()          # Necessary to make everything ready to run on the GPU ahead of time
print('Model loaded. Start serving...')

# You can also use pretrained model from Keras
# Check https://keras.io/applications/
#from keras.applications.resnet50 import ResNet50
#model = ResNet50(weights='imagenet')
#print('Model loaded. Check http://127.0.0.1:5000/')


def model_predict(img_path, model):
    img = image.load_img(img_path, target_size=(50,50)) #target_size must agree with what the trained model expects!!

    # Preprocessing the image
    img = image.img_to_array(img)
    img = np.expand_dims(img, axis=0)


    preds = model.predict(img)
    pred = np.argmax(preds,axis = 1)
    return pred


@app.route('/', methods=['GET'])
def index():
    # Main page
    return render_template('index.html')


@app.route('/predict', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST':
        # Get the file from post request
        f = request.files['file']

        # Save the file to ./uploads
        basepath = os.path.dirname(__file__)
        file_path = os.path.join(
            basepath, 'uploads', secure_filename(f.filename))
        f.save(file_path)

        # Make prediction
        pred = model_predict(file_path, model)
        os.remove(file_path)#removes file from the server after prediction has been returned

        # Arrange the correct return according to the model. 
        # In this model 1 is Pneumonia and 0 is Normal.
        str1 = 'Malaria Parasitized'
        str2 = 'Normal'
        if pred[0] == 0:
            return str1
        else:
            return str2
    return None


if __name__ == '__main__':
        app.run()
    #uncomment this section to serve the app locally with gevent at:  http://localhost:5000
    # Serve the app with gevent 
    #http_server = WSGIServer(('', 5000), app)
    #http_server.serve_forever()
1
  • Is your issue resolved now ? Else, please can you share details of LSTM model code, so that i can help you ? Thanks ! Commented Jun 10, 2020 at 6:03

1 Answer 1

1

You can use

from tensorflow.keras.applications.imagenet_utils 
import preprocess_input, decode_predictions
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image

This solved my problem with the code.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.