| μΌ | μ | ν | μ | λͺ© | κΈ | ν |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- μ μ¬μμλͺ¨λΈ
- 무결μ±
- νμ΄μ¬
- 무결μ±μ μ§
- sklearn
- TDD
- latent factor
- ALTERTABLE
- μ£Όμ±λΆ μ°ΎκΈ°
- ν
- Hyperlink Graphs
- 컨ν μ΄λκ°μ²΄
- ν€ μ’ λ₯
- μΈλλ³κ°λΉμ§μ»¬λ ν°
- SQLDDL
- RENAMETABLE
- ν΄λ¦°μ½λ
- 무결μ±μ μ§λ©μ»€λμ¦
- λΆκ½λ°μ΄ν°μ
- Python
- knn_classify
- μκ³ λ¦¬μ¦
- CREATETABLE
- λ¬Έμμ΄
- μ¬μ΄ν·λ°
- λ°±μ€
- Key μ’ λ₯
- DROPTABLE
- latent factor model
- SQL
- Today
- Total
DonHurry
step39. ν©κ³ ν¨μ λ³Έλ¬Έ
π’ λ³Έ ν¬μ€ν μ λ°λ°λ₯λΆν° μμνλ λ₯λ¬λ3μ κΈ°λ°μΌλ‘ μμ±νμμ΅λλ€. λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ , κ°μΈμ μΈ κ³΅λΆλ₯Ό μν΄ μμ±νλ ν¬μ€ν μ λλ€. μμΈν λ΄μ©μ κ΅μ¬ ꡬ맀λ₯Ό κ°λ ₯ μΆμ²λ립λλ€.

μ΄λ² λ¨κ³μμλ ν©κ³λ₯Ό ꡬνλ ν¨μ sumμ μΆκ°νκ² μ΅λλ€. [κ·Έλ¦Ό 39-3]μ 보면 sum ν¨μκ° μ΄λ ν μν μ νλμ§ μ μ μμ΅λλ€. μ€μν κ²μ μμ μμ νμ λλ€. κΈ°μΈκΈ°λ₯Ό μ λ ₯ λ³μμ νμκ³Ό κ°μμ§λλ‘ λ³΅μ¬ν΄μΌ ν©λλ€. μ΄μ λ¨κ³λ€κ³Ό λ§μ°¬κ°μ§λ‘ μμ νμμλ Variable μΈμ€ν΄μ€λ₯Ό μ¬μ©νκΈ° λλ¬Έμ λ³΅μ¬ μμ λ DeZero ν¨μλ‘ ν΄μΌ ν©λλ€. μ΄λ νμμ λ§κ² μμλ₯Ό 볡μ¬νλ μμ μ λνμ΄μ λΈλ‘λμΊμ€νΈλΌλ κ²κ³Ό κ°μ κΈ°λ₯μ λλ€. λΈλ‘λμΊμ€νΈλ λ€μ λ¨κ³μμ ꡬνν μμ μ΄μ§λ§, broadcast_toλΌλ ν¨μλ sum ν¨μ ꡬνμλ μ°μ΄κΈ° λλ¬Έμ 미리 κ°μ Έμ μ¬μ©νλλ‘ νκ² μ΅λλ€.

μ°μ Sum ν΄λμ€μ sum ν¨μλ₯Ό ꡬνν΄λ³΄κ² μ΅λλ€.
class Sum(Function):
def forward(self, x):
self.x_shape = x.shape
y = x.sum()
return y
def backward(self, gy):
gx = broadcast_to(gy, self.x_shape)
return gx
def sum(x):
return Sum()(x)
ν μ€νΈν΄λ³΄λ©΄ μ μμ μΌλ‘ λμνλ κ²μ νμΈν μ μμ΅λλ€.
import numpy as np
from dezero import Variable
import dezero.functions as F
x = Variable(np.array([1, 2, 3, 4, 5, 6]))
y = F.sum(x)
y.backward()
print(y)
print(x.grad)
x = Variable(np.array([[1, 2, 3], [4, 5, 6]]))
y = F.sum(x)
y.backward()
print(y)
print(x.grad)
variable(21)
variable([1 1 1 1 1 1])
variable(21)
variable([[1 1 1]
[1 1 1]])
DeZero ν¨μλ€μ μμ νλ λνμ΄μ ν¨μλ€μ νμ©νμ¬ κ΅¬ννκ³ μμ΅λλ€. λνμ΄μ np.sumμ λ°©κΈ κ΅¬νν κ²λ³΄λ€ λ λ€μν κΈ°λ₯μ μ 곡ν©λλ€. λνμ μΌλ‘ axisμ keepdimsλΌλ κΈ°λ₯μ΄ μμ΅λλ€. axisλ μΆμ μ§μ νμ¬ μνλ λ°©ν₯μΌλ‘ ν©κ³λ₯Ό ꡬν μ μκ³ , keepdimsλ μ λ ₯κ³Ό μΆλ ₯μ μ°¨μ μ(μΆ μ)λ₯Ό λκ°κ² μ μ§ν μ μλλ‘ νλ νλκ·Έμ λλ€. μμΈν μ€λͺ μ μλ΅νκ² μ΅λλ€. DeZeroμ sum ν¨μλ λ κΈ°λ₯μ μ§μν μ μλλ‘ μμ νκ² μ΅λλ€.
class Sum(Function):
def __init__(self, axis, keepdims):
self.axis = axis
self.keepdims = keepdims
def forward(self, x):
self.x_shape = x.shape
y = x.sum(axis=self.axis, keepdims=self.keepdims)
return y
def backward(self, gy):
# gy = utils.reshape_sum_backward(gy, self.x_shape, self.axis, self.keepdims)
gx = broadcast_to(gy, self.x_shape)
return gx
def sum(x, axis=None, keepdims=False):
return Sum(axis, keepdims)(x)
Sum ν΄λμ€λ₯Ό μ΄κΈ°νν λ axisμ keepdimsλ₯Ό μμ±μΌλ‘ λ°κ² λ³κ²½νμ΅λλ€. μμ νλ κΈ°μ‘΄κ³Ό λμΌν©λλ€. λ€λ§, μ£Όμ μ²λ¦¬λ λΆλΆμ΄ μΆκ°λμλλ° μ΄ ν¨μλ gyμ νμμ λ―ΈμΈνκ² μ‘°μ ν©λλ€. axisμ keepdimsλ‘ μΈν΄ κΈ°μΈκΈ°μ νμμ λ³ννλ κ²½μ°κ° μκΈ°κΈ° λλ¬Έμ μ΄λ₯Ό μν ν¨μμ λλ€. κ΅μ¬μμλ λ³Έμ§μμ λ²μ΄λκΈ° λλ¬Έμ μ€λͺ μ μλ΅νλ€κ³ νλ, λμ΄κ°λλ‘ νκ² μ΅λλ€. κΆκΈνμ λΆλ€μ κΉνλΈμ μ½λκ° μμΌλ μ°Ύμ보μλ©΄ μ’μ κ² κ°μ΅λλ€.
λ§μ§λ§μΌλ‘ Variableμ λ©μλλ‘ μ¬μ©ν μ μλλ‘ λ€μ μ½λλ₯Ό μΆκ°ν©λλ€.
class Variable:
...
def sum(self, axis=None, keepdims=False):
return dezero.functions.sum(self, axis, keepdims)
ν μ€νΈλ λ€μκ³Ό κ°μ΄ μ§νν μ μμ΅λλ€.
x = Variable(np.array([[1, 2, 3], [4, 5, 6]]))
y = F.sum(x, axis=0)
y.backward()
print(y)
print(x.grad)
x = Variable(np.random.randn(2, 3, 4, 5))
y = x.sum(keepdims=True)
print(y.shape)
variable([5 7 9])
variable([[1 1 1]
[1 1 1]])
(1, 1, 1, 1)
'DeZero > π»μ 4κ³ μ§' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| step42. μ ν νκ· (0) | 2023.02.18 |
|---|---|
| step41. νλ ¬μ κ³± (0) | 2023.02.16 |
| step40. λΈλ‘λμΊμ€νΈ ν¨μ (0) | 2023.02.15 |
| step38. νμ λ³ν ν¨μ (0) | 2023.02.13 |
| step37. ν μλ₯Ό λ€λ£¨λ€ (0) | 2023.02.12 |