erro de keras ao prever

Eu estou tentando usar uma neural network keras para reconhecer imagens de canvas de dígitos desenhados e saída do dígito. Eu salvei a neural network e usei o django para rodar a interface web. Mas sempre que eu executo, recebo um erro interno do servidor e um erro no código do servidor. O erro diz Exceção: Erro ao verificar: esperado dense_input_1 para ter forma (None, 784), mas tem matriz com forma (784, 1) . Minha única visão principal é

from django.shortcuts import render from django.http import HttpResponse import StringIO from PIL import Image import numpy as np import re from keras.models import model_from_json def home(request): if request.method=="POST": vari=request.POST.get("imgBase64","") imgstr=re.search(r'base64,(.*)', vari).group(1) tempimg = StringIO.StringIO(imgstr.decode('base64')) im=Image.open(tempimg).convert("L") im.thumbnail((28,28), Image.ANTIALIAS) img_np= np.asarray(im) img_np=img_np.flatten() img_np.astype("float32") img_np=img_np/255 json_file = open('model.json', 'r') loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) # load weights into new model loaded_model.load_weights("model.h5") # evaluate loaded model on test data loaded_model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) output=loaded_model.predict(img_np) score=output.tolist() return HttpResponse(score) else: return render(request, "digit/index.html") 

Os links que eu verifiquei são:

  • Aqui
  • Aqui
  • e aqui

Editar Cumprindo a sugestão de Rohan, este é o meu rastreamento de pilha

 Internal Server Error: /home/ Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 149, in get_response response = self.process_exception_by_middleware(e, request) File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 147, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/vivek/keras/neural/digit/views.py", line 27, in home output=loaded_model.predict(img_np) File "/usr/local/lib/python2.7/dist-packages/keras/models.py", line 671, in predict return self.model.predict(x, batch_size=batch_size, verbose=verbose) File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1161, in predict check_batch_dim=False) File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 108, in standardize_input_data str(array.shape)) Exception: Error when checking : expected dense_input_1 to have shape (None, 784) but got array with shape (784, 1) 

Além disso, tenho meu modelo que costumava treinar a rede inicialmente.

 import numpy from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout from keras.utils import np_utils # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) (X_train, y_train), (X_test, y_test) = mnist.load_data() for item in y_train.shape: print item num_pixels = X_train.shape[1] * X_train.shape[2] X_train = X_train.reshape(X_train.shape[0], num_pixels).astype('float32') X_test = X_test.reshape(X_test.shape[0], num_pixels).astype('float32') # normalize inputs from 0-255 to 0-1 X_train = X_train / 255 X_test = X_test / 255 print X_train.shape # one hot encode outputs y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) num_classs = y_test.shape[1] # define baseline model def baseline_model(): # create model model = Sequential() model.add(Dense(num_pixels, input_dim=num_pixels, init='normal', activation='relu')) model.add(Dense(num_classs, init='normal', activation='softmax')) # Compile model model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) return model # build the model model = baseline_model() # Fit the model model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=20, batch_size=200, verbose=1) # Final evaluation of the model scolors = model.evaluate(X_test, y_test, verbose=0) print("Baseline Error: %.2f%%" % (100-scolors[1]*100)) # serialize model to JSON model_json = model.to_json() with open("model.json", "w") as json_file: json_file.write(model_json) # serialize weights to HDF5 model.save_weights("model.h5") print("Saved model to disk") 

Edit Eu tentei remodelar o img para (1,784) e também falhou, dando o mesmo erro que o título desta questão

Obrigado pela ajuda e deixe comentários sobre como devo adicionar à pergunta.

Você está pedindo à neural network para avaliar 784 casos com uma input cada, em vez de um único caso com 784 inputs. Eu tive o mesmo problema e resolvi-o tendo uma matriz com um único elemento que é uma matriz das inputs. Veja o exemplo abaixo, o primeiro funciona enquanto o segundo dá o mesmo erro que você está experimentando.

 model.predict(np.array([[0.5, 0.0, 0.1, 0.0, 0.0, 0.4, 0.0, 0.0, 0.1, 0.0, 0.0]])) model.predict(np.array([0.5, 0.0, 0.1, 0.0, 0.0, 0.4, 0.0, 0.0, 0.1, 0.0, 0.0])) 

espero que isso resolva isso para você também 🙂