-
[개발일지] Tensorflow 딥러닝_딥러닝이론Study/Development 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(추천)
딥러닝 학습과정
- w값들 랜덤으로 찍음
- w값 바탕으로 총손실 E를 계산
- 경사하강으로 새로운 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과 가까워짐
반응형'Study > Development' 카테고리의 다른 글
[개발일지] Flutter Bloc 상태관리 #2 Bloc Widgets (0) 2023.04.06 [개발일지] Flutter Bloc 상태관리 #1 상태관리와 Bloc (0) 2023.04.04 [개발일지] Python 기초문법 (0) 2022.12.31 [개발일지] flutter 앱개발 5주차 (0) 2022.10.03 [개발일지] flutter 앱개발 4주차 (0) 2022.10.02