Study/Development

[개발일지] Tensorflow 딥러닝_딥러닝이론

titann 2023. 1. 2. 23:58

 

<코딩애플 온라인강의 수강일지>


딥러닝의 개념

딥러닝이란?

### 예시
- 구글 번역
- TTS 엔진 (Text to Speech)

### 머신러닝 vs 딥러닝
- 머신러닝 ⊃ 딥러닝
- 딥러닝: 뉴럴 네트워크를 이용해 머신러닝을 진행
- 머신러닝은 초기 가이드 필요, 딥러닝은 불필요 → 몰라도 만들 수 있다.

### 딥러닝이 잘하는 분야
1. image classification / object detection
2. sequence data 분석 & 예측

머신러닝의 종류

  • Supervised Learning: 정답 존재
  • Unsupervised Learning: 정답 없음, 스스로 분류
  • Reinforcement Learning: 게임하기 처럼 스스로 강화

Neural Network

*Perceptron

기본 모델

### w1, w2 -> weight: 가줓이
ydata = xdata1 * w1 + xdata2 * w2

*Neural Network

data와 결과값 사이에 hidden layer 존재 - 생각을 저장하는 공간

### h1, h2 -> hidden layer / 각각의 것은 node라고 한다.
h1 = xdata1 * w1 + xdata2 * w2
h2 = xdata1 * w3 + xdata2 * w4

ydata = h1 * w5 + h2 * w6

Loss Function(Cost Function)

총 오차를 계산하는 수식

<Loss Functions>
	Mean Squared Error: 특정 숫자값 예측
	Bianary Cross Entropy: 확률 or Classification

Activation Function (활성 함수)

활성함수를 통해 non-linearity 부여 가능

  • 활성함수 없이 예측 - 선형적 / 단순한 예측
  • 활성함수 포함한 예측 - 비선형적 / 복잡한 예측
<Activation Functions>
	hyperbolic tangent
	sigmoid: 대표적
	softmax
	rectified linear: 양수면 x그대로, 음수면 0

Gradient Descent (경사하강법)

현재 w1값에서 접선의 기울기를 빼는식으로 이동

새로운 w1 = 기존w1 - 기울기 * (learning rate)

기울기: 기준 w1이 조금 변하면, 총손실 E가 얼마나 끼치는지
Learning Rate: 자유롭게 설정하는 상수, 곱해져서 지엽적인 부분을 뛰어넘을 수 있음
Learning Rate Optimizer: 이 값을 다양하게 변경시키는 알고리즘
	- SGD, Momentum, AdaGrad, RMSProp, Adam(추천)

딥러닝 학습과정

  1. w값들 랜덤으로 찍음
  2. w값 바탕으로 총손실 E를 계산
  3. 경사하강으로 새로운 w값 업데이트

Tensorflow

딥러닝을 매우 쉽게 구현할 수 있게 도와주는 구글 개발자들이 만든 파이썬 라이브러리

설치법

*설치가 안되어서어 엄청 애먹다가, 강의랑 동일한 파이썬 3.7.9 버전으로 다운그레이드 후 잘 동작되었다.

pip install tensorflow

텐서

텐서플로우에서 사용하는 자료형.

  • 행렬로 인풋/w값 저장 가능
  • node값 계산이 쉬워짐

기본적인 문법

import tensorflow as tf

# 기본적인 tensor
# data type 지정이 가능하다
tensr = tf.constant([3,4,5], tf.float32)
tensr2 = tf.constant([6,7,8])

# tensor의 연산
print(tensr+tensr2)
print(tensr/tensr2)
print(tf.add(tensr, tensr2)) # 텐서를 더해주는 함수

# 아래와 같이 행렬의 형태로 나타낼 수 있다.
tensr3 = tf.constant([[1,2,3],
                      [3,4,5]])

# 텐서의 모양을 반환
print(tensr3.shape) # (2,3)

# 0을 원하는 모양대로 반환해주는 함수
tensr4 = tf.zeros([2,2])
print(tensr4)

# 텐서플로우의 변수
# 변수(웨이트라고 생각하면 좋다, 괄호 안 초기값)
w = tf.Variable(1.0)
print(w)
print(w.numpy()) # 변수에 저장된 값 가능

# w값 수정하기
w.assign(2)

# 행렬 연산 함수
행렬X = tf.constant( [ [10,20,30,40] ])
행렬W = tf.constant( [ [w1,w2,w3,w4] ])
행렬W뒤집은거 = tf.transpose(행렬W)

노드1 = tf.matmul( 행렬X, 행렬W뒤집은거 ) # 행렬 곱셈 가능
print(노드1)

키로 신발 사이즈 예측하기

import tensorflow as tf

# 기본 데이터
high = 170
shoe = 260

# Weight 변수 선언
a = tf.Variable(0.1)
b = tf.Variable(0.2)

# loss function 정의
def los():
    exp = high * a + b
    return tf.square(260 - exp)  # (실제값 = 예측값)^2

# optimizer
opt = tf.keras.optimizers.Adam(learning_rate=0.1)

# for문으로 300번 반복해줌
for i in range(300):
		# 손실함수, var_list -> 업데이트 할 목록
    opt.minimize(los, var_list=[a, b])      
		print(a.numpy(), b.numpy()) # 숫자로 변환

# a=1.52, b=1.62

두 값과의 관계 파악

import tensorflow as tf

# 딥러닝: 모델 만들기 -> 학습

# x -> y 관계
train_x = [1, 2, 3, 4, 5, 6, 7]
train_y = [3, 5, 7, 9, 11, 13, 15]

# Weight 변수
a = tf.Variable(0.1)  # randomize
b = tf.Variable(0.1)

# 손실 함수 정의
def los(a, b):
    exp_y = train_x * a + b
    # (예1-실1)^2 + (예2-실2)^2 ... 알아서 해줌
    return tf.keras.losses.mse(train_y, exp_y)

# optimizer
# 너무 느릴경우 러닝레이트 조절 0.001 -> 0.01
opt = tf.keras.optimizers.Adam(learning_rate=0.01)

# 1000회 반복
for i in range(1000):
    opt.minimize(los(a, b), var_list=[a, b])
    print(a.numpy(), b.numpy())

# 2, 1과 가까워짐
반응형