오류 : cannot reshape array of size 463275 into shape (1,28,28,1)
이미지를 비교할 때 자주 발생하는 오류입니다. tensorflow는 이미지를 잘게 나누어 array로 보유하고 있고 이미지를 서로 비교할 때 두개의 사이즈가 동일해야 하며 만일 차이가 있다면 크기를 수정 작업 해서 비교 작업을 진행 해야 합니다.
58.png의 이미지가 있고 사이즈는 28x28 입니다. 이걸 원본으로 한다고 가정하고.
tensorflow_model03.png는 355x435 입니다. 이것과 비교하는 경우
이렇게 사이즈가 차이가 나는 경우 그대로 비교 한다면 오류가 발생 합니다.
이 소스를 실행하면 아래처럼 오류가 발생 합니다.
해결 : 사이즈 조절
결국은 비교하려는 이미지의 사이즈 조절을 해서 비교를 해야 합니다.
하단부처럼 이미지 사이즈를 수정하고 다시 실행을 하면
오류가 없이 결과가 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() |
'Tensorflow' 카테고리의 다른 글
[텐서플로우] 아나콘다(Anaconda)에 TensorFlow2 설치 (0) | 2020.10.01 |
---|---|
tensorflow 1.6 설치시 Intel CPU AVX 지원 확인 (0) | 2019.08.25 |
[텐서플로우] Tensorflow MNIST 손으로 쓴 숫자 이미지 인식해서 맞추기 (2) | 2019.02.15 |
[텐서플로우] Tensorflow MNIST 숫자 이미지 하나 불러와서 맞추기 (6) | 2019.02.08 |
[텐서플로우] Unknown initializer: GlorotUniform 오류 keras model_from_json() 호출 (0) | 2019.02.07 |