ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [개발일지] 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(추천)
    

    딥러닝 학습과정

    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과 가까워짐
    
    반응형

    댓글

© 2023. titann all rights reserved