Deep Learning (01) - Deep Learning 시작
딥러닝 준비
- 교재 : 백견불여일타 딥러닝 입문 with 텐서플로우 2.x
!pwd
/content
import pandas as pd
pd.read_csv('/content/drive/MyDrive/Colab Notebooks/deep_learning/titanic.csv')
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
import sys
sys.version
'3.8.16 (default, Dec 7 2022, 01:12:13) \n[GCC 7.5.0]'
- 텐서플로우(TensorFlow) : 가장 많은 사용자를 보유하고 있는 머신러닝 오픈소스 플랫폼
import tensorflow as tf
tf.__version__
'2.9.2'
케라스(Keras)
-
누구나 쉽게 사용하고 접할 수 있도록 파이썬으로 설계된 머신러닝 라이브러리
- 주요 특징
- 단순성 및 간결성(simplicity) : 케라스의 표현은 짧고 간결, Input, Model, Layer 등 이름만으로 기능 추측
- 유연성(Easy extensibility) : 텐서플로우 2.X의 케라스는 텐서플로우와 호환하는데 있어 높은 유연성을 가지고, 여러 기능과의 호환이 가능하게 되면서 높은 유연성, 향상된 성능을 가짐
- 모듈화(Modularity) : 독립적으로 문제에 맞게 정의
- 파이썬 기반(pythong base)
- 사용 과정
- 학습데이터 준비 -> Data Preparing, preprocessing
- 문제를 해결하기 위한 모델 정의 -> Model(Sequential, Functional API)
3. 손실 함수(Loss), 옵티마이저(Optimizer)를 설정 -> compile() - 모델을 학습시키고 추론 -> 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)로 표현한다.
a = tf.constant(2)
print(a)
tf.Tensor(2, shape=(), dtype=int32)
# 랭크는 스칼라 형태를 나타내기 때문에 'shape=( )'처럼 빈칸이 나옴
print(tf.rank(a))
tf.Tensor(0, shape=(), dtype=int32)
b = tf.constant([1, 2])
print(tf.rank(b))
tf.Tensor(1, shape=(), dtype=int32)
- 출력의 결과는 텐서 형태로 나온다.
- 첫 번째 인자 : 해당 텐서의 랭크
- 두 번째 인자 : 해당 텐서의 형태
- 세 번째 인자 : 해당 텐서의 데이터 타입
댓글남기기