[머신러닝] 딥러닝 구현 - 텐서플로우
2022. 1. 4. 23:06
1. 딥러닝 모델
1.1 딥러닝 모델의 구성 요소
1.2 딥러닝 모델의 학습 방법
- 예측값과 실제값 사이의 오차를 최소화하는 모델의 인자를 찾는 알고리즘 적용
- Loss function을 최소화하는 가중치를 찾기 위해 최적화 알고리즘 적용
딥러닝 모델의 학습 순서
1) 학습용 feature 데이터를 입력하여 예측값 구하기 (순전파)
2) 예측값과 실제값 사이의 오차 구하기 (Loss 계산)
3) Loss를 줄일 수 있는 가중치 업데이트 하기 (역전파)
4) 위의 과정을 반복하여 Loss를 최소화 시키는 가중치 얻기
1) 딥러닝 모델이 예측값을 구하는 방식 - 순전파 (Forward propogation)
: 입력 값을 바탕으로 출력 값을 계산하는 과정.
- 순전파를 통해 오차값을 구하여 Loss function 구할 수 있음
2) 최적화 방식 - 경사 하강법(Gradient descent), 역전파(Backpropogation)
3) 가중치 업데이트
- 위 과정을 수행하여 가중치를 업데이트 할 수 있으며, 이를 반복하여 Loss function을 제일 작게 만드는 가중치를 구함
2. 텐서플로우로 딥러닝 구현
2.1 텐서플로우
- 유연하고, 효율적이며, 확장성 있는 딥러닝 프레임워크
- 대형 클러스터 컴퓨터부터 스마트폰까지 다양한 디바이스에서 동작 가능
2.2 데이터 전 처리
- Tensorflow 딥러닝 모델을 Tensor 형태의 데이터를 입력 받음
- Tensor : 다차원 배열로 tensorflow에서 사용하는 객체
1) tf.data.Dataset
# pandas를 사용하여 데이터 불러오기
df = pd.read_csv('data.csv')
feature = df.drop(columns=['label'])
label = df['label']
# Dataset API 사용하여 tensor 형태로 데이터 변환한 Dataset 생성
dataset = tf.data.Dataset.from_tensor_slices((feature.values, label.values))
2) Epoch & Batch
- Epoch : 한 번의 epoch는 전체 data set에 대해 한 번 학습을 완료한 상태
- Batch : 나눠진 data set (mini-batch)
- Itertaion : epoch를 나누어서 실행하는 횟수를 의미
- ex) 총 데이터 1000개, Batch size = 100 일 경우
- 1 iteration = 100개 데이터에 대하여 학습
- 1 epoch = 100/batch size = 10 iteration
# dataset의 batch사이즈를 32로 설정
dataset = dataset.batch(32)
2.3 딥러닝 모델 구축하기
1) 고수준 API 활용 - Keras
- Keras : 텐서플로우의 패키지로 제공되는 고수준 API. 딥러닝 모델을 간단하고 빠르게 구현 가능
2) 모델 클래스 객체 생성
tf.keras.models.Sequential()
3) 모델의 각 Layer 구성
tf.keras.layers.Dense(units, input_dim, activation) # input_dim은 첫번째 층에만 필요
- units : 레이어 안의 node의 수
- input_dim / input_shape : 첫번째 층(Input Layer)은 입력 형태 설정, 다른 층은 생략
- activation : 적용할 activation 함수 설정
4) 모델에 Layer 추가
[model].add(tf.keras.layers.Dense(units, activation))
5) Example
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(10, input_dim=2, activation='sigmoid'), # 2개의 입력변수, 10개의 노드
tf.keras.layers.Dense(10, activation='sigmoid'), # 10개의 노드
tf.keras.layers.Dense(1, activation='sigmoid'), # 1개의 노드
])
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(10, input_dim=2, activation='sigmoid'))
model.add(tf.keras.layers.Dense(10, activation='sigmoid'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
2.4 딥러닝 모델 학습시키기
1) 모델 학습 방식 설정 - compile
[model].compile(loss, optimizer)
- loss : 손실 함수 설정
- optimizer : 모델 학습 최적화 방법
2) 모델 학습 - fit
[model].fit(x, y)
- x : 학습 데이터
- y : 학습 데이터의 label
3) Example
# MSE를 loss로 설정, 최적화 방식 SGD 사용
model.compile(loss='mean_squared_error', optimizer='SGD')
# dataset에 저장된 데이터를 입력하고, epochs를 100으로 설정 후 학습
model.fit(dataset, epochs=100)
2.5 평가 및 예측하기
1) 모델을 평가하기 위한 메소드
[model].evaluate(x,y)
- x : 테스트 데이터
- y : 테스트 데이터의 label
2) 모델로 예측을 수행하기 위한 함수
[model].predict(x)
- x : 예측하고자 하는 데이터
3) Example
model.evaluate(X_test, Y_test)
predicted_labels_test = model.predict(X_test)
'Python > 머신러닝' 카테고리의 다른 글
[딥러닝] 자연어 처리를 위한 모델 - RNN (Recurrent Neural Network) (0) | 2022.01.06 |
---|---|
[딥러닝] 이미지 처리를 위한 딥러닝 모델 - CNN (Convolution Neural Network) (0) | 2022.01.05 |
[머신러닝] 분류 알고리즘 - 의사결정나무 (Decision Tree) & 혼동 행렬 (Confusion Matrix) (0) | 2022.01.02 |
[머신러닝] 단순 선형 회귀, 다중 선형 회귀 (0) | 2022.01.02 |
[머신러닝] 데이터 전 처리 (0) | 2021.12.29 |