Skip to content

Latest commit

Β 

History

History
123 lines (103 loc) Β· 5.26 KB

File metadata and controls

123 lines (103 loc) Β· 5.26 KB

신경망을 μœ„ν•œ 데이터 ν‘œν˜„

  • ν…μ„œ(tensor) : 데이터λ₯Ό μ €μž₯ν•˜λŠ” 닀차원 λ„˜νŒŒμ΄ λ°°μ—΄, λͺ¨λ“  λ¨Έμ‹  λŸ¬λ‹ μ‹œμŠ€ν…œμ€ ν…μ„œλ₯Ό κΈ°λ³Έ 데이터 ꡬ쑰둜 μ‚¬μš©
    • 데이터λ₯Ό μœ„ν•œ μ»¨ν…Œμ΄λ„ˆ(Container)
    • μž„μ˜μ˜ 차원 개수λ₯Ό κ°€μ§€λŠ” ν–‰λ ¬μ˜ μΌλ°˜ν™”λœ λͺ¨μŠ΅

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

  • ν•˜λ‚˜μ˜ 숫자만 λ‹΄κ³  μžˆλŠ” ν…μ„œ
  • 슀칼라 ν…μ„œ, 0차원 ν…μ„œ, 0D ν…μ„œλΌκ³ λ„ 뢈림
  • ndim 속성을 μ‚¬μš©ν•˜λ©΄ λ„˜νŒŒμ΄ λ°°μ—΄μ˜ μΆ• 개수 확인이 κ°€λŠ₯
import numpy as np
x = np.array(12)
x.ndim

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

  • 숫자의 배열을 벑터 λ˜λŠ” 1D ν…μ„œλΌ 뢀름
  • 1D ν…μ„œλŠ” ν•˜λ‚˜μ˜ 좕을 가짐
import numpy as np
x = np.array([12, 3, 6])
x.ndim
  • 벑터와 ν…μ„œμ˜ ν‘œν˜„μ— ν˜Όλ™μ„ 쑰심
    • 5D 벑터: ν•˜λ‚˜μ˜ 좕을 따라 5개의 차원을 κ°€μ§„ 것
    • 5D ν…μ„œ: 5개의 좕을 κ°€μ§„ 것

ν–‰λ ¬(2D ν…μ„œ)

  • λ²‘ν„°μ˜ 배열이 ν–‰λ ¬(matrix) λ˜λŠ” 2D ν…μ„œ
import numpy as np
x = np.array([12, 3, 6],
            [2, 13, 9],
            [4, 1, 6])
x.ndim

3D ν…μ„œμ™€ 고차원 ν…μ„œ

import numpy as np
x = np.array([
            [[12, 3, 6],
            [2, 13, 9],
            [4, 1, 6]],
            [[2, 1, 3],
            [12, 23, 19],
            [4, 12, 8]]
            ])
x.ndim
  • λ”₯λŸ¬λ‹μ—μ„œλŠ” 보톡 0Dμ—μ„œ 4D κΉŒμ§€μ˜ ν…μ„œλ₯Ό λ‹€λ£Έ

핡심 속성

  • μΆ•μ˜ 개수(랭크) : 예둜 3D ν…μ„œμ—λŠ” 3개의 좕이 쑴재, λ„˜νŒŒμ΄ λΌμ΄λΈŒλŸ¬λ¦¬μ— ndim 속성을 톡해 확인 κ°€λŠ₯
  • 크기(shape) : ν…μ„œμ˜ 각 좕을 따라 μ–Όλ§ˆλ‚˜ λ§Žμ€ 차원이 μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚Έ 파이썬의 νŠœν”Œ
  • 데이터 νƒ€μž… : ν…μ„œμ— ν¬ν•¨λœ λ°μ΄ν„°μ˜ νƒ€μž…
    • ex] float32, uint8, float64 ...
    • λ“œλ¬Όκ²Œ char νƒ€μž…μ„ μ‚¬μš©ν•˜κΈ°λ„ 함

λ„˜νŒŒμ΄λ‘œ ν…μ„œ μ‘°μž‘

  • 배열에 μžˆλŠ” νŠΉμ • μ›μ†Œλ“€μ„ μ„ νƒν•˜λŠ” 것을 μŠ¬λΌμ΄μ‹±(slicing) 이라 함

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

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

벑터 데이터

  • 첫번째 μΆ•: μƒ˜ν”Œ μΆ•
  • λ‘λ²ˆμ§Έ μΆ•: νŠΉμ„± μΆ•(feature axis)
  • ex] λ‚˜μ΄, 번호, μ†Œλ“μœΌλ‘œ κ΅¬μ„±λœ 인ꡬ 톡계 λ°μ΄ν„°μ˜ 경우 각 μ‚¬λžŒμ€ 3개의 값을 κ°€μ§„ λ²‘ν„°λ‘œ κ΅¬μ„±λ˜κ³  10만 λͺ…이 ν¬ν•¨λœ 전체 데이터셋은 (100000, 3) 크기의 ν…μ„œμ— μ €μž₯

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

  • λ°μ΄ν„°μ—μ„œ μ‹œκ°„(λ˜λŠ” μ—°μ†λœ μˆœμ„œ)이 μ€‘μš”ν•  λ•ŒλŠ” μ‹œκ°„ 좕을 ν¬ν•¨ν•œ 3D ν…μ„œλ‘œ μ €μž₯
  • κ΄€λ‘€μ μœΌλ‘œ μ‹œκ°„ 좕은 항상 두 번째 μΆ•
  • ex] 1λΆ„λ§ˆλ‹€ 'ν˜„μž¬ 주식 가격', '1λΆ„ λ™μ•ˆ 졜고 가격', '1λΆ„ λ™μ•ˆ μ΅œμ†Œ 가격'을 μ €μž₯. 1λΆ„λ§ˆλ‹€ λ°μ΄ν„°λŠ” 3Dλ²‘ν„°λ‘œ μΈμ½”λ”©λ˜κ³  ν•˜λ£¨ λ™μ•ˆμ˜ κ±°λž˜λŠ” (390, 3) 크기의 2D ν…μ„œλ‘œ 인코딩(ν•˜λ£¨ 거래 μ‹œκ°„ 390λΆ„), 250일치의 λ°μ΄ν„°λŠ” (250, 390, 3) 크기의 3D ν…μ„œλ‘œ μ €μž₯


이미지 데이터

  • μ΄λ―Έμ§€λŠ” '높이', 'λ„ˆλΉ„', '컬러 채널'의 3μ°¨μ›μœΌλ‘œ 이뀄짐
  • 흑백 μ΄λ―Έμ§€μ˜ 경우 채널 μ°¨μ›μ˜ ν¬κΈ°λŠ” 1둜 256x256 크기의 흑백 이미지 128κ°œλŠ” (128, 256, 256, 1) 크기의 ν…μ„œμ— μ €μž₯


μ‹ κ²½λ§μ˜ ꡬ쑰

  • 신경망 ν›ˆλ ¨μ˜ μš”μ†Œ

    • λ„€νŠΈμ›Œν¬(λ˜λŠ” λͺ¨λΈ) 을 κ΅¬μ„±ν•˜λŠ” μΈ΅
    • μž…λ ₯ 데이터 와 그에 μƒμ‘ν•˜λŠ” 타깃
    • ν•™μŠ΅μ— μ‚¬μš©ν•  ν”Όλ“œλ°± μ‹ ν˜Έλ₯Ό μ •μ˜ν•˜λŠ” 손싀 ν•¨μˆ˜
    • ν•™μŠ΅ μ§„ν–‰ 방식을 κ²°μ •ν•˜λŠ” μ˜΅ν‹°λ§ˆμ΄μ €
  • Layer Ex]

    • 차원이 784인 2D ν…μ„œλ₯Ό μž…λ ₯으둜 λ°›λŠ” μΈ΅ (배치 차원인 0번째 좕은 μ§€μ •ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ–΄λ–€ 배치 크기도 μž…λ ₯으둜 받을 수 있음)
from keras import layers

layer = layers.Dense(32, input_shape=(784,))

  • Kerasμ—μ„œλŠ” λͺ¨λΈμ— μΆ”κ°€λœ 측을 μžλ™μœΌλ‘œ μƒμœ„ 측의 크기와 λ§žμΆ”μ–΄ μ£ΌκΈ° λ•Œλ¬Έμ— ν˜Έν™˜μ„±μ„ κ±±μ •ν•˜μ§€ μ•Šμ•„λ„ 됨
    • Ex] λ‘λ²ˆμ§Έ μΈ΅μ—λŠ” input_shape λ§€κ°œλ³€μˆ˜ μ§€μ •ν•˜μ§€ μ•ŠμŒ, μ•žμ„  측의 좜λ ₯ 크기λ₯Ό μž…λ ₯ 크기둜 μžλ™μœΌλ‘œ μ±„νƒλ˜κΈ° λ•Œλ¬Έ
from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(32, input_shape=(784,)))
model.add(layers.Dense(10))

손싀 ν•¨μˆ˜μ™€ μ˜΅ν‹°λ§ˆμ΄μ €

  • 손싀 ν•¨μˆ˜(loss function) λͺ©μ  ν•¨μˆ˜(objective function) : ν›ˆλ ¨ν•˜λŠ” λ™μ•ˆ μ΅œμ†Œν™”λ  κ°’, μ£Όμ–΄μ§„ λ¬Έμ œμ— λŒ€ν•œ 성곡 μ§€ν‘œ

  • μ˜΅ν‹°λ§ˆμ΄μ €(optimizer) : 손싀 ν•¨μˆ˜λ₯Ό 기반으둜 λ„€νŠΈμ›Œν¬κ°€ μ–΄λ–»κ²Œ μ—…λ°μ΄νŠΈ 될지 κ²°μ •, νŠΉμ • μ’…λ₯˜μ˜ ν™•λ₯ μ  경사 ν•˜κ°•λ²•(SGD)λ₯Ό κ΅¬ν˜„

  • μ—¬λŸ¬ 개의 좜λ ₯을 λ‚΄λŠ” 신경망은 μ—¬λŸ¬ 개의 손싀 ν•¨μˆ˜λ₯Ό 가짐(좜λ ₯λ‹Ή ν•˜λ‚˜μ”©)

    • But 경사 ν•˜κ°•λ²• 과정은 ν•˜λ‚˜μ˜ 슀칼라 손싀 값을 κΈ°μ€€μœΌλ‘œ 함
    • 손싀이 μ—¬λŸ¬ 개인 λ„€νŠΈμ›Œν¬μ—μ„œλŠ” λͺ¨λ“  손싀이 평균을 λ‚΄μ„œ ν•˜λ‚˜μ˜ 슀칼라 μ–‘μœΌλ‘œ 합쳐짐