maine_learning:extream_learning_machine
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
maine_learning:extream_learning_machine [2015/02/14 10:35] – rex8312 | maine_learning:extream_learning_machine [2024/03/23 02:42] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 11: | 줄 11: | ||
- 은닉 계층의 가중치 $\beta$를 Penrose-Moore peudo 역행렬을 이용해 반복없이 바로 구한다. | - 은닉 계층의 가중치 $\beta$를 Penrose-Moore peudo 역행렬을 이용해 반복없이 바로 구한다. | ||
- $T = H \beta$가 되어야 하므로, $\beta = H' | - $T = H \beta$가 되어야 하므로, $\beta = H' | ||
+ | |||
+ | ===== 간단한 구현 ===== | ||
* https:// | * https:// | ||
+ | <code python ELM.py> | ||
+ | import numpy as np | ||
+ | import plotille | ||
+ | import tqdm | ||
+ | from IPython import embed | ||
+ | from scipy.linalg import pinv2 | ||
+ | from sklearn.datasets import make_circles, | ||
+ | |||
+ | |||
+ | class ELM: | ||
+ | def __init__(self, | ||
+ | self.input_size = x.shape[-1] | ||
+ | if hidden_dim is None: | ||
+ | self.hidden_size = int(x.shape[0] / 7) | ||
+ | else: | ||
+ | self.hidden_size = hidden_dim | ||
+ | self.input_weights = np.random.normal(size=[self.input_size, | ||
+ | self.biases = np.random.normal(size=[self.hidden_size]) | ||
+ | self.output_weights = np.dot(pinv2(self.hidden_nodes(x)), | ||
+ | |||
+ | def hidden_nodes(self, | ||
+ | G = np.dot(X, self.input_weights) + self.biases | ||
+ | relu = lambda x_: np.maximum(x_, | ||
+ | H = relu(G) | ||
+ | return H | ||
+ | |||
+ | def __call__(self, | ||
+ | H = self.hidden_nodes(x) | ||
+ | y = np.dot(H, self.output_weights) | ||
+ | return y | ||
+ | |||
+ | |||
+ | if __name__ == ' | ||
+ | |||
+ | X, y = make_moons(n_samples=500, | ||
+ | X = (X - X.min(0) + 1e-6) / (X.max(0) - X.min(0) + 1e-6) | ||
+ | |||
+ | n_hiddens = list(range(2, | ||
+ | losses = list() | ||
+ | for n_hidden in tqdm.tqdm(n_hiddens): | ||
+ | mask = np.random.random(X.shape[0]) < 0.1 | ||
+ | train_x, train_y = X[mask], y[mask] | ||
+ | test_x, test_y = X[~mask], y[~mask] | ||
+ | model = ELM(train_x, | ||
+ | loss = (0.5 * (test_y - model(test_x)) ** 2).mean() | ||
+ | losses.append(loss) | ||
+ | |||
+ | print(plotille.plot(n_hiddens, | ||
+ | |||
+ | model = ELM(train_x, | ||
+ | loss = (0.5 * (test_y - model(test_x)) ** 2).mean() | ||
+ | embed(); exit() | ||
+ | </ | ||
+ | |||
+ | ===== 참고자료 ===== | ||
- | {{tag> | + | * Huang, Guang-Bin, Dian Hui Wang, and Yuan Lan. " |
+ | * https:// | ||
+ | * http:// |
maine_learning/extream_learning_machine.1423910122.txt.gz · 마지막으로 수정됨: (바깥 편집)