본문 바로가기
ABC 부트캠프

[27일차] ABC 부트캠프 딥러닝의 기초

by ejis 2024. 8. 11.

이번에는 엠비디아 엠버서더이신 교수님께서 딥러닝 기초에 대한 교육을 해주셨습니다!

NVIDIA에서 제공하는 서버의 주피터 노트북을 이용해 교육을 했답니다.


딥러닝에 대한 설명.

딥러닝은 우리가 경험을 통해 배우고 상황에 맞게 행동하는 것과 비슷해요. 우리가 어떤 상황에서 어떻게 해야 할지를 배우듯이, 딥러닝도 데이터를 통해 예측을 하게 됩니다.
처음에는 뉴럴 네트워크가 데이터에서 규칙이나 패턴을 찾아서 예측했는데, 이 과정은 복잡한 프로그래밍으로만 가능했어요. 그래서 이런 시스템은 인간이 직접 규칙을 이해하고 정의해야 했고, 그 능력을 넘어서지 못하는 한계가 있었어요.
하지만 인터넷이 발전하고 데이터가 늘어나게 되면서, 그리고 컴퓨터 성능이 좋아지면서 이 문제를 해결할 수 있게 되었어요. 이제는 딥러닝이 스스로 규칙을 학습할 수 있기 때문에, 뉴럴 네트워크의 방식이 많이 변했어요.
그렇지만 딥러닝이 항상 최상의 결과를 주는 것은 아니에요. 만약 규칙이 명확하고 단순하다면, 전통적인 프로그래밍 방식이 더 정확할 수 있어요. 그러나 규칙이 복잡하거나 명확하지 않은 경우에는 프로그래밍으로 이를 표현하기 어려우므로, 딥러닝을 사용하는 것이 더 효과적입니다.
이렇게 딥러닝은 우리가 데이터를 통해 스스로 배우고 예측할 수 있도록 도와주는 강력한 도구라고 할 수 있어요.


ImageNet 기본 모델 코드

from tensorflow import keras

base_model = keras.applications.VGG16(
    weights='imagenet',
    input_shape=(224, 224, 3),
    include_top=False)
# Freeze base model
base_model.trainable = False

기본 모델 동결

# Create inputs with correct shape
inputs = keras.Input(shape=(224,224,3))

x = base_model(inputs, training=False)

# Add pooling layer or flatten layer
x = keras.layers.GlobalAveragePooling2D()(x)

# Add final dense layer
outputs = keras.layers.Dense(6, activation = 'softmax')(x)

# Combine inputs and outputs to create model
model = keras.Model(inputs, outputs)

model.summary()

모델에 레이어 추가

model.compile(loss = FIXME , metrics = [keras.metrics.CategoricalAccuracy()])

모델 컴파일

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(FIXME)

데이터 증강

# load and iterate training dataset
train_it = datagen.flow_from_directory('data/fruits/train/', 
                                       target_size=(224, 224), 
                                       color_mode='rgb', 
                                       class_mode="categorical")
# load and iterate validation dataset
valid_it = datagen.flow_from_directory('data/fruits/valid/', 
                                      target_size=(224, 224), 
                                      color_mode='rgb', 
                                      class_mode="categorical")

데이터세트 로드

model.fit(train_it,
          validation_data=valid_it,
          steps_per_epoch=train_it.samples/train_it.batch_size,
          validation_steps=valid_it.samples/valid_it.batch_size,
          epochs=20)

모델 트레이닝(여기서 92이상 나오지 않는다면 에폭값을 더 늘려 학습을 시켜야합니다.. 조금 시간이 걸리더라구요...)

# Unfreeze the base model
base_model.trainable = True

# Compile the model with a low learning rate
model.compile(optimizer=keras.optimizers.RMSprop(learning_rate = 0.00001),
               loss = keras.losses.CategoricalCrossentropy(), metrics = [keras.metrics.CategoricalAccuracy()])

model.fit(train_it,
          validation_data=valid_it,
          steps_per_epoch=train_it.samples/train_it.batch_size,
          validation_steps=valid_it.samples/valid_it.batch_size,
          epochs=10)
model.evaluate(valid_it, steps=valid_it.samples/valid_it.batch_size)

모델 평가

 

from run_assessment import run_assessment
run_assessment(model, valid_it)

평가 실행.(정확도가 92이상 나오면 수료증을 발급해주고 수업은 끝이 났답니다!