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

์ด์ ๋จ๊ณ์์, Layer ํด๋์ค๋ฅผ ํ์ฉํ๋ฉด ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ๋ค๋ฃจ์ง ์์๋ ๋์์ต๋๋ค. ์ด๋ฒ ๋จ๊ณ์์๋ Layer ์ธ์คํด์ค ๊ด๋ฆฌ๋ ํธ์์ฑ์ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ํ์ฌ Layer ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ์ Parameter๋ฅผ ๊ฐ์ง ์ ์๋๋ฐ, ์ฌ๊ธฐ์ Layer ํด๋์ค๊ฐ ๋ค๋ฅธ Layer๋ ๋ด์ ์ ์๊ฒ ํ์ฅํ๊ฒ ์ต๋๋ค.
๋ ๊ฐ์ง ์ธก๋ฉด์์ ๊ฐ์ ํฉ๋๋ค. ์ธ์คํด์ค ๋ณ์๋ฅผ ์ค์ ํ ๋ Layer ์ธ์คํด์ค ์ด๋ฆ๋ _params์ ์ถ๊ฐํฉ๋๋ค. ๋ค๋ฅธ ๋ณ๊ฒฝ์ ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊บผ๋ด๋ ์ฒ๋ฆฌ ๋ถ๋ถ์ ๋๋ค. _params์์ name์ ํด๋นํ๋ ๊ฐ์ฒด๋ฅผ ๊บผ๋ผ ๋, ๊ทธ ๊ฐ์ฒด๊ฐ Layer ์ธ์คํด์ค๋ผ๋ฉด ์ฌ๊ท์ ์ผ๋ก Layer ์ Layer์์ ๋งค๊ฐ๋ณ์๋ฅผ ๊บผ๋ด์ต๋๋ค.
class Layer:
def __init__(self):
self._params = set()
def __setattr__(self, name, value):
if isinstance(value, (Parameter, Layer)): # Layer ์ถ๊ฐ
self._params.add(name)
super().__setattr__(name, value)
def params(self):
for name in self._params:
obj = self.__dict__[name]
if isinstance(obj, Layer): # Layer์์ ๋งค๊ฐ๋ณ์ ๊บผ๋ด๊ธฐ
yield from obj.params()
else:
yield obj
๋ชจ๋ธ ํน์ model์ด๋ ์ฌ๋ฌผ์ ๋ณธ์ง์ ๋จ์ํ๊ฒ ํํํ ๊ฒ์ด๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋จธ์ ๋ฌ๋์ ์ฌ์ฉ๋๋ ๋ชจ๋ธ ์ญ์ ๋ณต์กํ ํจํด์ด๋ ๊ท์น์ด ์จ์ด ์๋ ํ์์ ์์์ ์ฌ์ฉํ์ฌ ๋จ์ํ๊ฒ ํํํ ๊ฒ์ ๋งํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ชจ๋ธ์ ํํํ๊ธฐ ์ํด Model ํด๋์ค๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค. Layer ํด๋์ค๋ฅผ ์์ ๋ฐ์ ์๊ฐํ ๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๋ Model ํด๋์ค๋ Layer๋ฅผ ์์ ๋ฐ๊ธฐ ๋๋ฌธ์ Layer ํด๋์ค์ฒ๋ผ ํ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
class Model(Layer):
def plot(self, *inputs, to_file='model.png'):
y = self.forward(*inputs)
return utils.plot_dot_graph(y, verbose=True, to_file=to_file)
์ด์ ์์ ๋ค๋ฃจ์๋ sin ํจ์๋ก ์์ฑํ ๋ฐ์ดํฐ์ ํ๊ท ๋ฌธ์ ๋ฅผ ๋ค์ ํ์ด๋ณด๊ฒ ์ต๋๋ค. ์ด์ ์ ๋นํด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ , ๋งค๊ฐ๋ณ์ ๊ด๋ฆฌ๋ ์ง์ ํ ํ์๊ฐ ์์ด์ก์ต๋๋ค. ์ด๋ก์จ ์ด๋ฒ ๋จ๊ณ์ ์ฃผ์ ๋ชฉ์ ์ ๋ฌ์ฑํ์์ต๋๋ค.
import numpy as np
from dezero import Model
import dezero.layers as L
import dezero.functions as F
# dataset
np.random.seed(0)
x = np.random.rand(100, 1)
y = np.sin(2 * np.pi * x) + np.random.rand(100, 1)
# Hyperparameter setting
lr = 0.2
max_iters = 10000
hidden_size = 10
# Model definition
class TwoLayerNet(Model):
def __init__(self, hidden_size, out_size):
super().__init__()
self.l1 = L.Linear(hidden_size)
self.l2 = L.Linear(out_size)
def forward(self, x):
y = F.sigmoid(self.l1(x))
y = self.l2(y)
return y
model = TwoLayerNet(hidden_size, 1)
for i in range(max_iters):
y_pred = model(x)
loss = F.mean_squared_error(y, y_pred)
model.cleargrads()
loss.backward()
for p in model.params():
p.data -= lr * p.grad.data
if i % 1000 == 0:
print(loss)
์ถ๊ฐ์ ์ผ๋ก ์์ ์ฐ๊ฒฐ๊ณ์ธต ์ ๊ฒฝ๋ง์ ๊ตฌํํด๋๋๋ก ํ๊ฒ ์ต๋๋ค. ์ด๊ธฐํ ์ธ์๋ก fc_output_sizes์ activation์ ๋ฐ์ต๋๋ค. ์ฌ๊ธฐ์ fc๋ full connect์ ์ฝ์์ ๋๋ค. ์ด ์ธ์๋ ์ ๊ฒฝ๋ง์ ๊ตฌ์ฑํ๋ ์์ ์ฐ๊ฒฐ๊ณ์ธต๋ค์ ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ ํํ์ด๋ ๋ฆฌ์คํธ๋ก ์ง์ ํฉ๋๋ค. ์๋์์ ๊ฐ๋จํ ์์๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
class MLP(Model):
def __init__(self, fc_output_sizes, activation=F.sigmoid):
super().__init__()
self.activation = activation
self.layers = []
for i, out_size in enumerate(fc_output_sizes):
layer = L.Linear(out_size)
setattr(self, 'l' + str(i), layer)
self.layers.append(layer)
def forward(self, x):
for l in self.layers[:-1]:
x = self.activation(l(x))
return self.layers[-1](x)
๋ค์๊ณผ ๊ฐ์ด ์ ๊ฒฝ๋ง์ ๊ณ์ธต์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด์์ผ๋ก ์ด๋ฒ ๋จ๊ณ๋ฅผ ๋ง์น๊ฒ ์ต๋๋ค.
model = MLP((10, 1)) # 1์ธต
model = MLP((10, 20, 30, 40, 1)) # 5์ธต'DeZero > ๐ป์ 4๊ณ ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| step47. ์ํํธ๋งฅ์ค ํจ์์ ๊ต์ฐจ ์ํธ๋กํผ ์ค์ฐจ (0) | 2023.02.27 |
|---|---|
| step46. Optimizer๋ก ์ํํ๋ ๋งค๊ฐ๋ณ์ ๊ฐฑ์ (0) | 2023.02.25 |
| step44. ๋งค๊ฐ๋ณ์๋ฅผ ๋ชจ์๋๋ ๊ณ์ธต (0) | 2023.02.23 |
| step 43. ์ ๊ฒฝ๋ง (0) | 2023.02.19 |
| step42. ์ ํ ํ๊ท (0) | 2023.02.18 |