| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 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 |
- ALTERTABLE
- CREATETABLE
- ํด๋ฆฐ์ฝ๋
- ๋ฌด๊ฒฐ์ฑ์ ์ง๋ฉ์ปค๋์ฆ
- ๋ฌด๊ฒฐ์ฑ
- SQLDDL
- ์๊ณ ๋ฆฌ์ฆ
- TDD
- ์ฃผ์ฑ๋ถ ์ฐพ๊ธฐ
- ๋ถ๊ฝ๋ฐ์ดํฐ์
- Key ์ข ๋ฅ
- SQL
- ์ฌ์ดํท๋ฐ
- ๋ฌธ์์ด
- ๋ฌด๊ฒฐ์ฑ์ ์ง
- sklearn
- latent factor model
- ์ปจํ ์ด๋๊ฐ์ฒด
- Python
- Hyperlink Graphs
- ๋ฐฑ์ค
- ์ ์ฌ์์๋ชจ๋ธ
- ํ์ด์ฌ
- knn_classify
- latent factor
- ์ธ๋๋ณ๊ฐ๋น์ง์ปฌ๋ ํฐ
- ํ
- RENAMETABLE
- DROPTABLE
- ํค ์ข ๋ฅ
- Today
- Total
DonHurry
step12. ๊ฐ๋ณ ๊ธธ์ด ์ธ์(๊ฐ์ ํธ) ๋ณธ๋ฌธ
๐ข ๋ณธ ํฌ์คํ ์ ๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋3์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ต๋๋ค. ๋ฐฐ์ด ๋ด์ฉ์ ๊ธฐ๋กํ๊ณ , ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์์ฑํ๋ ํฌ์คํ ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ต์ฌ ๊ตฌ๋งค๋ฅผ ๊ฐ๋ ฅ ์ถ์ฒ๋๋ฆฝ๋๋ค.

์ด๋ฒ ๋จ๊ณ์์๋ ๋ ๊ฐ์ง๋ฅผ ๊ฐ์ ํด DeZero์ ํธ์์ฑ์ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ Addํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋, ๋ ๋ฒ์งธ๋ ๊ตฌํํ๋ ์ฌ๋์ ์ํ ๊ฐ์ ์ ๋๋ค. ์ฐ์ ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ๋ณํํฉ๋๋ค.

Add ํด๋์ค๋ ์ธ์๋ฅผ ๋ฆฌ์คํธ์ ๋ชจ์์ ๋ฐ๊ณ ๊ฒฐ๊ณผ๋ ํํ๋ก ๋ฐํํฉ๋๋ค. ํ์ง๋ง ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฆฌ์คํธ๋ ํํ์ ๊ฑฐ์น์ง ์๋ ๊ฒ์ด ๋ ์์ฐ์ค๋ฝ์ต๋๋ค. ํจ์ ์ ์ ์ ์ธ์ ์์ ๋ณํ(*)๋ฅผ ๋ถ์ด๋ฉด, ์์ ๊ฐ์์ ์ธ์(๊ฐ๋ณ ๊ธธ์ด ์ธ์)๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ๋ฐํ๊ฐ์ outputs ์์๊ฐ ํ๋์ธ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋๋ก ํฉ๋๋ค.
class Function:
def __call__(self, *inputs): # ๊ฐ๋ณ ๊ธธ์ด ์ธ์
xs = [input.data for input in inputs]
ys = self.forward(xs)
outputs = [Variable(as_array(y)) for y in ys]
for output in outputs:
output.set_creator(self)
self.inputs = inputs
self.outputs = outputs
return outputs if len(outputs) > 1 else outputs[0] # ๋ฆฌ์คํธ ์์๊ฐ ํ๋๋ฉด ์ฒซ ๋ฒ์งธ ์์ ๋ฐํ
๋ ๋ฒ์งธ ๊ฐ์ ์ ๊ตฌํํ๋ ์ฌ๋์ ์ํ ๊ฐ์ ์ ๋๋ค. ์ด์ ๊น์ง๋ ์ผ์ชฝ์ฒ๋ผ ๊ตฌํํด์ผ ํ์ง๋ง, ์ค๋ฅธ์ชฝ์ด ์์ฐ์ค๋ฌ์๋ณด์ ๋๋ค.

๋ ๋ฒ์งธ ๊ฐ์ ์ ์ํด Function ํด๋์ค๋ฅผ ์์ ํฉ๋๋ค. ์ด๋ฒ์๋ forward ํจ์๋ฅผ ํธ์ถํ ๋ ๋ณํ๋ฅผ ๋ถ์์ต๋๋ค. ์ด๋ด ๋๋ ๋ฆฌ์คํธ ์ธํฉ์ ๊ธฐ๋ฅ์ ํฉ๋๋ค. ๋ฆฌ์คํธ์ ์์๋ฅผ ๋ฑ๊ฐ๋ก ํ์ด์ ์ ๋ฌํฉ๋๋ค. ๋ํ ys๊ฐ ํํ์ด ์๋ ๊ฒฝ์ฐ ํํ๋ก ๋ณ๊ฒฝํด์ค๋๋ค.
class Function:
def __call__(self, *inputs):
xs = [input.data for input in inputs]
ys = self.forward(*xs) # ๋ณํ๋ฅผ ๋ถ์ฌ ์ธํฉ
if not isinstance(ys, tuple): # ํํ์ด ์๋ ๊ฒฝ์ฐ ๋ณ๊ฒฝ
ys = (ys, )
outputs = [Variable(as_array(y)) for y in ys]
for output in outputs:
output.set_creator(self)
self.inputs = inputs
self.outputs = outputs
return outputs if len(outputs) > 1 else outputs[0]
์์ ๊ฐ์ ์์ ์ด ๋๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฐ์ค๋ฌ์ด ์์ ํ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
class Add(Function):
def forward(self, x0, x1):
y = x0 + x1
return y
๋ค์์ผ๋ก Add ํด๋์ค๋ฅผ ํ์ด์ฌ ํจ์๋ก ์ฌ์ฉํ ์ ์๋๋ก ๋ณ๊ฒฝํฉ๋๋ค.
def add(x0, x1):
return Add()(x0, x1)
๋ง์ง๋ง์ผ๋ก ํ ์คํธ๋ฅผ ์งํํฉ๋๋ค. ์ด์ ์์ ํ์์ ๊ฐ๋ณ ๊ธธ์ด ์ธ์๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ๋์์ต๋๋ค. ๋ค์ ๋จ๊ณ์์๋ ์ญ์ ํ๋ฅผ ๊ตฌํํฉ๋๋ค.
x0 = Variable(np.array(2))
x1 = Variable(np.array(3))
y = add(x0, x1) # Add ํด๋์ค ์์ฑ ๊ณผ์ ์ ๊ฐ์ถ๊ธฐ
print(y.data) # 5'DeZero > ๐ป์ 2๊ณ ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| step16. ๋ณต์กํ ๊ณ์ฐ ๊ทธ๋ํ(๊ตฌํ ํธ) (0) | 2023.01.17 |
|---|---|
| step15. ๋ณต์กํ ๊ณ์ฐ ๊ทธ๋ํ(์ด๋ก ํธ) (0) | 2023.01.16 |
| step14. ๊ฐ์ ๋ณ์ ๋ฐ๋ณต ์ฌ์ฉ (0) | 2023.01.15 |
| step13. ๊ฐ๋ณ ๊ธธ์ด ์ธ์(์ญ์ ํ ํธ) (2) | 2023.01.14 |
| step11. ๊ฐ๋ณ ๊ธธ์ด ์ธ์(์์ ํ ํธ) (0) | 2023.01.12 |