In [1]:
import os
import sys
root_path = os.path.abspath("../../../")
if root_path not in sys.path:
    sys.path.append(root_path)

from NN import Basic
from Util.Util import DataUtil

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

def draw_losses(nn):
    el, il = nn.log["epoch_loss"], nn.log["iter_loss"]
    ee_base = np.arange(len(el))
    ie_base = np.linspace(0, len(el) - 1, len(il))
    plt.plot(ie_base, il, label="Iter loss")
    plt.plot(ee_base, el, linewidth=3, label="Epoch loss")
    plt.legend()
    plt.show()

def draw_results(nn, x, y):
    plt.rcParams["figure.figsize"] = (10, 8)
    nn.visualize2d(x, y)
    plt.rcParams["figure.figsize"] = (18, 8)
    draw_losses(nn)

In [2]:
x_train, y_train = DataUtil.gen_xor(size=1000, one_hot=False)
x_test, y_test = DataUtil.gen_xor(size=100, one_hot=False)
nn = Basic(model_param_settings={"n_epoch": 200}).fit(x_train, y_train, x_test, y_test, snapshot_ratio=0)
draw_results(nn, x_test, y_test)
plt.rcParams["figure.figsize"] = (10, 8)
nn.visualize2d(x_test, y_test, padding=2)


Epoch      0   Iter        0   Snapshot      0 (acc)  -  Train :     0.78   Test :     0.72
Epoch     -1   Iter       -1   Snapshot     -1 (acc)  -  Train :      1.0   Test :     0.98  -  Time Cost: 3.3001906871795654
==============================
NN_BasicNN
Decision Time: 0.00400949 s
Drawing figures...
Done.
==============================
NN_BasicNN
Decision Time: 0.0120316 s
Drawing figures...
Done.
Out[2]:
NN_BasicNN

In [3]:
x_train, y_train = DataUtil.gen_spiral(size=1000, one_hot=False)
x_test, y_test = DataUtil.gen_spiral(size=100, one_hot=False)
nn = Basic(model_param_settings={"n_epoch": 200}).fit(x_train, y_train, x_test, y_test, snapshot_ratio=0)
draw_results(nn, x_test, y_test)
plt.rcParams["figure.figsize"] = (10, 8)
nn.visualize2d(x_test, y_test, padding=2)


Epoch      0   Iter        0   Snapshot      0 (acc)  -  Train : 0.144286   Test :     0.15
Epoch     -1   Iter       -1   Snapshot     -1 (acc)  -  Train : 0.997143   Test :      1.0  -  Time Cost: 13.007873773574829
==============================
NN_BasicNN
Decision Time: 0.0070169 s
Drawing figures...
Done.
==============================
NN_BasicNN
Decision Time: 0.00751948 s
Drawing figures...
Done.
Out[3]:
NN_BasicNN

In [4]:
x_train, y_train = DataUtil.gen_nine_grid(size=1000, one_hot=False)
x_test, y_test = DataUtil.gen_nine_grid(size=100, one_hot=False)
nn = Basic(model_param_settings={"n_epoch": 200}).fit(x_train, y_train, x_test, y_test, snapshot_ratio=0)
draw_results(nn, x_test, y_test)
plt.rcParams["figure.figsize"] = (10, 8)
nn.visualize2d(x_test, y_test, padding=2)


Epoch      0   Iter        0   Snapshot      0 (acc)  -  Train :     0.27   Test :     0.26
Epoch     -1   Iter       -1   Snapshot     -1 (acc)  -  Train :     0.99   Test :     0.98  -  Time Cost: 2.3822028636932373
==============================
NN_BasicNN
Decision Time: 0.00451159 s
Drawing figures...
Done.
==============================
NN_BasicNN
Decision Time: 0.00551128 s
Drawing figures...
Done.
Out[4]:
NN_BasicNN

In [5]:
import math
x, y, x_test, y_test = {}, {}, {}, {}
for size in (100, 1000, 10000):
    (x[size], y[size]), (x_test[size], y_test[size]) = DataUtil.gen_noisy_linear(
        size=int(3 * size/math.log(size, 100)), n_dim=2, n_valid=2, test_ratio=50 / size, one_hot=False)

def train(size, n_epoch=200):
    plt.rcParams["figure.figsize"] = (10, 8)
    nn = Basic(model_param_settings={"n_epoch": int(n_epoch/math.log(size, 100))}).fit(
        x[size], y[size], x_test[size], y_test[size], snapshot_ratio=0).visualize2d(x_test[size], y_test[size])
    plt.rcParams["figure.figsize"] = (18, 8)
    draw_losses(nn)
    plt.rcParams["figure.figsize"] = (10, 8)
    nn.visualize2d(x_test[size], y_test[size], padding=2)

In [6]:
train(100)
train(1000)
train(10000)


Epoch      0   Iter        0   Snapshot      0 (acc)  -  Train :      0.6   Test : 0.873333
Epoch     -1   Iter       -1   Snapshot     -1 (acc)  -  Train : 0.866667   Test :     0.96  -  Time Cost: 1.319288969039917
==============================
NN_BasicNN
Decision Time: 0.00401139 s
Drawing figures...
Done.
==============================
NN_BasicNN
Decision Time: 0.0050118 s
Drawing figures...
Done.
Epoch      0   Iter        0   Snapshot      0 (acc)  -  Train :     0.34   Test :     0.37
Epoch     -1   Iter       -1   Snapshot     -1 (acc)  -  Train :     0.82   Test :     0.99  -  Time Cost: 2.9834976196289062
==============================
NN_BasicNN
Decision Time: 0.00501299 s
Drawing figures...
Done.
==============================
NN_BasicNN
Decision Time: 0.0050149 s
Drawing figures...
Done.
Epoch      0   Iter        0   Snapshot      0 (acc)  -  Train :    0.584   Test :     0.52
Epoch     -1   Iter       -1   Snapshot     -1 (acc)  -  Train : 0.858667   Test : 0.933333  -  Time Cost: 14.430089473724365
==============================
NN_BasicNN
Decision Time: 0.00400877 s
Drawing figures...
Done.
==============================
NN_BasicNN
Decision Time: 0.00551486 s
Drawing figures...
Done.