动态化梯度下降可视化3D其中loss=w12+w22,初始化w1=1,w2=3,学习率为0.1,并3D可视化动态下降,3D可视化的x轴为w1,y为w2,z为loss,python代码实现
时间: 2024-10-11 20:11:51 浏览: 8
动态可视化梯度下降的过程通常涉及使用Python库如`matplotlib`、`numpy`以及优化算法库,这里我们可以使用`scipy.optimize`中的`minimize`函数来进行优化,然后利用`plotly`进行3D图的绘制。以下是一个简单的Python代码示例:
```python
import numpy as np
from scipy.optimize import minimize
import plotly.graph_objs as go
import plotly.express as px
# 初始化参数
w1 = 1
w2 = 3
learning_rate = 0.1
objective_func = lambda x: x[0]**2 + x[1]**2 # Loss function (L2 norm)
# 梯度下降优化
def gradient_descent(x, learning_rate, num_iterations):
for _ in range(num_iterations):
grad = np.array([2 * x[0], 2 * x[1]]) # Gradient at current point
x -= learning_rate * grad
return x
num_iterations = 100 # 迭代次数
initial_point = [w1, w2]
optimized_w = gradient_descent(initial_point, learning_rate, num_iterations)
# 计算损失值
loss = objective_func(optimized_w)
# 创建3D数据点
data = [[optimized_w[0], optimized_w[1], loss]]
# 3D散点图
fig = go.Figure(data=[go.Scatter3d(
x=[data[0][0]],
y=[data[0][1]],
z=[data[0][2]],
mode='markers',
marker=dict(size=10, color='red', opacity=0.8)
)])
# 添加3D网格
x_range = np.linspace(-5, 5, 100) # 范围设置
y_range = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x_range, y_range)
Z = X**2 + Y**2 # 计算每个网格点的loss
surf = go.Surface(x=X, y=Y, z=Z, opacity=0.7)
fig.add_trace(surf)
fig.update_layout(scene=dict(xaxis_title="w1", yaxis_title="w2", zaxis_title="Loss"))
# 显示图表
fig.show()