import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.axes_grid1 import make_axes_locatable
from latex import latexify, format_axes
import torch
%config InlineBackend.figure_format = "retina"
%matplotlib inline
Helper Function for Plotting
def func_plot(x, y, xlabel = None, ylabel = None, title = None):
= 2, fig_width = 6)
latexify(columns
plt.scatter(x, y)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.title(title)
plt.grid() format_axes(plt.gca())
def create_XYZ(f):
# Generate data
# x = np.linspace(-30, 40, 1000)
# y = np.linspace(-30, 30, 1000)
= np.linspace(-10, 10, 1000)
x = np.linspace(85, 115, 1000)
y
# x = np.linspace(-5, 5, 100)
# y = np.linspace(-5, 5, 100)
= np.meshgrid(x, y)
X, Y
# Convert to PyTorch tensors
= torch.from_numpy(X)
X_torch = torch.from_numpy(Y)
Y_torch
# Evaluate the function
= f(X_torch, Y_torch)
Z return X, Y, Z, X_torch, Y_torch
def create_contour(X, Y, Z, ax2, alpha, scatter_pts=None, filled=True, levels=10, mark_levels=False):
if filled:
='white'
scatter_color= ax2.contourf(X, Y, Z.detach().numpy(), levels=levels, cmap='magma', alpha=alpha)
contour else:
='black'
scatter_color= ax2.contour(X, Y, Z.detach().numpy(), levels=levels, cmap='magma', alpha=alpha)
contour if scatter_pts is not None:
0], scatter_pts[1], s=10, c=scatter_color)
ax2.scatter(scatter_pts['x')
ax2.set_xlabel('y')
ax2.set_ylabel('Contour Plot')
ax2.set_title(
# Add a colorbar in between the subplots
= make_axes_locatable(ax2)
divider = divider.append_axes("right", size="5%", pad=0.1)
cax = plt.colorbar(contour, cax=cax)
cbar return ax2, contour
def plot_surface_and_contour(f, uv = None, stride=4, alpha=1, scatter_pts=None, filled=True, levels=10):
= create_XYZ(f)
X, Y, Z, X_torch, Y_torch
# Create the single figure with two subplots
= plt.figure()
fig
# Plot the 3D surface on the first subplot
= fig.add_subplot(121, projection='3d')
ax1 ='magma', edgecolor='none', alpha=alpha) # Remove grid lines
ax1.plot_surface(X, Y, Z.detach().numpy(), cmap'x')
ax1.set_xlabel('y')
ax1.set_ylabel('z')
ax1.set_zlabel(False)
ax1.grid(= False
ax1.xaxis.pane.fill = False
ax1.yaxis.pane.fill = False
ax1.zaxis.pane.fill =30, azim=30)
ax1.view_init(elev'Surface Plot')
ax1.set_title(if scatter_pts is not None:
0], scatter_pts[1], f(scatter_pts[0], scatter_pts[1]), s=100, c='black')
ax1.scatter(scatter_pts[
# Plot the contour plot on the second subplot
= fig.add_subplot(122, aspect='equal') # Set 1:1 aspect ratio
ax2
= create_contour(X, Y, Z, ax2, alpha, scatter_pts, filled, levels)
ax2, contour if uv is not None:
= uv[0](X_torch, Y_torch)
u = uv[1](X_torch, Y_torch)
v # Quiver plot for gradient
ax2.quiver(X[::stride, ::stride], Y[::stride, ::stride], u[::stride, ::stride].detach().numpy(),=140)
v[::stride, ::stride].detach().numpy(), scale
=1.0, w_pad=1.0)
plt.tight_layout(pad
# Example usage:
# Define your function f(x, y) and its gradient g(x, y)
#f = lambda x, y: x**2 + y**2
#g = lambda x, y: (2*x, 2*y)
#plot_surface_and_contour(f, "x_squared_plus_y_squared", uv=(lambda x, y: 2*x, lambda x, y: 2*y))
lambda x, y: x**2 + y**2, uv=(lambda x, y: 2*x, lambda x, y: 2*y)) plot_surface_and_contour(
Dataset1 \(y = 100x + 1 + \epsilon\)
= 2, fig_width = 6)
latexify(columns = 40
num_samples 45)
np.random.seed(
# Generate data
= np.random.uniform(-20, 20, num_samples)
x1 = 100*x1 + 1
f_x = np.random.randn(num_samples)
eps = f_x + eps
y1
= "$x$", ylabel = "$y$", title = "$y = 100x + 1 + \epsilon$") func_plot(x1, y1, xlabel
Dataset2 \(y = 3x + 4 + \epsilon\)
45)
np.random.seed(= 40
num_samples
# Generate data
= np.random.uniform(-1, 1, num_samples)
x2 = 3*x2 + 4
f_x = np.random.randn(num_samples)
eps = f_x + eps
y2
= "$x$", ylabel = "$y$", title = "$y = 3x + 4 + \epsilon$") func_plot(x2, y2, xlabel
Calculation
\(\hat{y_i} = \theta_0 + \theta_1x_i\)
\(\epsilon_i(\theta_0, \theta_1) = y_i - \hat{y_i} = y_i - \theta_0 - \theta_1x_i\)
Loss Function - MSE
\[L(\theta_0, \theta_1) = \frac{1}{N} \underset{i}{\operatorname{\sum}} \epsilon_i^2(\theta_0, \theta_1)\]
\(\frac{\partial L(\theta_0, \theta_1)}{\partial \theta_0} = \frac{2}{N} \underset{i}{\operatorname{\sum}} (y_i - \theta_0 - \theta_1x_i)(-1) = \frac{2}{N} \underset{i}{\operatorname{\sum}} \epsilon_i(-1)\)
\(\frac{\partial L(\theta_0, \theta_1)}{\partial \theta_1} = \frac{2}{N} \underset{i}{\operatorname{\sum}} (y_i - \theta_0 - \theta_1x_i)(-x_i) = \frac{2}{N} \underset{i}{\operatorname{\sum}} \epsilon_i(-x_i)\)
Gradient Descent \(\alpha \approx 0.0 - 0.1\) with Momentum \(p \approx 0.9 - 1.0\)
\[ \Delta \theta_0^i = p \Delta \theta_0^{i - 1} + (1 - p) \frac{\partial L^i(\theta_0, \theta_1)}{\partial \theta_0} \]
\[ \Delta \theta_1^i = p \Delta \theta_1^{i - 1} + (1 - p) \frac{\partial L^i(\theta_0, \theta_1)}{\partial \theta_1} \]
\[ \theta_0^{i + 1} = \theta_0^i - \alpha \Delta \theta_0^i \]
\[ \theta_1^{i + 1} = \theta_1^i - \alpha \Delta \theta_1^i \]
The Coefficients of \(L(\theta_0, \theta_1)\) Function
\(L(\theta_0, \theta_1) = \frac{1}{N} \underset{i}{\operatorname{\sum}} \epsilon_i^2(\theta_0, \theta_1) = \frac{1}{N} \underset{i}{\operatorname{\sum}} (y_i - \theta_0 - \theta_1x_i)^2\)
$ = ((y_i)^2 + (_0)^2 + (_1x_i)^2 - 2y_i_0 + 2_0 _1 x_i - 2_1 x_i y_i)$
\(L(\theta_0, \theta_1) = \frac{1}{N} (1 \times (\underset{i}{\operatorname{\sum}}y_i^2) + \theta_0 \times (-2 \underset{i}{\operatorname{\sum}} y_i) + \theta_1 \times (-2 \underset{i}{\operatorname{\sum}} x_iy_i) + \theta_0^2 \times (N) + \theta_1^2 \times (\underset{i}{\operatorname{\sum}} x_i^2) + \theta_0\theta_1 \times (2 \underset{i}{\operatorname{\sum}} x_i))\)
\[ L(\theta_0, \theta_1) = 1 \times (c_0) + \theta_0 \times (c_1) + \theta_1 \times (c_2) + \theta_0^2 \times (c_3) + \theta_1^2 \times (c_4) + \theta_0\theta_1 \times (c_5) \]
Dataset1
def generate_coeff(x, y):
= len(x)
N return np.sum(y**2)/N, -2 * np.sum(y)/N, -2 * np.sum(x * y)/N, 1, np.sum(x**2)/N, 2 * np.sum(x)/N
def L(th0, th1):
= generate_coeff(x1, y1)
c0, c1, c2, c3, c4, c5 return c0 + c1*th0 + c2*th1 + c3*th0**2 + c4*th1**2 + c5*th0*th1
plot_surface_and_contour(L)
= torch.tensor(1.0), torch.tensor(93.0)
x0, y0 = torch.tensor(0.0), torch.tensor(0.0)
v0, v1 = torch.func.grad(L, argnums=(0, 1))(x0, y0)
del_x, del_y print(del_x, del_y)
tensor(23.7581) tensor(-1764.8730)
def visualiz̀e_descent(L, x0, y0, v0, v1, levels, folderName, filename, t0, t1, alpha, p):
= []
losses =2, fig_width=6.5, fig_height=3)
latexify(columns= create_XYZ(L)
X, Y, Z, X_torch, Y_torch
= 1e-3
epsilon
= x0
xi = y0
yi
= v0
vi = v1
wi
for i in range(15):
= plt.subplots(ncols=2)
fig, ax = create_contour(X, Y, Z, ax[0], alpha=0.8, scatter_pts=(xi, yi), filled=True, levels = levels)
_, _ # Mark the minima with horizontal and vertical lines
0].axhline(y=yi, color='red', linestyle='--', alpha=0.7)
ax[0].axvline(x=xi, color='red', linestyle='--', alpha=0.7)
ax[0].scatter([t0], [t1], s=10, c='pink', marker='x', label='Minima')
ax[= torch.func.grad(L, argnums=(0, 1))(xi, yi)
del_x, del_y
= p * vi + (1 - p) * del_x
vi = p * wi + (1 - p) * del_y
wi
= xi - alpha * vi
xi = yi - alpha * wi
yi
losses.append(L(xi, yi))print(f"Epoch No. {i + 1} -> {xi}, {yi}, Loss: {L(xi, yi)}")
if (torch.linalg.norm(torch.tensor([xi - t0, yi - t1])) < epsilon):
break
# plot the line fit
= np.linspace(-10, 10, 100)
x_line = xi + yi*x_line
y_line 1].plot(x_line, y_line, label='Line fit')
ax[# ax[1].set_ylim(-1, 7)
1].plot(x_line, t1*x_line + t0, label='Actual line')
ax[1].legend()
ax[
plt.tight_layout()f"./{folderName}/{filename}-{i}.png", bbox_inches="tight")
plt.savefig(
return losses
= visualize_descent(L, x0, y0, v0, v1, [0, 1000, 2000, 3000, 5000, 7000, 15000, 25000], "D1LMedia", "d", 1, 100, 0.005, 0.99) loss1
Epoch No. 1 -> 0.9988120794296265, 93.08824157714844, Loss: 6009.27734375
Epoch No. 2 -> 0.9964632391929626, 93.26273345947266, Loss: 5709.30419921875
Epoch No. 3 -> 0.9929947853088379, 93.52040100097656, Loss: 5279.908203125
Epoch No. 4 -> 0.988461971282959, 93.85716247558594, Loss: 4743.96630859375
Epoch No. 5 -> 0.9829329252243042, 94.2679672241211, Loss: 4129.1064453125
Epoch No. 6 -> 0.9764877557754517, 94.74688720703125, Loss: 3466.33056640625
Epoch No. 7 -> 0.9692173600196838, 95.28718566894531, Loss: 2788.14013671875
Epoch No. 8 -> 0.961222231388092, 95.88142395019531, Loss: 2127.035888671875
Epoch No. 9 -> 0.9526110887527466, 96.52155303955078, Loss: 1515.26708984375
Epoch No. 10 -> 0.9434993863105774, 97.19902801513672, Loss: 980.5810546875
Epoch No. 11 -> 0.9340077638626099, 97.90491485595703, Loss: 546.472900390625
Epoch No. 12 -> 0.9242605566978455, 98.6300048828125, Loss: 232.1854248046875
Epoch No. 13 -> 0.914384126663208, 99.36495208740234, Loss: 48.958770751953125
Epoch No. 14 -> 0.90450519323349, 100.1003646850586, Loss: 2.40576171875
Epoch No. 15 -> 0.8947493433952332, 100.82694244384766, Loss: 90.51165771484375
Visualization for Dataset1
def loss_plot(loss, xlabel, ylabel, title):
= 2, fig_width = 6)
latexify(columns range(1, len(loss) + 1), loss, marker = "o", label = "Loss", color = "green")
plt.plot(
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.title(title)
plt.grid()
plt.legend() format_axes(plt.gca())
= 0.001
epsilon
for i in range(1, len(loss1)):
= np.abs(loss1[i] - loss1[i-1])
change_in_loss print(change_in_loss)
if change_in_loss < epsilon:
print(f"Converged at iteration {i}")
break
tensor(299.9731)
tensor(429.3960)
tensor(535.9419)
tensor(614.8599)
tensor(662.7759)
tensor(678.1904)
tensor(661.1042)
tensor(611.7688)
tensor(534.6860)
tensor(434.1082)
tensor(314.2875)
tensor(183.2267)
tensor(46.5530)
tensor(88.1059)
= "Epoch Number", ylabel = r"$L(\theta_0, \theta_1)$", title = "Loss vs Epoch Number - Dataset 1") loss_plot(loss1, xlabel
Dataset2
def L1(th0, th1):
= generate_coeff(x2, y2)
c0, c1, c2, c3, c4, c5 return c0 + c1*th0 + c2*th1 + c3*th0**2 + c4*th1**2 + c5*th0*th1
plot_surface_and_contour(L1)
= torch.tensor(35.0), torch.tensor(-25.0)
x0, y0 = torch.tensor(1.0), torch.tensor(0.0)
v0, v1 = torch.func.grad(L1, argnums=(0, 1))(x0, y0)
del_x, del_y print(del_x, del_y)
tensor(66.7875) tensor(-22.7458)
= visualize_descent(L1, x0, y0, v0, v1, [0, 100, 200, 300, 400, 500, 600, 800, 1000, 1200], "D2LMedia", "d", 4, 3, 0.75, 0.25) loss2
Epoch No. 1 -> 30.638282775878906, -23.57839012145996, Loss: 1049.346435546875
Epoch No. 2 -> 23.753042221069336, -21.192873001098633, Loss: 652.8497924804688
Epoch No. 3 -> 15.861068725585938, -18.251495361328125, Loss: 323.0963439941406
Epoch No. 4 -> 8.231679916381836, -15.0928955078125, Loss: 131.60641479492188
Epoch No. 5 -> 1.7863411903381348, -11.976848602294922, Loss: 67.77926635742188
Epoch No. 6 -> -2.932304859161377, -9.083971977233887, Loss: 77.9818115234375
Epoch No. 7 -> -5.735476016998291, -6.522637367248535, Loss: 106.07808685302734
Epoch No. 8 -> -6.72452974319458, -4.340756416320801, Loss: 117.43630981445312
Epoch No. 9 -> -6.206265449523926, -2.5400781631469727, Loss: 103.38958740234375
Epoch No. 10 -> -4.603233337402344, -1.0909062623977661, Loss: 72.79557800292969
Epoch No. 11 -> -2.3716626167297363, 0.054392099380493164, Loss: 39.935184478759766
Epoch No. 12 -> 0.06448984146118164, 0.9501926302909851, Loss: 15.505937576293945
Epoch No. 13 -> 2.3590428829193115, 1.6492931842803955, Loss: 3.187753438949585
Epoch No. 14 -> 4.267978191375732, 2.197558879852295, Loss: 0.7967417240142822
Epoch No. 15 -> 5.6548871994018555, 2.6312613487243652, Loss: 3.5155951976776123
Visualization for Dataset2
= 0.001
epsilon
for i in range(1, len(loss2)):
= np.abs(loss2[i] - loss2[i-1])
change_in_loss print(change_in_loss)
if change_in_loss < epsilon:
print(f"Converged at iteration {i}")
break
tensor(396.4966)
tensor(329.7534)
tensor(191.4899)
tensor(63.8271)
tensor(10.2025)
tensor(28.0963)
tensor(11.3582)
tensor(14.0467)
tensor(30.5940)
tensor(32.8604)
tensor(24.4292)
tensor(12.3182)
tensor(2.3910)
tensor(2.7189)
= "Epoch Number", ylabel = r"$L(\theta_0, \theta_1)$", title = "Loss vs Epoch Number - Dataset 2") loss_plot(loss2, xlabel
Stochastic Gradient Descent
def visualize_sdg(x, y, x0, y0, v0, v1, epochs, levels, folderName, filename, t0, t1, alpha, p):
= []
losses =2, fig_width=6.5, fig_height=3)
latexify(columns
= 1e-3
epsilon = x0
xi = y0
yi = v0
vi = v1
wi
= 0
c for i in range(epochs):
= np.random.permutation(len(x))
shuffle_idx = x[shuffle_idx], y[shuffle_idx]
x, y
for j in range(len(x)):
def L(theta0, theta1):
return (y[j] - theta0 - theta1*x[j])**2
= create_XYZ(L)
X, Y, Z, X_torch, Y_torch
if (j % 10 == 0):
= plt.subplots()
fig, ax = create_contour(X, Y, Z, ax, alpha=0.8, scatter_pts=(xi, yi), filled=True, levels = levels)
_, _ # Mark the minima with horizontal and vertical lines
fr"Epoch No. {i + 1} Iteration No. {j + 1} $L(\theta_0, \theta_1) = ({y[j]} - \theta_0 - {x[j]}\theta_1)^2$", fontsize = 8)
fig.suptitle(=yi, color='red', linestyle='--', alpha=0.7)
ax.axhline(y=xi, color='red', linestyle='--', alpha=0.7)
ax.axvline(x=10, c='pink', marker='x', label='Minima')
ax.scatter([t0], [t1], s
= torch.func.grad(L, argnums=(0, 1))(xi, yi)
del_x, del_y
losses.append(L(xi, yi))= p * vi + (1 - p) * del_x
vi = p * wi + (1 - p) * del_y
wi
= xi - alpha * vi
xi = yi - alpha * wi
yi
if (torch.linalg.norm(torch.tensor([xi - t0, yi - t1])) < epsilon):
break
if (j % 10 == 0):
print(f"Epoch No. {i + 1} Iteration No. {j + 1} -> {xi}, {yi}, Loss = {L(xi, yi)}, Nbhd = {torch.linalg.norm(torch.tensor([xi - t0, yi - t1]))}")
# plt.tight_layout()
f"./{folderName}/{filename}-{c}.png", bbox_inches="tight")
plt.savefig(
plt.close()
+= 1
c print()
return losses
SDG for Dataset2
= visualize_sdg(x2, y2, torch.tensor(35.0), torch.tensor(-25.0), torch.tensor(1.0), torch.tensor(0.0), 15, [0, 100, 200, 300, 400, 500, 600, 800, 1000, 1200], "D4LMedia", "d", 4, 3, 0.25, 0.75) loss2_1
Epoch No. 1 Iteration No. 1 -> 33.88819122314453, -25.782241821289062, Loss = 31.591655731201172, Nbhd = 41.493629455566406
Epoch No. 1 Iteration No. 11 -> -5.374091148376465, 7.283072471618652, Loss = 84.57054138183594, Nbhd = 10.30622673034668
Epoch No. 1 Iteration No. 21 -> 4.751775741577148, 9.97638988494873, Loss = 68.13531494140625, Nbhd = 7.016778945922852
Epoch No. 1 Iteration No. 31 -> 4.536127090454102, 0.919632613658905, Loss = 2.2669684886932373, Nbhd = 2.148339033126831
Epoch No. 2 Iteration No. 1 -> 4.158503532409668, 2.4186503887176514, Loss = 2.323333740234375, Nbhd = 0.602570116519928
Epoch No. 2 Iteration No. 11 -> 3.5401451587677, 3.007066011428833, Loss = 0.017487842589616776, Nbhd = 0.4599091410636902
Epoch No. 2 Iteration No. 21 -> 3.7525289058685303, 2.1846675872802734, Loss = 0.022711344063282013, Nbhd = 0.8520615696907043
Epoch No. 2 Iteration No. 31 -> 3.874723196029663, 2.99967360496521, Loss = 0.03295465558767319, Nbhd = 0.12527722120285034
Epoch No. 3 Iteration No. 1 -> 3.9543545246124268, 2.65336012840271, Loss = 0.061587825417518616, Nbhd = 0.34963226318359375
Epoch No. 3 Iteration No. 11 -> 3.449183702468872, 2.1453373432159424, Loss = 0.30850061774253845, Nbhd = 1.0167826414108276
Epoch No. 3 Iteration No. 21 -> 4.1094069480896, 1.9433906078338623, Loss = 0.756882905960083, Nbhd = 1.0622586011886597
Epoch No. 3 Iteration No. 31 -> 3.6678225994110107, 2.7688119411468506, Loss = 0.45271751284599304, Nbhd = 0.40470945835113525
Epoch No. 4 Iteration No. 1 -> 3.801668167114258, 3.2535648345947266, Loss = 0.011469850316643715, Nbhd = 0.3219171464443207
Epoch No. 4 Iteration No. 11 -> 4.038174629211426, 3.4748706817626953, Loss = 0.0007659140392206609, Nbhd = 0.4764026403427124
Epoch No. 4 Iteration No. 21 -> 4.242336273193359, 2.9407427310943604, Loss = 1.4305999279022217, Nbhd = 0.24947604537010193
Epoch No. 4 Iteration No. 31 -> 3.9689035415649414, 1.8086127042770386, Loss = 0.07037045061588287, Nbhd = 1.1917930841445923
Epoch No. 5 Iteration No. 1 -> 3.7240567207336426, 2.3159751892089844, Loss = 0.9527010917663574, Nbhd = 0.737587034702301
Epoch No. 5 Iteration No. 11 -> 4.395046710968018, 3.1973795890808105, Loss = 1.4096605777740479, Nbhd = 0.4416113793849945
Epoch No. 5 Iteration No. 21 -> 3.6081748008728027, 2.8153324127197266, Loss = 2.1054742336273193, Nbhd = 0.43316176533699036
Epoch No. 5 Iteration No. 31 -> 3.7746448516845703, 2.6530251502990723, Loss = 0.001293873181566596, Nbhd = 0.4137348234653473
Epoch No. 6 Iteration No. 1 -> 3.8919897079467773, 2.391568660736084, Loss = 0.08173397183418274, Nbhd = 0.6179441213607788
Epoch No. 6 Iteration No. 11 -> 4.037834167480469, 2.182591438293457, Loss = 0.04477541893720627, Nbhd = 0.8182836771011353
Epoch No. 6 Iteration No. 21 -> 3.673105478286743, 3.154024600982666, Loss = 1.1377997398376465, Nbhd = 0.3613635301589966
Epoch No. 6 Iteration No. 31 -> 4.297133922576904, 3.1540143489837646, Loss = 0.024644941091537476, Nbhd = 0.33467742800712585
Epoch No. 7 Iteration No. 1 -> 4.201237678527832, 2.2428081035614014, Loss = 2.056556463241577, Nbhd = 0.7834769487380981
Epoch No. 7 Iteration No. 11 -> 3.8476054668426514, 2.433769464492798, Loss = 1.4263286590576172, Nbhd = 0.5863796472549438
Epoch No. 7 Iteration No. 21 -> 4.018364906311035, 2.734009027481079, Loss = 1.860943078994751, Nbhd = 0.26662421226501465
Epoch No. 7 Iteration No. 31 -> 4.482729434967041, 3.093228578567505, Loss = 0.39899659156799316, Nbhd = 0.4916495382785797
Epoch No. 8 Iteration No. 1 -> 4.113456726074219, 2.4911856651306152, Loss = 1.9741719961166382, Nbhd = 0.5213103294372559
Epoch No. 8 Iteration No. 11 -> 3.8219592571258545, 2.327929735183716, Loss = 0.21301992237567902, Nbhd = 0.6952531337738037
Epoch No. 8 Iteration No. 21 -> 3.583648920059204, 2.4250755310058594, Loss = 0.0010889837285503745, Nbhd = 0.7098495364189148
Epoch No. 8 Iteration No. 31 -> 4.731677055358887, 3.055652618408203, Loss = 2.079366445541382, Nbhd = 0.7337905764579773
Epoch No. 9 Iteration No. 1 -> 3.6256003379821777, 2.770031452178955, Loss = 0.007088981568813324, Nbhd = 0.43938666582107544
Epoch No. 9 Iteration No. 11 -> 3.428339958190918, 3.0833497047424316, Loss = 0.0004803222545888275, Nbhd = 0.5777043700218201
Epoch No. 9 Iteration No. 21 -> 4.319526672363281, 2.2095580101013184, Loss = 0.8529860973358154, Nbhd = 0.8525818586349487
Epoch No. 9 Iteration No. 31 -> 3.726933479309082, 2.629763603210449, Loss = 0.1354113668203354, Nbhd = 0.4600438177585602
Epoch No. 10 Iteration No. 1 -> 4.6512017250061035, 2.2928197383880615, Loss = 0.17980362474918365, Nbhd = 0.9613363742828369
Epoch No. 10 Iteration No. 11 -> 3.962782382965088, 2.6071465015411377, Loss = 0.9672736525535583, Nbhd = 0.39461249113082886
Epoch No. 10 Iteration No. 21 -> 3.9321045875549316, 2.394702196121216, Loss = 0.014159280806779861, Nbhd = 0.6090937852859497
Epoch No. 10 Iteration No. 31 -> 3.992889165878296, 2.3233375549316406, Loss = 0.21419423818588257, Nbhd = 0.6766998171806335
Epoch No. 11 Iteration No. 1 -> 4.836158752441406, 3.1715548038482666, Loss = 0.01685412786900997, Nbhd = 0.8535763025283813
Epoch No. 11 Iteration No. 11 -> 3.928997039794922, 3.1560699939727783, Loss = 0.2169146090745926, Nbhd = 0.17146213352680206
Epoch No. 11 Iteration No. 21 -> 4.055086135864258, 2.7719786167144775, Loss = 0.49175935983657837, Nbhd = 0.23458097875118256
Epoch No. 11 Iteration No. 31 -> 3.433013916015625, 3.0276038646698, Loss = 0.07988596707582474, Nbhd = 0.5676576495170593
Epoch No. 12 Iteration No. 1 -> 4.019072532653809, 2.1760857105255127, Loss = 0.37585461139678955, Nbhd = 0.8241350054740906
Epoch No. 12 Iteration No. 11 -> 3.601017951965332, 2.633387565612793, Loss = 0.037653256207704544, Nbhd = 0.5418407320976257
Epoch No. 12 Iteration No. 21 -> 3.8550198078155518, 2.258765697479248, Loss = 1.5918165445327759, Nbhd = 0.7552797794342041
Epoch No. 12 Iteration No. 31 -> 4.255411624908447, 2.7007999420166016, Loss = 0.39929816126823425, Nbhd = 0.39339008927345276
Epoch No. 13 Iteration No. 1 -> 3.8211147785186768, 2.5247223377227783, Loss = 0.001756182755343616, Nbhd = 0.5078275203704834
Epoch No. 13 Iteration No. 11 -> 4.0275373458862305, 2.9641470909118652, Loss = 0.09839397668838501, Nbhd = 0.04520770162343979
Epoch No. 13 Iteration No. 21 -> 3.697176456451416, 2.9386942386627197, Loss = 0.002137749223038554, Nbhd = 0.30896681547164917
Epoch No. 13 Iteration No. 31 -> 3.993926763534546, 2.2985923290252686, Loss = 0.5834277868270874, Nbhd = 0.7014339566230774
Epoch No. 14 Iteration No. 1 -> 3.8619272708892822, 2.0683178901672363, Loss = 1.346258282661438, Nbhd = 0.9418575167655945
Epoch No. 14 Iteration No. 11 -> 4.462649345397949, 2.0885016918182373, Loss = 0.27577319741249084, Nbhd = 1.0221905708312988
Epoch No. 14 Iteration No. 21 -> 3.1519055366516113, 2.7769808769226074, Loss = 1.3084139823913574, Nbhd = 0.8769274353981018
Epoch No. 14 Iteration No. 31 -> 4.147059440612793, 3.3320467472076416, Loss = 1.5321136713027954, Nbhd = 0.36315494775772095
Epoch No. 15 Iteration No. 1 -> 3.974435329437256, 2.127532720565796, Loss = 1.4957369565963745, Nbhd = 0.8728417158126831
Epoch No. 15 Iteration No. 11 -> 3.736220598220825, 2.6339504718780518, Loss = 0.09563076496124268, Nbhd = 0.4511893391609192
Epoch No. 15 Iteration No. 21 -> 3.623706579208374, 2.205655097961426, Loss = 0.4725140631198883, Nbhd = 0.8789656162261963
Epoch No. 15 Iteration No. 31 -> 3.878955602645874, 2.6124846935272217, Loss = 0.4477497637271881, Nbhd = 0.4059801399707794
SDG Visualization for Dataset2
= 0.001
epsilon
for i in range(1, len(loss2_1)):
= np.abs(loss2_1[i] - loss2_1[i-1])
change_in_loss print(change_in_loss, end = " ")
if change_in_loss < epsilon:
print(f"Converged at iteration {i}")
break
tensor(47.5518) tensor(2088.0500) tensor(1602.9125) tensor(644.3042) tensor(705.9775) tensor(24.2093) tensor(369.7652) tensor(63.6267) tensor(53.7489) tensor(56.4815) tensor(84.9328) tensor(13.2858) tensor(37.7679) tensor(38.5442) tensor(48.2450) tensor(4.2036) tensor(3.7683) tensor(62.7469) tensor(30.4186) tensor(116.1941) tensor(123.1146) tensor(14.7736) tensor(10.6224) tensor(4.4955) tensor(4.4424) tensor(4.4815) tensor(5.2177) tensor(0.0052) tensor(0.5453) tensor(2.0044) tensor(2.2920) tensor(4.4313) tensor(0.3916) tensor(3.6789) tensor(2.1128) tensor(1.4046) tensor(0.3878) tensor(0.4156) tensor(0.7219) tensor(4.1895) tensor(4.0835) tensor(0.3683) tensor(0.8145) tensor(0.4426) tensor(0.0148) tensor(1.4114) tensor(1.2782) tensor(2.4375) tensor(1.9629) tensor(2.3912) tensor(0.1137) tensor(3.1645) tensor(2.8844) tensor(0.0220) tensor(0.5870) tensor(0.0097) tensor(1.4968) tensor(1.4966) tensor(0.4747) tensor(0.4712) tensor(0.8334) tensor(0.7764) tensor(1.0009) tensor(0.9679) tensor(2.5390) tensor(2.4127) tensor(0.3721) tensor(0.0323) tensor(0.1940) tensor(0.2371) tensor(3.4380) tensor(3.5428) tensor(0.9007) tensor(0.5543) tensor(0.3564) tensor(0.3217) tensor(0.6649) tensor(0.8923) tensor(0.7902) tensor(1.0996) tensor(1.8412) tensor(1.7163) tensor(0.1285) tensor(0.1057) tensor(2.4844) tensor(2.6274) tensor(0.4858) tensor(0.9273) tensor(1.2926) tensor(0.1197) tensor(1.5680) tensor(1.0887) tensor(0.5387) tensor(0.0738) tensor(0.1047) tensor(0.2283) tensor(0.9708) tensor(0.6415) tensor(0.0764) tensor(0.2940) tensor(1.0506) tensor(0.0204) tensor(0.0142) tensor(0.0687) tensor(2.3604) tensor(2.3895) tensor(0.1205) tensor(2.2426) tensor(2.2199) tensor(0.5113) tensor(0.4076) tensor(0.1867) tensor(0.0702) tensor(3.4388) tensor(3.4688) tensor(0.0083) tensor(3.9507) tensor(0.1074) tensor(3.1345) tensor(0.8959) tensor(0.4627) tensor(0.6551) tensor(1.5677) tensor(1.8269) tensor(0.8921) tensor(0.1536) tensor(0.0225) tensor(0.1742) tensor(0.0230) tensor(0.0241) tensor(0.0212) tensor(0.1250) tensor(1.8404) tensor(1.1434) tensor(0.4394) tensor(0.2126) tensor(0.3363) tensor(1.5962) tensor(0.6153) tensor(0.3968) tensor(2.0634) tensor(0.6856) tensor(0.0079) tensor(0.1584) tensor(1.5969) tensor(2.2606) tensor(0.1659) tensor(0.1235) tensor(1.6862) tensor(1.7235) tensor(1.3302) tensor(1.2699) tensor(0.1045) tensor(5.7110) tensor(6.0020) tensor(0.0015) tensor(0.6046) tensor(0.5314) tensor(0.0572) tensor(1.1916) tensor(1.1652) tensor(0.0276) tensor(2.3217) tensor(2.0483) tensor(1.5762) tensor(3.5163) tensor(5.2532) tensor(0.0943) tensor(0.0146) tensor(2.0679) tensor(1.1077) tensor(0.9743) tensor(0.3320) tensor(0.2362) tensor(1.7185) tensor(1.2824) tensor(3.5752) tensor(0.7138) tensor(1.0122) tensor(0.7018) tensor(1.8875) tensor(0.1557) tensor(1.6486) tensor(2.1433) tensor(0.0276) tensor(0.4163) tensor(0.2853) tensor(0.2324) tensor(0.5517) tensor(0.6202) tensor(0.8064) tensor(0.8096) tensor(0.0255) tensor(0.0948) tensor(0.0140) tensor(0.4032) tensor(0.2759) tensor(0.1204) tensor(0.2812) tensor(0.3252) tensor(0.0194) tensor(0.1243) tensor(0.8290) tensor(0.5407) tensor(0.6016) tensor(0.1322) tensor(0.5577) tensor(3.7319) tensor(2.0143) tensor(1.8664) tensor(1.2161) tensor(0.2651) tensor(1.2826) tensor(0.2691) tensor(0.0119) tensor(0.2581) tensor(2.8708) tensor(3.2893) tensor(2.9182) tensor(1.7270) tensor(1.1579) tensor(0.5882) tensor(0.6039) tensor(0.3814) tensor(0.2742) tensor(0.6805) tensor(1.3954) tensor(1.3408) tensor(0.0891) tensor(0.1302) tensor(1.5754) tensor(1.5518) tensor(0.5349) tensor(0.3298) tensor(0.0917) tensor(0.1478) tensor(4.3181) tensor(3.5656) tensor(0.6468) tensor(2.2702) tensor(1.7739) tensor(0.0904) tensor(0.5087) tensor(0.6051) tensor(0.4325) tensor(0.3114) tensor(1.1895) tensor(0.3892) tensor(0.2704) tensor(1.1664) tensor(2.0981) tensor(0.1041) tensor(0.0524) tensor(0.1399) tensor(1.5749) tensor(1.0686) tensor(0.1952) tensor(0.2023) tensor(0.3563) tensor(2.6500) tensor(0.4485) tensor(1.3853) tensor(3.5515) tensor(0.1172) tensor(0.3645) tensor(0.1354) tensor(0.3797) tensor(0.9237) tensor(0.3086) tensor(0.1133) tensor(0.2752) tensor(2.7168) tensor(2.9513) tensor(0.0249) tensor(0.6444) tensor(0.6423) tensor(0.0791) tensor(2.8700) tensor(2.7771) tensor(1.8632) tensor(1.9738) tensor(1.1178) tensor(0.2376) tensor(1.1625) tensor(0.1969) tensor(0.0638) tensor(0.0179) tensor(0.4888) tensor(4.3499) tensor(4.7778) tensor(0.7607) tensor(0.7734) tensor(0.1701) tensor(0.1300) tensor(0.3659) tensor(0.4702) tensor(1.0474) tensor(1.0386) tensor(2.9896) tensor(2.8878) tensor(0.4995) tensor(2.1177) tensor(2.4849) tensor(2.6984) tensor(1.0636) tensor(1.9015) tensor(0.4698) tensor(0.0122) tensor(0.2787) tensor(3.0153) tensor(1.2639) tensor(1.7642) tensor(0.0798) tensor(0.0457) tensor(0.0315) tensor(0.1394) tensor(0.6231) tensor(0.6049) tensor(1.9096) tensor(2.1010) tensor(2.9675) tensor(2.7105) tensor(0.1165) tensor(0.0422) tensor(1.0320) tensor(0.5385) tensor(1.6101) tensor(0.6980) tensor(5.6774) tensor(6.4238) tensor(1.2655) tensor(1.3698) tensor(2.5045) tensor(0.0612) tensor(0.2021) tensor(0.6524) tensor(0.5710) tensor(0.0581) tensor(0.0221) tensor(1.1662) tensor(0.0490) tensor(1.1133) tensor(2.1841) tensor(1.7094) tensor(0.3439) tensor(0.1529) tensor(0.2390) tensor(0.5564) tensor(0.3453) tensor(0.2685) tensor(0.2517) tensor(2.2181) tensor(0.1631) tensor(1.9067) tensor(0.1547) tensor(0.1146) tensor(0.1436) tensor(1.4744) tensor(1.2576) tensor(0.4271) tensor(0.8226) tensor(0.3340) tensor(1.8343) tensor(2.3141) tensor(0.2008) tensor(0.5296) tensor(0.0268) tensor(0.7229) tensor(3.0297) tensor(0.7818) tensor(1.5872) tensor(0.4325) tensor(0.6287) tensor(0.3074) tensor(1.3001) tensor(0.9994) tensor(0.6276) tensor(0.0658) tensor(3.0031) tensor(3.2617) tensor(0.1035) tensor(3.0334) tensor(2.4678) tensor(0.4343) tensor(0.2822) tensor(0.0211) tensor(0.0159) tensor(2.0130) tensor(1.5790) tensor(0.2255) tensor(0.9616) tensor(0.0369) tensor(1.1434) tensor(1.0804) tensor(5.9268) tensor(5.6747) tensor(1.3549) tensor(0.0156) tensor(0.0109) tensor(0.1630) tensor(0.0543) tensor(0.5489) tensor(0.6441) tensor(0.4421) tensor(3.8830) tensor(2.1192) tensor(2.2643) tensor(0.0701) tensor(0.0035) tensor(0.2891) tensor(0.2261) tensor(3.6053) tensor(2.7125) tensor(0.1327) tensor(0.5467) tensor(1.5051) tensor(1.7635) tensor(0.0094) tensor(0.3102) tensor(0.5106) tensor(0.7451) tensor(0.1440) tensor(1.4537) tensor(1.6055) tensor(0.4863) tensor(0.5805) tensor(1.3963) tensor(1.3717) tensor(2.2065) tensor(2.1447) tensor(3.3979) tensor(1.7523) tensor(1.6662) tensor(0.0706) tensor(0.0359) tensor(0.8072) tensor(0.1875) tensor(0.6580) tensor(0.0261) tensor(0.3968) tensor(0.4233) tensor(0.6363) tensor(0.1018) tensor(0.2907) tensor(0.2259) tensor(0.0730) tensor(0.1141) tensor(2.2458) tensor(2.3023) tensor(0.0351) tensor(0.0250) tensor(1.4968) tensor(1.3542) tensor(0.0116) tensor(0.6669) tensor(0.7274) tensor(0.2089) tensor(0.7559) tensor(0.7531) tensor(2.3528) tensor(1.8915) tensor(0.1704) tensor(2.0270) tensor(1.7825) tensor(2.3911) tensor(2.9281) tensor(3.8635) tensor(2.9318) tensor(0.9212) tensor(0.9115) tensor(1.3030) tensor(1.6892) tensor(1.8554) tensor(1.3284) tensor(0.3190) tensor(1.2414) tensor(0.1052) tensor(0.1464) tensor(0.1841) tensor(0.5331) tensor(0.0846) tensor(1.4632) tensor(1.5534) tensor(0.0483) tensor(0.0210) tensor(0.3318) tensor(0.2093) tensor(0.0363) tensor(0.1031) tensor(0.3882) tensor(1.1382) tensor(1.0752) tensor(2.0105) tensor(2.2217) tensor(0.0728) tensor(0.3667) tensor(0.6271) tensor(0.6129) tensor(1.6755) tensor(0.0067) tensor(0.3747) tensor(0.3839) tensor(0.1184) tensor(2.4057) tensor(2.2528) tensor(1.2226) tensor(0.1538) tensor(0.0580) tensor(1.3838) tensor(0.6828) tensor(2.3289) tensor(0.3837) tensor(1.8688) tensor(0.2749) tensor(1.0536) tensor(1.2957) tensor(1.2451) tensor(0.0291) tensor(0.0438) tensor(1.7241) tensor(1.5587) tensor(0.2885) tensor(0.0013) tensor(0.0015) tensor(0.1716) tensor(1.1924) tensor(1.3240) tensor(0.4923) tensor(0.5254) tensor(0.4201) tensor(0.4250) tensor(0.0125) tensor(0.0975) tensor(0.8394) tensor(0.8918) tensor(0.4320) tensor(0.0095) tensor(2.1831) tensor(2.8834) tensor(1.2828) tensor(1.6830) tensor(1.1712) tensor(2.2194) tensor(2.8130) tensor(0.5439) tensor(0.0423) tensor(0.6004) tensor(1.1346) tensor(1.7089) tensor(1.3084) tensor(2.0908) tensor(2.1818) tensor(1.9864) tensor(0.3045) tensor(0.4335) tensor(0.4430) tensor(0.0505) tensor(2.2946) tensor(2.2618) tensor(2.2118) tensor(1.6447) tensor(3.4715) tensor(0.3789) tensor(4.8506) tensor(4.8665) tensor(0.7209) tensor(0.7800) tensor(0.8132) tensor(0.0251) tensor(0.1282) tensor(1.1635) tensor(1.3879) tensor(0.5702) tensor(0.3401) tensor(0.1837) tensor(0.9857) tensor(0.6271) tensor(0.8293) tensor(0.3736) tensor(0.5100) tensor(0.2884) tensor(0.0529) tensor(0.0127) tensor(4.1434) tensor(4.0086) tensor(0.0312) tensor(0.1066) tensor(0.3988) tensor(0.8254) tensor(0.3734) tensor(1.0639) tensor(0.1303) tensor(0.6457) tensor(0.2321) tensor(0.4180) tensor(1.4608) tensor(1.1825) tensor(0.7970) tensor(3.3269)
= []
min_values for i in range(15):
= loss2_1[i * 40 : (i + 1) * 40]
subset min(subset))
min_values.append(np.
print(min_values)
[0.00032184814, 2.4725366e-06, 9.057696e-05, 0.0014371398, 0.0013900001, 0.0013080796, 0.00094962516, 0.00041253664, 1.2234043e-05, 0.0005695581, 0.0005845252, 8.397845e-05, 8.165476e-05, 9.9266086e-05, 0.002383147]
= list(range(39, len(loss2_1), 40))
idxs = "Epoch Number", ylabel = r"$L(\theta_0, \theta_1)$", title = "Loss vs Epochs - Dataset 2 - SDG") loss_plot(np.array(loss2_1)[idxs], xlabel
= 2, fig_width = 8)
latexify(columns range(1, len(loss2_1) + 1), loss2_1, marker = "o", label = "Loss", color = "red", markersize = 4)
plt.plot("Overall Iteration Number")
plt.xlabel(r"$L(\theta_0, \theta_1)$")
plt.ylabel(# plt.axvline(x = 129, color = "black", linestyle = "--", label = f"Convergence {129}")
"Loss vs Iterations - Dataset 2 - SDG")
plt.title(
plt.grid()
plt.legend()
format_axes(plt.gca()) plt.show()
= "Epoch Number", ylabel = r"$L(\theta_0, \theta_1)$", title = "Minimum Loss in each Epoch - Dataset 2 - SDG") loss_plot(min_values, xlabel
SDG for Dataset1
= visualize_sdg(x1, y1, torch.tensor(1.5), torch.tensor(93.0), torch.tensor(0.0), torch.tensor(0.0), 15, [0, 1000, 2000, 3000, 5000, 7000, 15000, 25000], "D3LMedia", "d", 1, 100, 0.001, 0.99) loss1_1
Epoch No. 1 Iteration No. 1 -> 1.4987623691558838, 93.01081848144531, Loss = 3817.827880859375, Nbhd = 7.006955146789551
Epoch No. 1 Iteration No. 11 -> 1.4461172819137573, 94.1707534790039, Loss = 9629.2578125, Nbhd = 5.846292495727539
Epoch No. 1 Iteration No. 21 -> 1.362715721130371, 96.81143951416016, Loss = 1954.650146484375, Nbhd = 3.2091245651245117
Epoch No. 1 Iteration No. 31 -> 1.2787598371505737, 99.78394317626953, Loss = 1.5885860919952393, Nbhd = 0.3526862561702728
Epoch No. 2 Iteration No. 1 -> 1.197295069694519, 102.56109619140625, Loss = 93.86066436767578, Nbhd = 2.5686843395233154
Epoch No. 2 Iteration No. 11 -> 1.1525455713272095, 104.33866882324219, Loss = 6663.79638671875, Nbhd = 4.3413496017456055
Epoch No. 2 Iteration No. 21 -> 1.1341296434402466, 104.62881469726562, Loss = 6173.60107421875, Nbhd = 4.630757808685303
Epoch No. 2 Iteration No. 31 -> 1.0912829637527466, 103.68964385986328, Loss = 18.285619735717773, Nbhd = 3.690772771835327
Epoch No. 3 Iteration No. 1 -> 1.043683409690857, 102.32128143310547, Loss = 1716.9652099609375, Nbhd = 2.32169246673584
Epoch No. 3 Iteration No. 11 -> 1.0233449935913086, 100.54589080810547, Loss = 93.764892578125, Nbhd = 0.5463897585868835
Epoch No. 3 Iteration No. 21 -> 1.010469913482666, 98.77394104003906, Loss = 12.463046073913574, Nbhd = 1.226103663444519
Epoch No. 3 Iteration No. 31 -> 0.9934495687484741, 97.36144256591797, Loss = 5.115026473999023, Nbhd = 2.6385655403137207
Epoch No. 4 Iteration No. 1 -> 0.9869822859764099, 96.76558685302734, Loss = 1227.855712890625, Nbhd = 3.2344393730163574
Epoch No. 4 Iteration No. 11 -> 0.9807246327400208, 97.00252532958984, Loss = 163.6014862060547, Nbhd = 2.9975366592407227
Epoch No. 4 Iteration No. 21 -> 0.967285692691803, 97.91014862060547, Loss = 1455.30322265625, Nbhd = 2.0901074409484863
Epoch No. 4 Iteration No. 31 -> 0.9607234001159668, 99.3447036743164, Loss = 35.14093017578125, Nbhd = 0.6564723253250122
Epoch No. 5 Iteration No. 1 -> 0.9518093466758728, 100.7765121459961, Loss = 2.709353446960449, Nbhd = 0.7780060768127441
Epoch No. 5 Iteration No. 11 -> 0.9494979381561279, 101.91950225830078, Loss = 271.15338134765625, Nbhd = 1.9201664924621582
Epoch No. 5 Iteration No. 21 -> 0.9592716097831726, 102.4121322631836, Loss = 669.2819213867188, Nbhd = 2.412476062774658
Epoch No. 5 Iteration No. 31 -> 0.9757325649261475, 102.2486801147461, Loss = 19.936328887939453, Nbhd = 2.2488110065460205
Epoch No. 6 Iteration No. 1 -> 0.9888733625411987, 101.60113525390625, Loss = 811.4500122070312, Nbhd = 1.6011738777160645
Epoch No. 6 Iteration No. 11 -> 1.0071061849594116, 100.56216430664062, Loss = 0.26288777589797974, Nbhd = 0.5622091889381409
Epoch No. 6 Iteration No. 21 -> 1.0225876569747925, 99.5182113647461, Loss = 38.17646789550781, Nbhd = 0.48231783509254456
Epoch No. 6 Iteration No. 31 -> 1.035457730293274, 98.68292236328125, Loss = 499.259521484375, Nbhd = 1.3175548315048218
Epoch No. 7 Iteration No. 1 -> 1.0372735261917114, 98.22777557373047, Loss = 303.41326904296875, Nbhd = 1.7726163864135742
Epoch No. 7 Iteration No. 11 -> 1.0268393754959106, 98.2854232788086, Loss = 835.3948974609375, Nbhd = 1.7147867679595947
Epoch No. 7 Iteration No. 21 -> 1.0098258256912231, 98.72002410888672, Loss = 21.326311111450195, Nbhd = 1.2800136804580688
Epoch No. 7 Iteration No. 31 -> 0.9903268814086914, 99.3680648803711, Loss = 32.54025650024414, Nbhd = 0.6320091485977173
Epoch No. 8 Iteration No. 1 -> 0.9744763970375061, 100.1104965209961, Loss = 0.8418543934822083, Nbhd = 0.11340606212615967
Epoch No. 8 Iteration No. 11 -> 0.9591780304908752, 100.75386810302734, Loss = 95.4246597290039, Nbhd = 0.754972517490387
Epoch No. 8 Iteration No. 21 -> 0.9500527381896973, 101.18275451660156, Loss = 576.785400390625, Nbhd = 1.18380868434906
Epoch No. 8 Iteration No. 31 -> 0.9404208660125732, 101.2154769897461, Loss = 110.16157531738281, Nbhd = 1.2169363498687744
Epoch No. 9 Iteration No. 1 -> 0.9437634944915771, 100.9417724609375, Loss = 255.19984436035156, Nbhd = 0.9434500336647034
Epoch No. 9 Iteration No. 11 -> 0.947787880897522, 100.42994689941406, Loss = 0.6817030310630798, Nbhd = 0.43310555815696716
Epoch No. 9 Iteration No. 21 -> 0.9529693126678467, 99.86270141601562, Loss = 0.24173061549663544, Nbhd = 0.1451302468776703
Epoch No. 9 Iteration No. 31 -> 0.9562123417854309, 99.36485290527344, Loss = 30.146024703979492, Nbhd = 0.6366546750068665
Epoch No. 10 Iteration No. 1 -> 0.9532942175865173, 99.04427337646484, Loss = 125.08369445800781, Nbhd = 0.9568672180175781
Epoch No. 10 Iteration No. 11 -> 0.9394998550415039, 98.94589233398438, Loss = 7.26989221572876, Nbhd = 1.055842399597168
Epoch No. 10 Iteration No. 21 -> 0.9189646244049072, 99.09333038330078, Loss = 160.54238891601562, Nbhd = 0.9102837443351746
Epoch No. 10 Iteration No. 31 -> 0.8999784588813782, 99.49060821533203, Loss = 74.4959487915039, Nbhd = 0.5191187858581543
Epoch No. 11 Iteration No. 1 -> 0.8858976364135742, 99.99341583251953, Loss = 2.2663259506225586, Nbhd = 0.11429217457771301
Epoch No. 11 Iteration No. 11 -> 0.8736655116081238, 100.44192504882812, Loss = 29.747222900390625, Nbhd = 0.45962828397750854
Epoch No. 11 Iteration No. 21 -> 0.8639011979103088, 100.7279052734375, Loss = 150.68222045898438, Nbhd = 0.7405194044113159
Epoch No. 11 Iteration No. 31 -> 0.8547102808952332, 100.78044128417969, Loss = 79.94001770019531, Nbhd = 0.7938499450683594
Epoch No. 12 Iteration No. 1 -> 0.849186360836029, 100.6477279663086, Loss = 153.29171752929688, Nbhd = 0.6650536060333252
Epoch No. 12 Iteration No. 11 -> 0.8462620377540588, 100.3794174194336, Loss = 14.539810180664062, Nbhd = 0.4093811810016632
Epoch No. 12 Iteration No. 21 -> 0.8437899947166443, 100.05201721191406, Loss = 0.029206275939941406, Nbhd = 0.16464312374591827
Epoch No. 12 Iteration No. 31 -> 0.8405649065971375, 99.73817443847656, Loss = 1.6940172910690308, Nbhd = 0.3065488040447235
Epoch No. 13 Iteration No. 1 -> 0.8366380929946899, 99.50496673583984, Loss = 42.68752670288086, Nbhd = 0.5212917327880859
Epoch No. 13 Iteration No. 11 -> 0.8340726494789124, 99.39527893066406, Loss = 0.018911706283688545, Nbhd = 0.6270721554756165
Epoch No. 13 Iteration No. 21 -> 0.8269923329353333, 99.42072296142578, Loss = 152.07296752929688, Nbhd = 0.6045606136322021
Epoch No. 13 Iteration No. 31 -> 0.8176871538162231, 99.58580780029297, Loss = 2.367210626602173, Nbhd = 0.452540785074234
Epoch No. 14 Iteration No. 1 -> 0.8088811635971069, 99.84165954589844, Loss = 1.1497535705566406, Nbhd = 0.24818965792655945
Epoch No. 14 Iteration No. 11 -> 0.8006793260574341, 100.10717010498047, Loss = 0.07141036540269852, Nbhd = 0.22630545496940613
Epoch No. 14 Iteration No. 21 -> 0.7941725254058838, 100.31169128417969, Loss = 6.284838676452637, Nbhd = 0.3735189437866211
Epoch No. 14 Iteration No. 31 -> 0.7895809412002563, 100.40982055664062, Loss = 0.05379319190979004, Nbhd = 0.46068325638771057
Epoch No. 15 Iteration No. 1 -> 0.7872362732887268, 100.40532684326172, Loss = 12.011910438537598, Nbhd = 0.4577753245830536
Epoch No. 15 Iteration No. 11 -> 0.7856184244155884, 100.32516479492188, Loss = 34.26936340332031, Nbhd = 0.38947606086730957
Epoch No. 15 Iteration No. 21 -> 0.7844734787940979, 100.15166473388672, Loss = 11.67667007446289, Nbhd = 0.26354101300239563
Epoch No. 15 Iteration No. 31 -> 0.7844328880310059, 99.93866729736328, Loss = 0.12432413548231125, Nbhd = 0.22412246465682983
= 0.001
epsilon
for i in range(1, len(loss1_1)):
= np.abs(loss1_1[i] - loss1_1[i-1])
change_in_loss print(change_in_loss, end = " ")
if change_in_loss < epsilon:
print(f"Converged at iteration {i}")
break
tensor(2179.4023) tensor(10136.4941) tensor(6033.5610) tensor(7514.9224) tensor(5917.8115) tensor(2860.3062) tensor(4228.4707) tensor(9402.9404) tensor(9117.6074) tensor(9750.4189) tensor(3997.1758) tensor(5561.7554) tensor(6161.2788) tensor(2988.9268) tensor(8033.9590) tensor(1829.1562) tensor(465.7578) tensor(393.1555) tensor(815.5776) tensor(1422.6934) tensor(2336.2476) tensor(1088.7268) tensor(1082.0950) tensor(1816.5742) tensor(1762.1830) tensor(45.8740) tensor(528.2836) tensor(97.4222) tensor(429.7990) tensor(12.8799) tensor(11.4109) tensor(12.7734) tensor(0.8533) tensor(59.1019) tensor(61.4539) tensor(105.2782) tensor(94.1750) tensor(1100.7710) tensor(350.1266) tensor(688.9119) tensor(41.5126) tensor(1766.9137) tensor(779.9056) tensor(1609.6960) tensor(833.0327) tensor(1871.0104) tensor(2709.5386) tensor(4234.8438) tensor(1895.7616) tensor(4390.4619) tensor(4381.9224) tensor(40.3198) tensor(2887.8838) tensor(4802.9580) tensor(1112.1129) tensor(3467.5532) tensor(4143.6802) tensor(7088.9766) tensor(2347.0669) tensor(2321.3127) tensor(2500.4653) tensor(3810.2798) tensor(1510.3228) tensor(193.6362) tensor(1742.4713) tensor(2770.5686) tensor(4023.9670) tensor(3915.2605) tensor(195.9056) tensor(580.0757) tensor(2.2111) tensor(10.8265) tensor(6.0861) tensor(4394.4053) tensor(4377.4487) tensor(206.3101) tensor(442.1067) tensor(1811.2742) tensor(2411.1140) tensor(1880.4227) tensor(1031.8124) tensor(926.5094) tensor(2.3156) tensor(17.5955) tensor(30.2872) tensor(511.4063) tensor(65.8471) tensor(476.3314) tensor(348.8186) tensor(191.3338) tensor(120.1851) tensor(38.5221) tensor(1.4457) tensor(0.9428) tensor(4.0854) tensor(1.3608) tensor(82.6173) tensor(79.7309) tensor(14.3098) tensor(12.9602) tensor(104.0630) tensor(89.0649) tensor(9.7270) tensor(727.3858) tensor(656.3193) tensor(121.1144) tensor(208.7112) tensor(648.0137) tensor(1550.7463) tensor(2212.4924) tensor(1.5987) tensor(1227.9248) tensor(1084.8748) tensor(309.8077) tensor(1107.6642) tensor(250.9808) tensor(103.5513) tensor(1106.3828) tensor(1973.1677) tensor(2611.3491) tensor(1212.4683) tensor(337.2821) tensor(720.2185) tensor(877.1327) tensor(1884.5280) tensor(2388.5503) tensor(1168.7126) tensor(511.5712) tensor(1489.8420) tensor(2087.7261) tensor(1582.7637) tensor(1701.3629) tensor(517.3466) tensor(370.9684) tensor(247.1957) tensor(1443.1774) tensor(600.5078) tensor(2388.5361) tensor(1926.6704) tensor(378.8212) tensor(401.2599) tensor(1241.2776) tensor(14.5407) tensor(61.4507) tensor(71.6497) tensor(10.1912) tensor(19.2293) tensor(228.7057) tensor(5.8468) tensor(190.2697) tensor(98.1537) tensor(137.7565) tensor(9.4598) tensor(21.6561) tensor(0.7290) tensor(2.3173) tensor(12.9434) tensor(4.7988) tensor(20.7838) tensor(1.7278) tensor(77.3210) tensor(26.5562) tensor(265.0027) tensor(217.4980) tensor(59.0606) tensor(268.3044) tensor(392.1269) tensor(3.0792) tensor(29.8793) tensor(240.8748) tensor(226.8138) tensor(336.9392) tensor(1172.9109) tensor(50.9946) tensor(850.8223) tensor(771.1263) tensor(816.0488) tensor(767.0422) tensor(54.6372) tensor(719.7252) tensor(436.5864) tensor(231.3653) tensor(9.5635) tensor(2.7694) tensor(312.0863) tensor(1956.4617) tensor(2264.9109) tensor(143.1375) tensor(1075.0853) tensor(1210.2068) tensor(97.1739) tensor(111.5862) tensor(1355.6775) tensor(82.9915) tensor(692.6782) tensor(693.9783) tensor(597.9781) tensor(99.1893) tensor(191.3204) tensor(543.9707) tensor(462.4139) tensor(350.0512) tensor(147.2250) tensor(247.9919) tensor(478.1141) tensor(13.3077) tensor(222.2180) tensor(211.1636) tensor(11.6568) tensor(0.0207) tensor(98.6541) tensor(86.3817) tensor(6.0638) tensor(0.6664) tensor(18.0588) tensor(1.0803) tensor(1.5107) tensor(1.1901) tensor(40.5631) tensor(18.2862) tensor(12.0699) tensor(10.3908) tensor(22.5767) tensor(43.8107) tensor(209.8989) tensor(251.9983) tensor(103.3966) tensor(100.7698) tensor(58.4466) tensor(382.6707) tensor(389.0068) tensor(46.5237) tensor(153.6331) tensor(423.4968) tensor(22.5161) tensor(491.6023) tensor(907.7487) tensor(981.8807) tensor(37.0143) tensor(254.7278) tensor(291.4435) tensor(750.0616) tensor(657.3603) tensor(1031.0314) tensor(95.1980) tensor(343.1751) tensor(864.2336) tensor(83.1117) tensor(5.9497) tensor(774.7135) tensor(705.0251) tensor(209.4410) tensor(149.5302) tensor(204.1307) tensor(522.4772) tensor(506.0130) tensor(18.4081) tensor(14.7998) tensor(500.2936) tensor(477.1326) tensor(12.6355) tensor(275.7842) tensor(22.8251) tensor(164.2746) tensor(80.3639) tensor(336.6980) tensor(2.6559) tensor(276.1620) tensor(76.2843) tensor(39.9137) tensor(25.6729) tensor(32.4334) tensor(29.5932) tensor(3.6288) tensor(2.8025) tensor(14.8787) tensor(15.0710) tensor(2.4854) tensor(0.4823) tensor(1.1030) tensor(2.5240) tensor(13.9633) tensor(13.8566) tensor(3.7417) tensor(9.7593) tensor(22.5084) tensor(28.4175) tensor(80.0343) tensor(83.0800) tensor(80.4092) tensor(79.7478) tensor(150.8766) tensor(57.2073) tensor(5.6457) tensor(154.1372) tensor(235.0657) tensor(4.4715) tensor(3.1733) tensor(156.3258) tensor(394.3206) tensor(461.7367) tensor(386.5720) tensor(147.3438) tensor(83.7285) tensor(209.5268) tensor(304.4772) tensor(50.7308) tensor(76.3042) tensor(143.1199) tensor(54.6293) tensor(110.0073) tensor(456.3727) tensor(66.3919) tensor(385.1287) tensor(20.2808) tensor(334.4879) tensor(30.7226) tensor(391.2563) tensor(135.4114) tensor(142.3318) tensor(264.7410) tensor(327.1850) tensor(265.4297) tensor(28.6468) tensor(45.5344) tensor(70.1273) tensor(3.1547) tensor(44.1429) tensor(2.8090) tensor(26.2249) tensor(24.2870) tensor(12.6457) tensor(8.8494) tensor(4.1875) tensor(27.7686) tensor(4.6226) tensor(0.2353) tensor(0.1830) tensor(1.6279) tensor(2.5742) tensor(0.3966) tensor(0.5322) tensor(16.1041) tensor(11.6454) tensor(3.3180) tensor(9.0406) tensor(10.1896) tensor(0.3609) tensor(62.0888) tensor(36.2686) tensor(53.5200) tensor(22.5153) tensor(98.3443) tensor(11.2312) tensor(4.2793) tensor(6.8716) tensor(156.5826) tensor(2.0758) tensor(67.8526) tensor(105.9616) tensor(54.2120) tensor(65.8256) tensor(237.3804) tensor(157.9709) tensor(79.8188) tensor(37.4399) tensor(35.7261) tensor(75.6235) tensor(167.4876) tensor(237.5974) tensor(396.5878) tensor(395.8779) tensor(216.4733) tensor(177.3742) tensor(41.6253) tensor(12.5088) tensor(172.6745) tensor(83.8009) tensor(41.0915) tensor(144.6313) tensor(162.1209) tensor(17.5582) tensor(47.7338) tensor(153.8535) tensor(28.9499) tensor(243.4412) tensor(24.6652) tensor(32.7675) tensor(66.9018) tensor(85.1937) tensor(46.8427) tensor(42.2041) tensor(35.7576) tensor(23.1149) tensor(18.8296) tensor(31.2482) tensor(2.3472) tensor(0.5525) tensor(1.6590) tensor(2.5433) tensor(0.3287) tensor(3.1847) tensor(3.4892) tensor(3.0048) tensor(1.8941) tensor(0.9888) tensor(3.7098) tensor(22.5893) tensor(21.0753) tensor(22.5970) tensor(24.1072) tensor(44.6687) tensor(29.0920) tensor(120.3986) tensor(136.0099) tensor(140.4967) tensor(98.1275) tensor(96.0085) tensor(137.7334) tensor(143.2323) tensor(141.2639) tensor(169.9737) tensor(172.0335) tensor(41.8498) tensor(206.4618) tensor(224.1737) tensor(22.8780) tensor(186.9247) tensor(178.2513) tensor(70.2113) tensor(36.3573) tensor(14.5076) tensor(48.6696) tensor(150.5468) tensor(18.7543) tensor(115.7925) tensor(94.6680) tensor(120.2911) tensor(0.6964) tensor(161.2022) tensor(130.8336) tensor(60.7819) tensor(73.9571) tensor(18.4361) tensor(42.8418) tensor(15.6825) tensor(9.4304) tensor(77.2877) tensor(94.9804) tensor(16.1516) tensor(14.7614) tensor(34.7566) tensor(17.9879) tensor(17.5416) tensor(11.5918) tensor(7.0270) tensor(5.1379) tensor(0.6960) tensor(4.0581) tensor(4.4688) tensor(2.8319) tensor(2.9975) tensor(0.0305) tensor(0.1773) tensor(0.7382) tensor(2.9821) tensor(3.7026) tensor(7.2069) tensor(6.5144) tensor(0.6840) tensor(11.2370) tensor(11.1253) tensor(15.5468) tensor(16.2422) tensor(0.9272) tensor(29.1869) tensor(29.4227) tensor(55.0048) tensor(22.8323) tensor(6.2956) tensor(11.9606) tensor(46.4154) tensor(16.4514) tensor(21.9253) tensor(21.4224) tensor(6.1170) tensor(0.5555) tensor(18.7319) tensor(26.9330) tensor(61.5571) tensor(74.1105) tensor(71.4576) tensor(106.2688) tensor(27.7916) tensor(80.6556) tensor(3.2294) tensor(1.4227) tensor(67.3870) tensor(42.3557) tensor(129.7821) tensor(87.4997) tensor(63.1379) tensor(0.8076) tensor(5.5815) tensor(95.1370) tensor(92.4645) tensor(32.7010) tensor(29.9475) tensor(55.9451) tensor(6.5364) tensor(1.5105) tensor(23.0288) tensor(18.3948) tensor(2.1020) tensor(13.6085) tensor(25.8700) tensor(4.5835) tensor(1.1231) tensor(4.0143) tensor(1.5566) tensor(2.0708) tensor(1.8803) tensor(1.5844) tensor(0.2974) tensor(0.0337) tensor(0.0734) tensor(0.0620) tensor(0.3512) tensor(2.0630) tensor(2.5413) tensor(4.1947) tensor(0.9308) tensor(5.4012) tensor(5.6594) tensor(3.2998) tensor(19.5288) tensor(9.8692) tensor(8.2574) tensor(23.7448) tensor(5.2201) tensor(1.1233) tensor(10.0136) tensor(6.5109) tensor(12.0451) tensor(50.2180) tensor(29.7946) tensor(29.2991) tensor(66.8032) tensor(66.7869) tensor(0.2505) tensor(12.9356) tensor(12.1748) tensor(28.2072) tensor(53.0540) tensor(25.1674) tensor(25.2398) tensor(0.7977) tensor(46.7402) tensor(44.1159) tensor(8.5797) tensor(8.6787) tensor(1.8096) tensor(1.5916) tensor(48.8166) tensor(48.7033) tensor(39.7875) tensor(4.5964) tensor(28.8045) tensor(51.4685) tensor(20.8233) tensor(37.2603) tensor(0.0747) tensor(19.8216) tensor(12.1489) tensor(22.9198) tensor(23.1787) tensor(0.7785) tensor(2.4446) tensor(5.6825) tensor(3.1140) tensor(11.9150) tensor(1.4590) tensor(1.5156) tensor(2.7265) tensor(0.3297) tensor(0.3844) tensor(0.8446) tensor(0.7089) tensor(0.0621) tensor(2.1570) tensor(0.3600) tensor(0.9837) tensor(1.0771) tensor(0.2895) tensor(0.0593) tensor(0.0126) tensor(12.3114) tensor(9.4769) tensor(5.4647)
= []
min_values1 for i in range(15):
= loss1_1[i * 40 : (i + 1) * 40]
subset min(subset))
min_values1.append(np.
print(min_values1)
[0.07977461, 6.2054477, 0.049074255, 0.0006419747, 1.7525855, 0.40813568, 0.0029123856, 0.010533043, 0.11893637, 0.021952227, 0.0062860586, 0.007301569, 0.017146148, 0.049739018, 0.04775148]
= list(range(39, len(loss1_1), 40))
idxs = "Epoch Number", ylabel = r"$L(\theta_0, \theta_1)$", title = "Loss vs Epochs - Dataset 1 - SDG") loss_plot(np.array(loss1_1)[idxs], xlabel
= 2, fig_width = 8)
latexify(columns range(1, len(loss1_1) + 1), loss1_1, marker = "o", label = "Loss", color = "deeppink", markersize = 4)
plt.plot("Overall Iteration Number")
plt.xlabel(r"$L(\theta_0, \theta_1)$")
plt.ylabel("Loss vs Iterations - Dataset 1 - SDG")
plt.title(# plt.axvline(x = 458, color = "black", linestyle = "--", label = f"Convergence {459}")
plt.grid()
plt.legend()
format_axes(plt.gca()) plt.show()
= "Epoch Number", ylabel = r"$L(\theta_0, \theta_1)$", title = "Minimum Loss in each Epoch - Dataset 1 - SDG") loss_plot(min_values1, xlabel