πŸš€ λ”₯λŸ¬λ‹ μ‹€μŠ΅ - Tensorflow ν…μ„œμ˜ κ°œλ…

vincaΒ·2022λ…„ 12μ›” 14일
0

πŸŒ” AI/DL - Training

λͺ©λ‘ 보기
4/5

Introduction

Tensorflowλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ 기본적인 κ°œλ…λ“€μ„ μ„€λͺ…ν•œλ‹€.

ν…μ„œ (tensor)

  • 졜근의 λͺ¨λ“  λ¨Έμ‹  λŸ¬λ‹ μ‹œμŠ€ν…œμ€ 일반적으둜 ν…μ„œλ₯Ό κΈ°λ³Έ 데이터 ꡬ쑰둜 μ‚¬μš©
    ν…μ„œλŠ” λ¨Έμ‹  λŸ¬λ‹μ˜ κΈ°λ³Έ ꡬ성 μš”μ†Œμž„
    데이터(숫자)λ₯Ό μœ„ν•œ μ»¨ν…Œμ΄λ„ˆ
    μž„μ˜μ˜ 차원 개수λ₯Ό κ°€μ§€λŠ” ν–‰λ ¬μ˜ μΌλ°˜ν™”λœ λͺ¨μŠ΅
    • 차원(dimension)을 μ’…μ’… μΆ•(axis)이라고 뢀름

슀칼라(0D ν…μ„œ)

  • ν•˜λ‚˜μ˜ 숫자만 λ‹΄κ³  μžˆλŠ” ν…μ„œ
    • 슀칼라(scalar), 슀칼라 ν…μ„œ, 0차원 ν…μ„œ, 0D ν…μ„œ λ“±μœΌλ‘œ 뢀름
  • λ„˜νŒŒμ΄μ˜ uint8μ΄λ‚˜ float32 νƒ€μž…μ˜ μˆ«μžκ°€ 슀칼라 ν…μ„œμ— ν•΄λ‹Ή
  • ndim 속성을 μ‚¬μš©ν•˜μ—¬ μΆ• 개수 확인 κ°€λŠ₯ ~ ν…μ„œμ˜ μΆ• 개수λ₯Ό 랭크(rank)라고도 뢀름
    • 슀칼라 ν…μ„œμ˜ μΆ• κ°œμˆ˜λŠ” 0μž„(ndim = = 0)
import numpy as np
x = np.array(23.7)
x
x.ndim

##κ²°κ³Ό
array(23.7)
0

벑터(1D ν…μ„œ)

  • 숫자의 λ°°μ—΄
    o 벑터 λ˜λŠ” 1D ν…μ„œλΌκ³  뢀름
  • μ°Έκ³ ) 3D 벑터 VS. 3D ν…μ„œ
    o 3D λ²‘ν„°λŠ” ν•˜λ‚˜μ˜ 좕을 따라 3개의 데이터(숫자)λ₯Ό 가짐
    o 5D ν…μ„œλŠ” 5개의 좕을 κ°€μ§„ ν…μ„œ (rankκ°€ 5인 ν…μ„œ)
x = np.array([7, 11, 2])
x
x.ndim
##κ²°κ³Ό
array([7, 11, 2])
1

핡심 속성

  • μΆ•μ˜ 개수(랭크): 예λ₯Ό λ“€μ–΄ 3D ν…μ„œμ—λŠ” 3개의 좕이 있고, ν–‰λ ¬μ—λŠ” 2개의 좕이 있음
  • λ„˜νŒŒμ΄ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œλŠ” ndim 속성에 μ €μž₯λ˜μ–΄ 있음
  • 크기(shape): ν…μ„œμ˜ 각 좕을 따라 μ–Όλ§ˆλ‚˜ λ§Žμ€ 차원이 μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚Έ 파이썬의 νŠœν”Œ
    (tuple)
  • μ•žμ— λ‚˜μ˜¨ ν–‰λ ¬μ˜ ν¬κΈ°λŠ” (4, 3)이고 3D ν…μ„œμ˜ ν¬κΈ°λŠ” (3, 3, 5)μž„
  • λ²‘ν„°μ˜ ν¬κΈ°λŠ” (3,)처럼 1개의 μ›μ†Œλ‘œ 이루어진 νŠœν”Œμž„
  • λ°°μ—΄ μŠ€μΉΌλΌλŠ” ()처럼 크기가 μ—†μŒ
  • 데이터 νƒ€μž…(λ„˜νŒŒμ΄μ—μ„œλŠ” dtype에 μ €μž₯됨): ν…μ„œμ— ν¬ν•¨λœ λ°μ΄ν„°μ˜ νƒ€μž…
  • ν…μ„œμ˜ νƒ€μž…μ€ float32, uint8, float64 등이 될 수 있음 (λ“œλ¬Όκ²Œ char νƒ€μž… μ‚¬μš©)
    o ν…μ„œλŠ” 사전에 ν• λ‹Ήλ˜μ–΄ μ—°μ†λœ λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄μ•Ό ν•˜λ―€λ‘œ λ„˜νŒŒμ΄ 배열은 κ°€λ³€ 길이의 λ¬Έμžμ—΄μ„ μ§€μ›ν•˜μ§€ μ•ŠμŒ
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labes) =
mnist.load_data()
print(train_images.ndim)
print(train_images.shape)
print(train_images.dtype)
## κ²°κ³Ό
3
(60000, 28, 28)
uint

배치(batch) 데이터

  • 일반적으둜 데이터 ν…μ„œμ˜ 첫 번째 μΆ•(인덱슀 0)은 μƒ˜ν”Œ μΆ•(sample axis)
    o μƒ˜ν”Œ 차원(sample dimension)이라고도 뢀름
  • λ”₯λŸ¬λ‹ λͺ¨λΈμ€ ν•œ λ²ˆμ— 전체 데이터셋을 μ²˜λ¦¬ν•˜μ§€ μ•Šκ³  μž‘μ€ 규λͺ¨μ˜ 배치(batch)둜 λ‚˜λˆ”
# 크기가 128인 배치
batch = train_images[:128]
# λ‹€μŒ 배치
batch = train_images[128:256]
# n번째 배치
batch = train_images[128*n: 128*(n+1)]

ν…μ„œμ˜ μ‹€μ œ 사둀

  • 벑터 데이터
    o (samples, features) 크기의 2D ν…μ„œ
  • μ‹œκ³„μ—΄ 데이터 λ˜λŠ” μ‹œν€€μŠ€(sequence) 데이터
    o (samples, timesteps, features) 크기의 3D ν…μ„œ
  • 이미지
    o (samples, height, width, channels) λ˜λŠ” (samples, channels, height, width) 크기의 4D ν…μ„œ
  • λ™μ˜μƒ
    o (samples, frames, height, width, channels) λ˜λŠ”
    (samples, frames, channels, height, width) 크기의 5D ν…μ„œ

벑터 데이터

  • λ°μ΄ν„°μ…‹μ—μ„œλŠ” ν•˜λ‚˜μ˜ 데이터 ν¬μΈνŠΈκ°€ λ²‘ν„°λ‘œ 인코딩
  • 첫 번째 좕은 μƒ˜ν”Œ 좕이고, 두 번째 좕은 νŠΉμ§• μΆ•(feature axis)
  • 예) μ‚¬λžŒμ˜ λ‚˜μ΄, 우편 번호, μ†Œλ“μœΌλ‘œ κ΅¬μ„±λœ 인ꡬ 톡계 데이터
    o 각 μ‚¬λžŒμ€ 3개의 값을 κ°€μ§„ λ²‘ν„°λ‘œ ꡬ성됨
    o 10만 λͺ…이 ν¬ν•¨λœ 전체 λ°μ΄ν„°μ„ΈνŠΈλŠ” (100000, 3) 크기의 ν…μ„œμ— μ €μž₯될 수 있음

μ‹œκ³„μ—΄ 데이터 λ˜λŠ” μ‹œν€€μŠ€ 데이터 (1)

  • μ‹œκ³„μ—΄ λ°μ΄ν„°λŠ” μ‹œκ°„ μΆ•(νƒ€μž„μŠ€ν…)을 ν¬ν•¨ν•˜μ—¬ 3D ν…μ„œλ‘œ μ €μž₯됨
  • μ‹œν€€μŠ€ λ°μ΄ν„°λŠ” μˆœμ„œ μΆ•(μŠ€ν…)을 ν¬ν•¨ν•˜μ—¬ 3D ν…μ„œλ‘œ μ €μž₯됨
  • 각 μƒ˜ν”Œμ€ 벑터(2D ν…μ„œ)의 μ‹œν€€μŠ€λ‘œ 인코딩

μ‹œκ³„μ—΄ 데이터 λ˜λŠ” μ‹œν€€μŠ€ 데이터 (2)

  • 일반적으둜 νƒ€μž„μŠ€ν… 좕은 두 번째 μΆ•(μΈλ±μŠ€κ°€ 1인 μΆ•)을 μ‚¬μš©
  • 예) 주식 가격 λ°μ΄ν„°μ„ΈνŠΈ: 1λΆ„λ§ˆλ‹€ ν˜„μž¬ 주식 가격과 μ§€λ‚œ 1λΆ„ λ™μ•ˆμ˜ 졜고 가격과 μ΅œμ†Œ
    가격 μ €μž₯
    o 1λΆ„λ§ˆλ‹€ λ°μ΄ν„°λŠ” 3D λ²‘ν„°λ‘œ 인코딩됨
    o ν•˜λ£¨ λ™μ•ˆμ˜ κ±°λž˜λŠ” (390, 3) 크기의 2D ν…μ„œλ‘œ 인코딩 κ°€λŠ₯ (ν•˜λ£¨μ˜ 거래 μ‹œκ°„: 390λΆ„)
    o 250일치의 λ°μ΄ν„°λŠ” (250, 390, 3) 크기의 3D ν…μ„œλ‘œ μ €μž₯
    β€’ 1일치 데이터가 ν•˜λ‚˜μ˜ μƒ˜ν”Œ

이미지 데이터

  • μ΄λ―Έμ§€λŠ” μ „ν˜•μ μœΌλ‘œ 높이, λ„ˆλΉ„, 채널 수의 3μ°¨μ›μœΌλ‘œ 이루어짐
    o (MNIST λ°μ΄ν„°μ„ΈνŠΈ) grayscale μ΄λ―Έμ§€λŠ” 단일 μ±„λ„λ§Œμ„ κ°€μ§€κ³  μžˆμ–΄ 2D ν…μ„œλ‘œ μ €μž₯ν•  수 μžˆμ§€λ§Œ κ΄€
    둀상 이미지 ν…μ„œλŠ” 3D둜 μ €μž₯
  • 예1) 256Γ—256 크기의 grayscale 이미지에 λŒ€ν•œ
    128개의 배치: (128, 256, 256, 1) 크기 ν…μ„œ
  • 예2) 예1의 이미지가 컬러 이미지이고
    128개의 배치: (128, 256, 256, 3) 크기 ν…μ„œ

λΉ„λ””μ˜€ 데이터

  • ν•˜λ‚˜μ˜ λΉ„λ””μ˜€λŠ” ν”„λ ˆμž„μ˜ 연속이고 각 ν”„λ ˆμž„μ€ ν•˜λ‚˜μ˜ 컬러 μ΄λ―Έμ§€μž„
  • ν”„λ ˆμž„μ€ (height, width, color_depth)의 3D ν…μ„œλ‘œ μ €μž₯ Þ ν”„λ ˆμž„μ˜ 연속은
    (frames, height, width, color_depth)의 4D ν…μ„œλ‘œ μ €μž₯
  • μ—¬λŸ¬ λΉ„λ””μ˜€μ˜ λ°°μΉ˜λŠ” (samples, frames, height, width, color_depth)의 5D ν…μ„œλ‘œ
    μ €μž₯ν•  수 있음
  • 예1) 60초 144Γ—256 λΉ„λ””μ˜€ 클립을 μ΄ˆλ‹Ή 4ν”„λ ˆμž„μœΌλ‘œ μƒ˜ν”Œλ§ ~ (240, 144, 256, 3)
  • 예2) 예1의 λΉ„λ””μ˜€ 클립을 4개 κ°€μ§„ 배치 ~ (4, 240, 144, 256, 3) 크기의 ν…μ„œμ— μ €μž₯

TensorFlow 2.x

  • 2019.10 TensorFlow 2.0 Release
    o μ΅œμ‹  버전: 2.4.0 (2020λ…„ 10μ›” κΈ°μ€€)
  • Eager execution (Define by Run) ~ 일반적인 ν”„λ‘œκ·Έλž˜λ° 방식, PyTorch의 영ν–₯
  • Functions, not session
  • AutoGraph ~ 속도 κ°œμ„  (@tf.function)
  • Keras Python API
  • API Cleanup (no more globals)

TF1 Vs TF2

  • μ½”λ“œμ˜ 차이
  • AutoGraph
profile
뢉은 λ°° μ˜€μƒ‰ 딱닀ꡬ리 개발자 πŸ¦ƒCloud & DevOps

0개의 λŒ“κΈ€