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

황현길님의 프로필 이미지
황현길

작성한 질문수

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

사전 훈련 모델 Xception을 이용하여 CIFAR10 학습 모델 구현 후 모델 성능 비교

image_size 변환에서 질문있습니다.

작성

·

259

0

마지막 파트에서 로직들을 함수화 해서 쓸 때

IMAGE_SIZE = 32

...

def do_cifar10_train_evaluation(image_size=IMAGE_SIZE, model_name='vgg16'):

과 같이 정의 하고

history, evaluation_result = do_cifar10_train_evaluation(image_size=64, model_name='xception')으로 사용하는데 위에 IMAGE_SIZE를 바꿔야 input_size가 바뀌는거 같은데 저만 그러나요...? 아니면 강의때 설명 해 주셨는데 제가 못들은걸까요...?

아래는 vgg16으로 IMAGE_SIZE를 직접 바꿨을 때랑 안바꿨을 때 summary 초반 부분입니다.

 

 

 

IMAGE_SIZE = 32
...
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 32, 32, 3)]       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 32, 32, 64)        1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 32, 32, 64)        36928     
_________________________________________________________________

IMAGE_SIZE = 64
...
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 64, 64, 3)]       0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 64, 64, 64)        1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 64, 64, 64)        36928     


답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 

아래 모델을 생성하는 함수를 보시면 input_tensor로 Input(shape=(IMAGE_SIZE, IMAGE_SIZE, 3)을 받습니다.  그래서 VGG나 xception을 만들때 input_tensor에 IMAGE_SIZE로 지정된 크기만큼 Input을 입력 받게 됩니다. 따라서 IMAGE_SIZE가 바뀌면 INPUT SIZE가 바뀌게 됩니다. 

def create_model(model_name='vgg16', verbose=False):
    
    input_tensor = Input(shape=(IMAGE_SIZE, IMAGE_SIZE, 3))
    if model_name == 'vgg16':
        base_model = VGG16(input_tensor=input_tensor, include_top=False, weights='imagenet')
    elif model_name == 'resnet50':
        base_model = ResNet50V2(input_tensor=input_tensor, include_top=False, weights='imagenet')
    elif model_name == 'xception':
        base_model = Xception(input_tensor=input_tensor, include_top=False, weights='imagenet')
황현길님의 프로필 이미지
황현길
질문자

아하 알겠습니다.

그런데 image_size=64로 하고 IMAGE_SIZE=32로 하면 tr_images의 shape는 64x64가 되고 input_tensor의 shape는 32x32가 되서 두개가 서로 달라져 오류가 나야하는게 아닌가요?

권 철민님의 프로필 이미지
권 철민
지식공유자

지금 코드는 get_resized_images(images, resize=64)로 resize가 64가 default가 되어 있습니다. 

만일 get_resized_images(tr_images, resize=64) 이고 IMAGE_SIZE가 32이면 오류가 납니다. 

황현길님의 프로필 이미지
황현길
질문자

강의 영상이랑 실습자료에는 IMAGE_SIZE=32이고 image_size=64로 함수에 들어가는데 실제로 코드가 정상실행 되는데 이건 왜 그럴까요...?

황현길님의 프로필 이미지
황현길

작성한 질문수

질문하기