오류 : cannot reshape array of size 463275 into shape (1,28,28,1)

이미지를 비교할 때 자주 발생하는 오류입니다.  tensorflow는 이미지를 잘게 나누어 array로 보유하고 있고 이미지를 서로 비교할 때 두개의 사이즈가 동일해야 하며 만일 차이가 있다면 크기를 수정 작업 해서 비교 작업을 진행 해야 합니다.

 

58.png의 이미지가 있고 사이즈는 28x28 입니다. 이걸 원본으로 한다고 가정하고.


tensorflow reshape array


tensorflow_model03.png355x435 입니다. 이것과 비교하는 경우


tensorflow reshape array


이렇게 사이즈가 차이가 나는 경우 그대로 비교 한다면 오류가 발생 합니다.


tensorflow reshape array


이 소스를 실행하면 아래처럼 오류가 발생 합니다.


tensorflow reshape array



해결 : 사이즈 조절

결국은 비교하려는 이미지의 사이즈 조절을 해서 비교를 해야 합니다.


tensorflow reshape array


하단부처럼 이미지 사이즈를 수정하고 다시 실행을 하면


tensorflow reshape array

오류가 없이 결과가 3이라고 잘 실행이 됩니다이미지 사이즈 수정 방법은 여기서 사용한 방법 이외에 여러가지 방법이 있습니다.

 

전체 소스

import tensorflow as tf

import matplotlib.pyplot as plt

from PIL import Image

mnist = tf.keras.datasets.mnist

import cv2

 

 

mnist = tf.keras.datasets.mnist

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

x_train, x_test = x_train / 255.0, x_test / 255.0

 

model = tf.keras.models.Sequential([

  tf.keras.layers.Flatten(),

  tf.keras.layers.Dense(512, activation=tf.nn.relu),

  tf.keras.layers.Dropout(0.2),

  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=5)

score = model.evaluate(x_test, y_test)

 

############ 추가 소스 ##################

img = cv2.imread("F:/tensordata/number/tensorflow_model03.png", cv2.IMREAD_GRAYSCALE)

plt.imshow(img)

plt.show()

 

img = cv2.resize(255-img, (28, 28))

test_num = img.flatten() / 255.0

test_num = test_num.reshape((-1, 28, 28, 1))

 

print('The Answer is ', model.predict_classes(test_num))

plt.show() 



+ Recent posts