묻고 답해요
140만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
Cifar10을 vgg16으로 전이학습에서 input size 대한 질문
안녕하세요. 전이학습을 통해 Cifar10 dataset을 Vgg16 모델에서 미리 훈련된 ImageNet 가중치를 로드하여 학습을 시키려고 하는데, 아래와 같이 모델을 구성하게 되면 훈련을 진행할 수는 있지만 전이학습의 이점을(빠른 학습 속도) 얻는 것이 어렵지 않나 생각이 되어 질문드립니다. 또한 의문이 드는 것은 VGG16의 원래 모델에서의 input size는 224 x 244 x 3로 알고 있는데 Cifar10의 image_size는 32 x 32 x 3 이라 너무 이미지가 작아서 잘 학습이 안되는 것 같다는 생각이 듭니다. 혹시 Cifar10의 이미지를 upsampling 하는 방법이나 accuracy를 높일 수 있는 다른 방법이 있을까요? from tensorflow.keras.optimizers import RMSprop conv_base = VGG16(weights = 'imagenet', input_shape=(32, 32, 3), include_top=False) def build_model_with_pretrained(conv_base): model = Sequential() model.add(conv_base) model.add(Flatten()) model.add(Dense(256, activation= 'relu')) model.add(Dense(1, activation= 'sigmoid')) model.compile(loss = 'binary_crossentropy', optimizer = RMSprop(learning_rate = 2e-5), metrics = ['accuracy']) return modelmodel = build_model_with_pretrained(conv_base) model.summary()
-
미해결딥러닝 CNN 완벽 가이드 - Fundamental 편
CNN Cifar10 VGG16으로 전이학습 시 val_accuracy가 0.1로 고정되어 나옵니다
안녕하세요. CIFAR10 데이터를 가지고, VGG16으로 전이학습을 해보려고 했습니다. 데이터가 충분하다고 생각해서 뒤에서 2개의 block을 trainable=True로 바꾸고, top 부분은 globalaveragePool 이후에 Dense로 Softmax를 적용했는데, 훈련이 아주 이상하게 동작하는데, 이유를 알 수 있을까요? import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, BatchNormalization, Dropout from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.utils import to_categorical, normalize import numpy as np import os import matplotlib.pyplot as plt import pandas as pd %matplotlib inline (x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data() print(x_train.max(), x_train.min()) x_train = normalize(x_train) x_test = normalize(x_test) y_train = to_categorical(y_train) y_test = to_categorical(y_test) print(x_train.shape, x_test.shape, y_train.shape, y_test.shape) print(x_train.max(), x_train.min(), x_test.max(), x_test.min()) train_datagen = ImageDataGenerator( rotation_range = 45, width_shift_range = 0.2, zoom_range = 0.2, horizontal_flip = True ) train_datagen.fit(x_train) train_generator = train_datagen.flow( x_train, y_train, batch_size = 128) model_vgg = VGG16(weights='imagenet', include_top=False) for layer in model_vgg.layers: layer.trainable = False for layer in model_vgg.layers[-8:]: layer.trainable = True inputs = model_vgg.output x = tf.keras.layers.GlobalAveragePooling2D()(inputs) x = Dense(256, activation='relu')(x) x = Dropout(0.3)(x) x = Dense(128, activation='relu')(x) x = Dropout(0.3)(x) x = Dense(10, activation='softmax')(x) new_model = tf.keras.models.Model(model_vgg.input, x) new_model.summary() from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping rlr_cb = ReduceLROnPlateau(monitor='val_loss', factor=0.3, patience=3, mode='min', verbose=1) ely_cb = EarlyStopping(monitor='val_loss', patience=5, mode='min', verbose=1) new_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) history = new_model.fit_generator(train_generator, steps_per_epoch = 391, epochs = 100, validation_data = (x_test, y_test), #callbacks=[rlr_cb, ely_cb] )
-
미해결딥러닝 CNN 완벽 가이드 - Fundamental 편
keras vgg16 pretrained 모델 사용할 때 입력 shape에 대해서 질문이 있습니다
안녕하세요 from keras.applications.vgg16 import VGG16 keras 내부에 있는 VGG16을 사용하려고 하는데, 만일 이미지 사이즈가 512x512라면 이를 그대로 shape를 넣어서 진행해도 되나요? 아니면 224x224로 줄여서 넣어줘야 하나요? train 과정은 곧잘 동작은 하는데, imagenet weight에 맞는지 잘 모르겠네요