import numpy as np
from scipy.io.wavfile import read
from sklearn.neural_network import MLPRegressor
from sklearn.neural_network import MLPClassifier

# Load training and test data
X_train = read('../X_train.wav')[1].reshape(-1, 784)
y_train = (read('../y_train.wav')[1] * 9).astype(int)
X_test = read('../X_test.wav')[1].reshape(-1, 784)
y_test = (read('../y_test.wav')[1] * 9).astype(int)
X20 = X_test[:1000]
yt20 = y_test[:1000]

g = MLPRegressor(hidden_layer_sizes=(100))
f = MLPClassifier(hidden_layer_sizes=(100))

X_ = X_train[:10]

X1 = X_train[:100]
y1 = y_train[:100]

i = 0
while True:
    idx = np.random.randint(100, 60000, 100)
    X = X_train[idx]
    yt = y_train[idx]
    if i>0:print(i, np.mean((g.predict(X) - X_[yt])**2), f.score(g.predict(X20),yt20))
    for _ in range(100):
        idx = np.random.randint(100, 60000, 100)
        X0 = X_train[idx]
        y0 = y_train[idx]
        g.partial_fit(X, X_[yt])
        g.partial_fit(X0, X_[y0])
        g.partial_fit(g.predict(X), X_[yt])
        g.partial_fit(g.predict(X0), X_[y0])
        g.partial_fit(g.predict(X1), X_[y1])
    f.partial_fit(g.predict(X), yt, classes=range(10))
    i += 1

