Jump to content

'Sequential' object has no attribute 'predict_classes'


daniel_silva
Go to solution Solved by M6,

Recommended Posts

Olá, 

Estou com um problema a criar um executável em python. 

O objetivo é fazer um ficheiro executável que chama o modelo de treino e classifique a imagem com as classes atribuídas. 

Quando tento executar aparece o seguinte erro: 'Sequential' object has no attribute 'predict_classes'

Eu estive a ver na internet e falaram que era problemas de versões do tensorflow. 

Eu já tentei alterar, mas continua a não funcionar...

Alguém me pode ajudar?

Em baixo envio o código:

import tkinter as tk
from tkinter import filedialog
from tkinter import *
from PIL import ImageTk, Image

import numpy
#load the trained model to classify sign
from keras.models import load_model
model = load_model('final_model.h5')

classes = { 0:'Airplane',
            1:'Automobile',      
            2:'Bird',       
            3:'Cat',      
            4:'Deer',    
            5:'Dog',      
            6:'Frog)',     
            7:'Horse',    
            8:'Ship',     
            9:'Truck',   
          }
                 
#initialise GUI
top=tk.Tk()
top.geometry('800x600')
top.title('Classificação de Images')
top.configure(background='#00BFFF')

label=Label(top,background='#00BFFF', font=('arial',15,'bold'))
sign_image = Label(top)

def classify(file_path):
    global label_packed
    image = Image.open(file_path)
    image = image.resize((30,30))
    image = numpy.expand_dims(image, axis=0)
    image = numpy.array(image)
    print(image.shape)
    pred = model.predict_classes([image])[0]
    sign = classes[pred+1]
    print(sign)
    label.configure(foreground='#011638', text=sign) 
   

def show_classify_button(file_path):
    classify_b=Button(top,text="Classificar Imagem",command=lambda: classify(file_path),padx=10,pady=5)
    classify_b.configure(background='#364156', foreground='white',font=('arial',10,'bold'))
    classify_b.place(relx=0.79,rely=0.46)

def upload_image():
    try:
        file_path=filedialog.askopenfilename()
        uploaded=Image.open(file_path)
        uploaded.thumbnail(((top.winfo_width()/2.25),(top.winfo_height()/2.25)))
        im=ImageTk.PhotoImage(uploaded)
        
        sign_image.configure(image=im)
        sign_image.image=im
        label.configure(text='')
        show_classify_button(file_path)
    except:
        pass

upload=Button(top,text="Carregar uma imagem",command=upload_image,padx=10,pady=5)
upload.configure(background='#364156', foreground='white',font=('arial',10,'bold'))

upload.pack(side=BOTTOM,pady=50)
sign_image.pack(side=BOTTOM,expand=True)
label.pack(side=BOTTOM,expand=True)
heading = Label(top, text="Classificador de Imagens",pady=20, font=('arial',20,'bold'))
heading.configure(background='#00BFFF',foreground='#364156')
heading.pack()
top.mainloop()

Obrigado.

Link to comment
Share on other sites

  • Solution

Sinceramente duvido que o teu problema esteja nesse código.
Creio que deve estar no empacotamento das bibliotecas para criar o executável. Depende do que estejas a usar para fazer o .exe, mas tipicamente as soluções o que fazem é um wrap-up de tudo o que é necessário para correr e enfiar tudo num ficheiro, tipo "a file system in a file".

Não sei se estás a usar o PyInstaller ou outra coisa, mas creio que o que está em causa pelo que descreves, serão as bibliotecas que são empacotadas que não serão as indicadas. Tens de garantir que as bibliotecas que são empacotadas são as corretas. No caso do PyInstaller, há uma explicação de como isso é feito: https://pyinstaller.org/en/stable/operating-mode.html#analysis-finding-the-files-your-program-needs

Dito tudo isto, tens de ver se no caso do TensorFlow isto é possível usando apenas um empacotador de Python, uma vez que o TensorFlow não é uma biblioteca de Python, mas sim um sistema terceiro para o existe uma biblioteca Python para interagir com o TensorFlow. É isso que é o Keras - do próprio site: "Keras runs on top of open source machine libraries like TensorFlow, Theano or Cognitive Toolkit (CNTK)."

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.