• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

이미지 하나만 별도로 업로드 해서 분류가 잘 실행되는지 확인 할려고 합니다.

22.06.07 16:29 작성 조회수 125

0

예제 fashion-mnist-practice 의 모델 생성하는 부분을 참조했습니다.

dataset의 경우 fashion_mnist를 쓰지 않고 숫자 mnist 파일을 사용했습니다. 

INPUT_SIZE = 28
model = Sequential([
    Flatten(input_shape=(INPUT_SIZE, INPUT_SIZE)),
    Dense(100, activation='relu'),
    Dense(30, activation='relu'),
    Dense(10, activation='softmax')
])
 

이걸 기본으로 model을 따로 저장했고, 저장된 model을 불러오고 별로도 이미지 파일을 만들었습니다. 

def get_read_image():
    image_list =[]
    image = cv2.cvtColor(cv2.imread("./image/0_1.png"), cv2.IMREAD_GRAYSCALE)
    return image 

def get_show_image(image):
    plt.imshow(image)
    plt.axis("on")
    plt.legend()

def get_preprocessed_image(image):
    image = np.array(image/255.0, dtype=np.float32)
    return image
 
if __name__ == "__main__":
    image = get_read_image()
    image = np.resize(image, (1, 784))
    image = get_preprocessed_image(image)
    image = image.reshape(1, 28, 28, 1)    
    predict_result = np.argmax(model.predict(image))
    print(predict_result)
 

 

이렇게 코드를 작성했는데 하나 이해가 가지 않는 부분이 Faltten() 에서

input_shape = IMAGE_SIZE (28), IMAGE_SIZE(28) 이부분입니다.

input _shape(28, 28) 로 했다면

업로드한 이미지 파일도 3차원  image.reshape(28, 28, 1)이 들어가야 하는 것 같은데..

무조건 3차원 만들어줘야 하는 거 아닌가요ㅠ 

그래서 그렇게 입력하니깐 오류가 떠서, (1, 28, 28,1)로 넣으니깐 오류가 나지 않습니다.

저 부분이 왜 저렇게 되는지 잘 이해가 가지 않아서 질문 드립니다.

그리고 또 하나는 .   model.summary() 를 했을 때 output shape에 None는 크게 신경쓰지 않아도 되는 것 인가요?

아래 이미지 처럼 (None, 28, 28)이 나왔다면 그냥 28행 28열로 구성된 tensor라고만 생각하면 되는 걸까요

질문이 길어서 죄송합니다 ㅠ

 input_1 (InputLayer)        [(None, 28, 28)]          0         
                                                                 
 flatten (Flatten)           (None, 784)               0         
                                                                 
 dense (Dense)               (None, 100)               78500     
                                                                 
 dense_1 (Dense)             (None, 30)                3030      
                                                                 
 output (Dense)              (None, 10)                310       

 

 

 

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

답변을 빨리 달아드려야겠다고 생각했는데, 바쁜일 때문에 살짝 늦어졌습니다.

기본적으로 Tensorflow Deep learning 모델은 학습 시 입력데이터의 shape의 첫번째 인자가 batch size입니다. 마찬가지로 predict() 입력 데이터 세트 shape의 첫번째 인자도 batch size 입니다. 

image.reshape(28, 28, 1)가 아니라 image.reshape(1, 28, 28)로 변경해서 수행해 보시지요. 

감사합니다.