작성
·
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가 되서 두개가 서로 달라져 오류가 나야하는게 아닌가요?