TensorFlow(텐서플로)

이주현·2023년 12월 26일

딥러닝

목록 보기
7/11

텐서플로는 텐서를 기본으로한다

  • 변수 : 변경이 가능한 수

  • 상수 : 값을 바꾸지 못하는 수

  • 텐서의 타입이 다르면 연산이 안된다.

  • astypes을 사용해서 타입을 맞쳐주고 연산하기


시퀀스(단어 또는 문장)

  • 단어 하나당 1차원

  • 문장 2차원

  • 문장들이 모인 데이터셋 3차원

이미지

  • 흑백이미지 2차원

  • 컬러이미지 3차원

  • 그러면 데이터셋은 여기서 +1차원

데이터 자체가 4차원 5차원 일 수도 있다


Rank 와 Shape

Rank

  • Rank는 텐서의 차원 수를 나타낸다

  • 0부터 시작

    • OD 텐서 = 스칼라
    • 1D 텐서 = 벡터
    • 2D 텐서 = 행렬
    • 3D 텐서 = 3차원 배열
  • Rank는 텐서의 중첩된 깊이를 나타내며
    각 차원마다 하나의 축(axis)이 있다

Shape

  • Shape는 텐서의 각 차원의 크기를 나타낸다

  • 각 차원마다 포함된 요소의 수를 나열한 튜플 형태로 표현

  • ex) 2D 행렬의 Shape는 (행 수, 열 수)로 표현


상수와 변수의 차이

상수

  • 상수는 값을 한 번 할당하면 그 값을 변경할 수 없는 데이터

  • 프로그램에서 변하지 않아야 하는 값들을 나타내는 데 사용

변수

  • 변수는 값을 할당하고 나중에 그 값을 변경할 수 있는 데이터

  • 프로그램에서 데이터를 저장하고 조작하는 데 사용


TensorFlow의 기본 연산

print(tf.add(a, b))  # +
print(tf.subtract(a, b))  # -
print(tf.divide(a, b))  # /
print(tf.multiply(a, b)) # * --> 내적X, element-wise product

Reduce 와 Random

  • Reduce 와 Random 은 텐서플로에서
    데이터 조작 및 무작위성을 활용하는 데 중요한 역할을 한다

Reduce

  • 텐서의 차원을 축소하고 요약하는 연산

  • 주어진 축(axis)을 텐서의 값을 합치거나
    평균내는 등의 연산을 수행

  • 대표적인 reduce 연산

    • tf.reduce_sum
    • tf.reduce_mean
    • tf.reduce_max
    • tf.reduce_min
import tensorflow as tf

# 2D 텐서
matrix = tf.constant([[1, 2, 3], [4, 5, 6]])

# 열(axis=1)을 따라 합산
sum_result = tf.reduce_sum(matrix, axis=1)  # 결과: [6, 15]

Random

  • 텐서플로에서 난수 생성과 관련된 함수와 연산을 의미
    • tf.random.uniform
    • tf.random.normal
    • tf.random.shuffle
  • 이러한 랜덤 함수는 모델 초기화, 데이터증강, 드롭아웃 등
    다양한 머신 러닝 작업에 사용된다
import tensorflow as tf

# 균일 분포로부터 무작위 텐서 생성
random_tensor = 
tf.random.uniform(shape=(3, 3), minval=0, maxval=1)  
# 0에서 1 사이의 난수 텐서 생성

# 데이터 무작위 섞기
data = tf.constant([1, 2, 3, 4, 5])
shuffled_data = tf.random.shuffle(data)  # 데이터를 무작위로 섞음

학습

  • 옵티마이저를 사용해서 최적의 weight값을 찾음

  • 지도학습 비지도학습은 opt.minimize를 사용하지만

  • 강화학습은 opt.maximize를 사용한다

  • 지도,비지도학습은 감점제이고

  • 강화학습은 +를 해주고 끝이 없다


모델 만드는 순서

  1. EDA
  2. 전처리 - scaling, encoding, ... etc
  3. Data split
  4. 모델 빌드
  5. 학습
  6. 최적화
  7. 평가

모델 만드는 3가지 방법

  • seq 함수를 사용 <-- 제일 쉬운 방법

  • 함수 API <-- 약간 더 복잡한

  • class 객체를 만들기 <-- 일반적으로 모델을 만드는 방법


Sequential API

  • 장점 : 단순하게 층을 쌓는 방식으로 쉽고 사용하기가 간단하다

  • 단점 : 복잡한 모델에는 사용하기 어렵다


Functional API

  • 장점
    Sequential 로는 구현하기 어려운 복잡한 모델들을 구현 가능하다

  • 단점 : 어렵다.. 연습 필요...

  • 입력의 크기(shape)를 명시한 입력층(Input layer)을
    모델의 앞단에 정의해주어야 한다


Sub Class

  • 장점 : 아주 복잡한 모델들 조차 구현이 가능하다

  • 단점 : 객체 지향 프로그래밍(Object-oriented programming)에
    익숙해야 하므로 코드 사용이 가장 까다롭다


Compile 방법

  • optimizer = 'adam'

  • loss = 'binary_crossentropy' ( 이진 분류 )

    • cateorical_crossentropy = 다중 분류
      (one-hot encoding 일 때 사용)
    • sparse_categorical_crossentrop = 다중 분류(정수 형태)
  • metrics = 'acc'

# 방법 1
model.compile(
    optimizer = 'adam',
    loss = 'sparse_categorical_crossentropy', 
    metrics = 'acc'
)

# 방법 2
model.compile(optimizer=Adam(learning_rate=0.001),
loss='binary_crossentropy', metrics=['accuracy'])
profile
Backend Delveloper

0개의 댓글