2016-10-10 26 views
9

Tôi đang cố gắng sử dụng mạng nơron keras để nhận dạng hình ảnh canvas của các chữ số được vẽ và xuất số. Tôi đã lưu mạng thần kinh và sử dụng django để chạy giao diện web. Nhưng bất cứ khi nào tôi chạy nó, tôi nhận được một lỗi máy chủ nội bộ và một lỗi trên mã phía máy chủ. Lỗi nói Ngoại lệ: Lỗi khi kiểm tra: dự kiến ​​dense_input_1 có hình dạng (Không có, 784) nhưng có mảng có hình dạng (784, 1). chỉ giao diện chính của tôi làlỗi máy ảnh trên dự đoán

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

Các liên kết Tôi đã kiểm tra ra là:

Sửa Tuân thủ Rohan của gợi ý, đây là dấu vết ngăn xếp của tôi

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) 

Ngoài ra, tôi có mô hình mà tôi đã sử dụng để đào tạo mạng ban đầu.

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

Sửa tôi đã cố gắng định hình lại các img tới (1784) và nó cũng thất bại, đưa ra các lỗi tương tự như tiêu đề của câu hỏi này

Thanks for the help, và để lại ý kiến ​​về cách tôi nên thêm vào câu hỏi.

+0

Kiểm tra nếu điều này làm việc bên ngoài của django. Đăng dấu vết ngăn xếp đầy đủ. Bạn đã đào tạo mô hình như thế nào? – Rohan

+0

@Rohan Tôi đã thêm ngăn xếp traceback và tệp keras gốc, vì vậy, hãy xem – Superman

+0

Bạn đã cố gắng thực hiện một cái gì đó như: "img_np.reshape ((None, 784))" before "loaded_model.predict (img_np)"? –

Trả lời

18

Bạn đang yêu cầu mạng nơron đánh giá 784 trường hợp với một đầu vào thay vì một trường hợp đơn lẻ với 784 đầu vào. Tôi đã có cùng một vấn đề và tôi giải quyết nó có một mảng với một yếu tố duy nhất mà là một mảng của các yếu tố đầu vào. Xem ví dụ bên dưới, cái đầu tiên hoạt động trong khi phần thứ hai cung cấp cùng một lỗi mà bạn đang gặp phải.

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

hy vọng điều này giải quyết nó cho bạn là tốt :)

+0

https://stackoverflow.com/questions/47295025/valueerror-at-image-tensor-tensoractivation-5-softmax0-shape-4-dtyp/47300005?noredirect=1#comment81555441_47300005 bất kỳ đề xuất nào –

Các vấn đề liên quan