Estoy tratando de usar un keras red neuronal para reconocer lienzo imágenes de dibujado dígitos y salida de los dígitos. Me han salvado la red neuronal y el uso de django para ejecutar la interfaz de la web. Pero cada vez que ejecuto, me sale un error interno del servidor y un error en el lado del servidor de código. El error dice Excepción: Error al verificar : espera dense_input_1 forma (Ninguno, 784) pero tengo matriz con la forma (784, 1). Mi única vista principal es

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")

Los enlaces que he comprobado son:

Editar
Cumplir con Rohan sugerencia, este es mi seguimiento de la pila de

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)

También, tengo mi modelo que he utilizado para entrenar a la red 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_classes = 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_classes, 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
scores = model.evaluate(X_test, y_test, verbose=0)
print("Baseline Error: %.2f%%" % (100-scores[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")

Editar
Traté de remodelación de la img (1,784) y también falló, dando el mismo error como el título de esta pregunta

Gracias por la ayuda, y dejar comentarios sobre cómo debería agregar a la pregunta.

  • Comprobar si esto funciona fuera de django. Post completo seguimiento de la pila. ¿Cómo se entrena el modelo?
  • He añadido la traza de la pila y el original keras archivo, así que tome miro
  • Tiene usted intente hacer algo como: «img_np.reformar((None, 784))» antes de «loaded_model.predecir(img_np)» ?
  • Hillman he intentado hacer esto, pero luego da el error «el Valor debe ser un entero» y no lo consigue, así que esto no funciona
  • Creo que las necesidades de su red para recibir los píxeles uno por uno, o al menos que está pasando el X_train como el conjunto de entrenamiento como un conjunto de datos de la forma (784,1). Que es de 784 muestras de un píxel. Pero de haber declarado su input_dim como 784 y la red se tiene que el número de neuronas en la capa de entrada. O bien cambiar el input_dim a 1 o tomar el tren a ser un conjunto de elementos con una longitud de 784.
  • por lo que dices de la figura debe ser (784, 1) en lugar de (1,784). Mi objetivo es pasar a una muestra de 784 píxeles
  • stackoverflow.com/questions/47295025/… alguna sugerencia

InformationsquelleAutor Superman | 2016-10-10

1 Comentario

  1. 27

    Le está pidiendo a la red neuronal para evaluar 784 casos con una entrada cada uno, en lugar de un solo caso con 784 entradas. Yo tenía el mismo problema y lo resolví tener una matriz con un solo elemento, el cual es una matriz de las entradas. Vea el ejemplo de abajo, el primero funciona, mientras que el segundo da el mismo error que usted 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 esto lo soluciona para ti también 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here