update
This commit is contained in:
parent
300f81fba8
commit
9d6006c9a6
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -10,6 +10,7 @@ from IPython.display import display, clear_output
|
|||
|
||||
from tqdm import tqdm
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import plotly.graph_objects as go
|
||||
import plotly.io as pio
|
||||
|
||||
|
@ -279,19 +280,26 @@ class gradient_descent_2d(object):
|
|||
x1 = symbols("x1")
|
||||
x2 = symbols("x2")
|
||||
expr = sympify(self.wg_expr.value)
|
||||
xx1 = np.arange(np.array(self.xn_list)[:, 0].min()*0.5, np.array(self.xn_list)[:, 0].max()*1.5, 0.05)
|
||||
xx2 = np.arange(np.array(self.xn_list)[:, 1].min()*0.5, np.array(self.xn_list)[:, 1].max()*1.5, 0.05)
|
||||
xx1 = np.arange(np.array(self.xn_list)[:, 0].min() * 0.5, np.array(self.xn_list)[:, 0].max() * 1.5, 0.1)
|
||||
xx2 = np.arange(np.array(self.xn_list)[:, 1].min() * 0.5, np.array(self.xn_list)[:, 1].max() * 1.5, 0.1)
|
||||
xx1_tangent = np.arange(np.array(self.xn_list)[:, 0].min(), np.array(self.xn_list)[:, 0].max(), 0.1)
|
||||
xx2_tangent = np.arange(np.array(self.xn_list)[:, 1].min(), np.array(self.xn_list)[:, 1].max(), 0.1)
|
||||
xx1_o, xx2_o = xx1, xx2
|
||||
xx1, xx2 = np.meshgrid(xx1, xx2)
|
||||
|
||||
xx1_tangent, xx2_tangent = np.meshgrid(xx1_tangent, xx2_tangent)
|
||||
f = lambdify((x1, x2), expr, "numpy")
|
||||
fx = f(xx1, xx2)
|
||||
f_xn = f(np.array(self.xn_list)[:, 0], np.array(self.xn_list)[:, 1])
|
||||
partial_x1 = lambdify((x1, x2), diff(expr, x1), "numpy")
|
||||
partial_x2 = lambdify((x1, x2), diff(expr, x2), "numpy")
|
||||
plane = partial_x1(np.array(self.xn_list)[:, 0], np.array(self.xn_list)[:, 1]) * (x1 - np.array(self.xn_list)[:, 0]) + partial_x2(np.array(self.xn_list)[:, 0], np.array(self.xn_list)[:, 1]) * (x2 - np.array(self.xn_list)[:, 0]) + f_xn
|
||||
z = [lambdify((x1, x2), plane[i], "numpy")(xx1_tangent, xx2_tangent) for i in range(0, len(plane))]
|
||||
|
||||
frames, steps = [], []
|
||||
for k in range(len(f_xn)):
|
||||
#frame = go.Frame(data=[go.Surface(x=xx1, y=xx2, z=fx, showscale=True, opacity=0.8)])
|
||||
#fig.add_trace(go.Scatter3d(x=np.array(self.xn_list)[:k, 0], y=np.array(self.xn_list)[:k, 1], z=f_xn))
|
||||
frame = go.Frame(dict(data=[go.Scatter3d(x=np.array(self.xn_list)[:k,0], y=np.array(self.xn_list)[:k,1], z=f_xn)], name=f'frame{k+1}'), traces=[1])
|
||||
tmp_trace1 = go.Scatter3d(x=np.array(self.xn_list)[:k,0], y=np.array(self.xn_list)[:k,1], z=f_xn)
|
||||
tmp_trace2 = go.Surface(x=xx1_tangent, y=xx2_tangent, z=z[k], showscale=True, opacity=0.5)
|
||||
frame = go.Frame(dict(data=[tmp_trace1, tmp_trace2], name=f'frame{k+1}'), traces=[1, 2])
|
||||
frames.append(frame)
|
||||
step = dict(
|
||||
method="update",
|
||||
|
@ -316,13 +324,12 @@ class gradient_descent_2d(object):
|
|||
len=1.0)
|
||||
]
|
||||
|
||||
trace1 = go.Surface(x=xx1, y=xx2, z=fx, showscale=True, opacity=0.8)
|
||||
trace1 = go.Surface(x=xx1, y=xx2, z=fx, showscale=False, opacity=0.8)
|
||||
trace2 = go.Scatter3d(x=None, y=None, z=None)
|
||||
fig = go.Figure(data=[trace1, trace2], frames=frames)
|
||||
#fig.add_surface(x=xx1, y=xx2, z=fx, showscale=True, opacity=0.9)
|
||||
#fig.update_traces(contours_z=dict(show=True, usecolormap=True, highlightcolor="limegreen", project_z=True))
|
||||
#fig.update(frames=frames)
|
||||
trace3 = go.Surface(x=None, y=None, z=None, showscale=False, opacity=0.5, colorscale='Blues')
|
||||
fig = go.Figure(data=[trace1, trace2, trace3], frames=frames)
|
||||
fig.update_layout(updatemenus=[dict(type="buttons", buttons=[dict(label="Play", method="animate", args=[None, dict(fromcurrent=True)]), \
|
||||
dict(label="Pause", method="animate", args=[[None], dict(fromcurrent=True, mode='immediate', transition= {'duration': 0}, frame=dict(redraw=True, duration=0))])])],
|
||||
margin=dict(l=0, r=0, b=0, t=0), sliders=sliders)
|
||||
dict(label="Pause", method="animate", args=[[None], \
|
||||
dict(fromcurrent=True, mode='immediate', transition= {'duration': 0}, frame=dict(redraw=True, duration=0))])])],
|
||||
margin=dict(r=20, l=10, b=10, t=10), sliders=sliders)
|
||||
fig.show()
|
|
@ -10,6 +10,7 @@ from IPython.display import display, clear_output
|
|||
|
||||
from tqdm import tqdm
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import plotly.graph_objects as go
|
||||
import plotly.io as pio
|
||||
|
||||
|
@ -279,19 +280,26 @@ class gradient_descent_2d(object):
|
|||
x1 = symbols("x1")
|
||||
x2 = symbols("x2")
|
||||
expr = sympify(self.wg_expr.value)
|
||||
xx1 = np.arange(np.array(self.xn_list)[:, 0].min()*0.5, np.array(self.xn_list)[:, 0].max()*1.5, 0.05)
|
||||
xx2 = np.arange(np.array(self.xn_list)[:, 1].min()*0.5, np.array(self.xn_list)[:, 1].max()*1.5, 0.05)
|
||||
xx1 = np.arange(np.array(self.xn_list)[:, 0].min() * 0.5, np.array(self.xn_list)[:, 0].max() * 1.5, 0.1)
|
||||
xx2 = np.arange(np.array(self.xn_list)[:, 1].min() * 0.5, np.array(self.xn_list)[:, 1].max() * 1.5, 0.1)
|
||||
xx1_tangent = np.arange(np.array(self.xn_list)[:, 0].min(), np.array(self.xn_list)[:, 0].max(), 0.1)
|
||||
xx2_tangent = np.arange(np.array(self.xn_list)[:, 1].min(), np.array(self.xn_list)[:, 1].max(), 0.1)
|
||||
xx1_o, xx2_o = xx1, xx2
|
||||
xx1, xx2 = np.meshgrid(xx1, xx2)
|
||||
|
||||
xx1_tangent, xx2_tangent = np.meshgrid(xx1_tangent, xx2_tangent)
|
||||
f = lambdify((x1, x2), expr, "numpy")
|
||||
fx = f(xx1, xx2)
|
||||
f_xn = f(np.array(self.xn_list)[:, 0], np.array(self.xn_list)[:, 1])
|
||||
partial_x1 = lambdify((x1, x2), diff(expr, x1), "numpy")
|
||||
partial_x2 = lambdify((x1, x2), diff(expr, x2), "numpy")
|
||||
plane = partial_x1(np.array(self.xn_list)[:, 0], np.array(self.xn_list)[:, 1]) * (x1 - np.array(self.xn_list)[:, 0]) + partial_x2(np.array(self.xn_list)[:, 0], np.array(self.xn_list)[:, 1]) * (x2 - np.array(self.xn_list)[:, 0]) + f_xn
|
||||
z = [lambdify((x1, x2), plane[i], "numpy")(xx1_tangent, xx2_tangent) for i in range(0, len(plane))]
|
||||
|
||||
frames, steps = [], []
|
||||
for k in range(len(f_xn)):
|
||||
#frame = go.Frame(data=[go.Surface(x=xx1, y=xx2, z=fx, showscale=True, opacity=0.8)])
|
||||
#fig.add_trace(go.Scatter3d(x=np.array(self.xn_list)[:k, 0], y=np.array(self.xn_list)[:k, 1], z=f_xn))
|
||||
frame = go.Frame(dict(data=[go.Scatter3d(x=np.array(self.xn_list)[:k,0], y=np.array(self.xn_list)[:k,1], z=f_xn)], name=f'frame{k+1}'), traces=[1])
|
||||
tmp_trace1 = go.Scatter3d(x=np.array(self.xn_list)[:k,0], y=np.array(self.xn_list)[:k,1], z=f_xn)
|
||||
tmp_trace2 = go.Surface(x=xx1_tangent, y=xx2_tangent, z=z[k], showscale=True, opacity=0.5)
|
||||
frame = go.Frame(dict(data=[tmp_trace1, tmp_trace2], name=f'frame{k+1}'), traces=[1, 2])
|
||||
frames.append(frame)
|
||||
step = dict(
|
||||
method="update",
|
||||
|
@ -316,13 +324,12 @@ class gradient_descent_2d(object):
|
|||
len=1.0)
|
||||
]
|
||||
|
||||
trace1 = go.Surface(x=xx1, y=xx2, z=fx, showscale=True, opacity=0.8)
|
||||
trace1 = go.Surface(x=xx1, y=xx2, z=fx, showscale=False, opacity=0.8)
|
||||
trace2 = go.Scatter3d(x=None, y=None, z=None)
|
||||
fig = go.Figure(data=[trace1, trace2], frames=frames)
|
||||
#fig.add_surface(x=xx1, y=xx2, z=fx, showscale=True, opacity=0.9)
|
||||
#fig.update_traces(contours_z=dict(show=True, usecolormap=True, highlightcolor="limegreen", project_z=True))
|
||||
#fig.update(frames=frames)
|
||||
trace3 = go.Surface(x=None, y=None, z=None, showscale=False, opacity=0.5, colorscale='Blues')
|
||||
fig = go.Figure(data=[trace1, trace2, trace3], frames=frames)
|
||||
fig.update_layout(updatemenus=[dict(type="buttons", buttons=[dict(label="Play", method="animate", args=[None, dict(fromcurrent=True)]), \
|
||||
dict(label="Pause", method="animate", args=[[None], dict(fromcurrent=True, mode='immediate', transition= {'duration': 0}, frame=dict(redraw=True, duration=0))])])],
|
||||
margin=dict(l=0, r=0, b=0, t=0), sliders=sliders)
|
||||
dict(label="Pause", method="animate", args=[[None], \
|
||||
dict(fromcurrent=True, mode='immediate', transition= {'duration': 0}, frame=dict(redraw=True, duration=0))])])],
|
||||
margin=dict(r=20, l=10, b=10, t=10), sliders=sliders)
|
||||
fig.show()
|
Loading…
Reference in New Issue