Ошибка размера матрицы при попытке предсказать число из изображения - PullRequest
0 голосов
/ 16 февраля 2019

У меня проблемы с кодированием моей первой программы NN.Я в основном хотел бы нарисовать число на холсте и передать его NN, который должен показать «распознанное» число.

#create the NN, train with mnist and load img saved from canvas
def Analizza():

    mnist = tf.keras.datasets.mnist
    (x_train, y_train), (x_test, y_test) = mnist.load_data()

    x_train = tf.keras.utils.normalize(x_train, axis=1)

    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu, input_shape= x_train.shape[1:]))
    model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))
    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

    model.fit(x_train, y_train, epochs=3)
    model.save('modello_numeri.model')

    getter(c)

    width = 28
    height = 28

    img = Image.open(immagine_salvata)
    img = img.resize((width,height), Image.BICUBIC)
    img.save(immagine_salvata)

    img = PIL.Image.open("immagine.jpg").convert("L")
    img_ar = np.array(img)

    img_ar_norm = tf.keras.utils.normalize(img_ar, axis=1)

    plt.imshow(img_ar, cmap=plt.cm.binary)
    plt.show()  

    #make prediction
    predizione = model.predict(img_ar_norm, batch_size=None)
    risposta = np.argmax(predizione[0])

    print(risposta)

    #risultato = tk.Label(window, text=risposta, font=("Helvetica",57))
    #risultato.grid(row=0, column=1, sticky="E")

эта часть дает мне следующие ошибки:

Исключение в обратном вызове Tkinter (последний последний вызов): Файл> "C: \ Users \ Massimo \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ tkinter__init __. Py", строка 1705, в вызов return self.func (* args) Файл "c: /Users/Massimo/AppVisualCode/disegno.py", строка 91, в Analizza predizione = model.predict (img_ar_norm, batch_size = None) Файл "C: \ Users \ Massimo"\ AppData \ Roaming \ Python \ Python37 \ site-packages \ tenorflow \ python \ keras \ engine \ training.py ", строка 1113, в поле предиката self, x, batch_size = batch_size, verbose = verbose, steps = steps) Файл" C ": \ Users \ Massimo \ AppData \ Roaming \ Python \ Python37 \ site-packages \ tenorflow \ python \ keras \ engine \ training_arrays.py ", строка 329, в файле model_iteration batch_outs = f (ins_batch) Файл" C: \ Users \ Massimo\ AppData \ Roaming \ Python \ Python37 \ сайт-пакеты \ tensorflow \ питон \ keras \ backend.py", строка 3076, в вызов run_metadata = self.run_metadata) Файл" C: \ Users \ Massimo \ AppData \ Roaming \ Python \ Python37 \ site-packages \ tenorflow \ python \ client \ session.py ", строка 1439, в вызов run_metadata_ptr) Файл "C: \ Users \ Massimo \ AppData \ Roaming \ Python \ Python37 \ site-packages \ tenorflow \ python \ framework \ errors_impl.py", строка 528, в выход c_api.TF_GetCode (self.status.status)) tenorflow.python.framework.errors_impl.InvalidArgumentError: несовместимый размер матрицы: в [0]: [28,28], в [1]: [784,128] [[{{node MatMul}}]]

Я понял, что должна быть проблема с размером матрицы, ожидаемой для прогноза, но почему?Я сохраняю изображение, изменяю его размер на 28x28, черно-белое, а затем открываю как массив np, как если бы это был x_train [0]

Спасибо, Макс

...