Если изображение имеет (28,28,3) форму, как мне преобразовать его в (28,28,1)? - PullRequest
0 голосов
/ 02 мая 2020

Я использую набор данных mnist из рукописных цифр и пытаюсь предсказать написанное мной di git. Проблема в том, что моя ди git имеет форму (28,28,3), а ожидаемая форма для моей нейронной сети - (28,28,1). Как я могу его конвертировать?

мой код:

import tensorflow as to
from tensorflow import keras
from keras.datasets import mnist
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import cv2

data = mnist.load_data()
(x_train, y_train), (x_test, y_test) = data

classes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

x_train = x_train / 255
x_test = x_test / 255

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=(28,28)))
model.add(keras.layers.Dense(128, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))

model.compile(
     optimizer='adam',
     loss='sparse_categorical_crossentropy',
     metrics=['accuracy']
)

model.fit(x_train, y_train, epochs=7)
test_loss, test_acc = model.evaluate(x_test, y_test)
print('\nTest Loss:', test_loss)
print('Test accuracy:', test_acc)

img = Image.open("7.jpg").convert('L')
img_array = cv2.imread('7.jpg')
new_array = cv2.cvtColor(img_array, cv2.COLOR_BGR2GRAY)
new_array = cv2.resize(new_array, (28,28))
print(new_array.shape)
print(x_test[0].shape)
plt.imshow(new_array, cmap='gray')
plt.show()

predictions = model.predict(new_array)

plt.grid(False)
plt.imshow(new_array, cmap='gray')
plt.title("Prediction: " + classes[np.argmax(predictions)])
plt.show()

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Предполагая, что img имеет форму (28, 28, 3), вы можете сделать это:

gray = cv2. cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.expand_dims(gray, 2)

Это преобразует его в форму (28, 28, 1)

0 голосов
/ 02 мая 2020

Даже если вам нужна форма (28,28), тензоры должны иметь 3 измерения, поэтому вы должны расширить их до (28,28,1). Что-то вроде этого должно быть достаточно:

new_array = cv2.resize(new_array, (28,28,1))

Или разверните его, используя new_array=new_array[..., None].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...