인프런 커뮤니티 질문&답변

오광덕님의 프로필 이미지
오광덕

작성한 질문수

딥러닝 CNN 완벽 가이드 - Fundamental 편

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

작성

·

200

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)로 변경해서 수행해 보시지요. 

감사합니다. 

오광덕님의 프로필 이미지
오광덕

작성한 질문수

질문하기