This commit is contained in:
Morten Hjorth-Jensen
2021-10-07 08:56:03 +02:00
parent afdd0edde7
commit 0dab750863
9 changed files with 57 additions and 43 deletions
+8 -8
View File
@@ -144,7 +144,7 @@ the number of minibatches, as exemplified in the code below.
import numpy as np
n = 100 #100 datapoints
M = 5 #size of each minibatch
M = 5 #size of each mini-batche
m = int(n/M) #number of minibatches
n_epochs = 10 #number of epochs
@@ -222,7 +222,7 @@ print("gamma_j after %d epochs: %g" % (n_epochs,gamma_j))
!ec
We note that we have defined several hyperparameters. These are now the number of epochs, the number of mini-batches and the parameters $t_0$ and $t_1$.
!split
@@ -236,9 +236,9 @@ import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDRegressor
m = 100
x = 2*np.random.rand(m,1)
y = 4+3*x+np.random.randn(m,1)
n = 100
x = 2*np.random.rand(n,1)
y = 4+3*x+np.random.randn(n,1)
X = np.c_[np.ones((m,1)), x]
theta_linreg = np.linalg.inv(X.T @ X) @ (X.T @ y)
@@ -256,7 +256,7 @@ Niterations = 1000
for iter in range(Niterations):
gradients = 2.0/m*X.T @ ((X @ theta)-y)
gradients = 2.0/n*X.T @ ((X @ theta)-y)
theta -= eta*gradients
print("theta from own gd")
print(theta)
@@ -268,7 +268,7 @@ ypredict2 = Xnew.dot(theta_linreg)
n_epochs = 50
M = 10 #size of each minibatch
M = 5 #size of each minibatch
m = int(n/M) #number of minibatches
t0, t1 = 5, 50
def learning_schedule(t):
@@ -281,7 +281,7 @@ for epoch in range(n_epochs):
random_index = np.random.randint(m)
xi = X[random_index:random_index+1]
yi = y[random_index:random_index+1]
gradients = 2 * xi.T @ ((xi @ theta)-yi)
gradients = (2.0/m) * xi.T @ ((xi @ theta)-yi)
eta = learning_schedule(epoch*m+i)
theta = theta - eta*gradients
print("theta from own sdg")