inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

CNN Cifar10 VGG16으로 전이학습 시 val_accuracy가 0.1로 고정되어 나옵니다

미해결

딥러닝 CNN 완벽 가이드 - TFKeras 버전

안녕하세요. 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] )

  • transfer_learning
  • vgg16
  • tensorflow
  • 딥러닝
  • cifar10
  • 머신러닝 배워볼래요?
  • kaggle
  • keras
  • cnn
유영재 댓글 6 좋아요 0 조회수 1088

인기 태그

인프런 TOP Writers

주간 인기글