2 분 소요


딥러닝 준비

  • 교재 : 백견불여일타 딥러닝 입문 with 텐서플로우 2.x
In [1]:
!pwd
Out [1]:
/content

In [2]:
import pandas as pd
In [3]:
pd.read_csv('/content/drive/MyDrive/Colab Notebooks/deep_learning/titanic.csv')
Out [3]:
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
... ... ... ... ... ... ... ... ... ... ... ... ...
886 887 0 2 Montvila, Rev. Juozas male 27.0 0 0 211536 13.0000 NaN S
887 888 1 1 Graham, Miss. Margaret Edith female 19.0 0 0 112053 30.0000 B42 S
888 889 0 3 Johnston, Miss. Catherine Helen "Carrie" female NaN 1 2 W./C. 6607 23.4500 NaN S
889 890 1 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.0000 C148 C
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.7500 NaN Q

891 rows × 12 columns

In [4]:
import sys
In [5]:
sys.version
Out [5]:
'3.8.16 (default, Dec  7 2022, 01:12:13) \n[GCC 7.5.0]'
  • 텐서플로우(TensorFlow) : 가장 많은 사용자를 보유하고 있는 머신러닝 오픈소스 플랫폼
In [6]:
import tensorflow as tf
In [7]:
tf.__version__
Out [7]:
'2.9.2'

케라스(Keras)

  • 누구나 쉽게 사용하고 접할 수 있도록 파이썬으로 설계된 머신러닝 라이브러리

  • 주요 특징
    • 단순성 및 간결성(simplicity) : 케라스의 표현은 짧고 간결, Input, Model, Layer 등 이름만으로 기능 추측
    • 유연성(Easy extensibility) : 텐서플로우 2.X의 케라스는 텐서플로우와 호환하는데 있어 높은 유연성을 가지고, 여러 기능과의 호환이 가능하게 되면서 높은 유연성, 향상된 성능을 가짐
    • 모듈화(Modularity) : 독립적으로 문제에 맞게 정의
    • 파이썬 기반(pythong base)
  • 사용 과정
    1. 학습데이터 준비 -> Data Preparing, preprocessing
    2. 문제를 해결하기 위한 모델 정의 -> Model(Sequential, Functional API)
      3. 손실 함수(Loss), 옵티마이저(Optimizer)를 설정 -> compile()
    3. 모델을 학습시키고 추론 -> fit(), evaluate(), predict()

딥러닝 용어

  • 하이퍼 파라미터(HyperParameter)
    • 어떠한 값이 적절한 지 모델과 데이터가 알려주지 않기 때문에 모델 외적인 요소라고 표현하기도 하는데, 주로 경험에 의해 결정되는 요소를 의미
    • 학습률(learning_rate), 배치 크기(batch_size), 에폭(epochs), 드롭아웃률 등이 있음
    • 최적의 값을 찾기 위해 다양한 값을 시도해보면서 반복적인 실험과 많은 시간을 투자
      eg) 하이퍼 파라미터 튜닝(그리드 서치, 랜덤 서치)
  • batch와 batch_size
    • minibatch : 모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음
    • 배치 학습 : 메모리와 속도 측면에서 많은 이득
    • 1000개의 데이터, batch_size = 10, batch 당 100개의 데이터

- 에폭과 스텝 * 에폭(epochs) : 전체 데이터를 사용하여 학습하는 횟수 의미
eg) 전체 데이터를 10회 반복하여 모델을 학습시킨 것 -> 10 에폭 * 스텝(steps) : 모델이 가진 파라미터(또는 가중치)를 1회 업데이트하는 것을 의미(minibatch들의 수) * 전체 데이터 1000개, batch_size=10 일때
10 에폭 = 1000 * 10번 사용 -> 스텝으로 변환, 1000 스텝
  스텝 = 전체 데이터 사용 수 / batch_size

- 과대 적합(Overfitting) * 모델이 학습 데이터에서는 좋은 성능을 보이지만 새로운 데이터에 대해서는 좋은 성능을 보이지 못하는 결과 의미 * 학습 데이터를 단순 암기, 모델이 문제를 일반화하지 못한 상태

 <해결방법>  - 학습 데이터를 다양하게 많이 수집  - 정규화 사용 -> 규칙 단순화  - 이상치(outlier) 제거

- 과소 적합(Underfitting) * 학습 데이터를 충분히 학습하지 않아 모든 측면에서 성능이 나쁨

 <해결방법>  - 학습 데이터를 다양하게 많이 수집  - 더 복잡한 모델 사용  - 모델을 충분히 학습 -> 양질의 데이터 수집

기본 연산

텐서를 통한 표현

  • 텐서플로우는 주로 텐서(Tensor)를 다루게 된다. - 텐서(Tensor)는 C나 Java언어에서 int, float 등과 같은 자료형에 해당한다.
  • 여러 형태를 가질 수 있는 넘파이 배열(NumPy Array)이다.
  • 텐서는 배열의 차원을 랭크(Rank)로 표현한다.
In [8]:
a = tf.constant(2)
In [9]:
print(a)
Out [9]:
tf.Tensor(2, shape=(), dtype=int32)

In [10]:
# 랭크는 스칼라 형태를 나타내기 때문에 'shape=( )'처럼 빈칸이 나옴
print(tf.rank(a))
Out [10]:
tf.Tensor(0, shape=(), dtype=int32)

In [11]:
b = tf.constant([1, 2])
print(tf.rank(b))
Out [11]:
tf.Tensor(1, shape=(), dtype=int32)

  • 출력의 결과는 텐서 형태로 나온다. 
  • 첫 번째 인자 : 해당 텐서의 랭크
  • 두 번째 인자 : 해당 텐서의 형태
  • 세 번째 인자 : 해당 텐서의 데이터 타입

댓글남기기