当用matplotlib说明梯度下降时,如何绘制典型的碗形状?

时间:2017-08-12 13:15:08

标签: python matplotlib gradient

当说明梯度下降时,我们通常会看到下面的碗状图。此外,据说使用log_loss而不是平方误差,我们可以更容易地找到最小损失值,因为使用平方误差作为损失函数,可能导致多个局部最小值。

因此,我想绘制如下的碗状图。

但是,我只设法绘制以下内容 enter image description here

这是我的代码,任何人都可以帮我修复它吗?感谢

from mpl_toolkits.mplot3d.axes3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
import math


fig, ax1 = plt.subplots(1, 1, figsize=(8, 5), subplot_kw={'projection': '3d'})

# Get the test data
x1 = 1
x2 = 1
y = 0.8
w = np.linspace(-10,10,100)
# w = np.random.random(100)
wl = np.linspace(-10,10,100)
# wl = np.random.random(100)
w1 = np.ones((100,100))
w2 = np.ones((100,100))
for idx in range(100):
    w1[idx] = w1[idx]*w
    w2[:,idx] = w2[:,idx]*wl

L = []
for i in range(w1.shape[0]):
    for j in range(w1.shape[1]):
        a = w1[i,j]*x1 + w2[i,j]*x2
        f = 1/(1+math.exp(-a))
        l = -(y*math.log(f)+(1-y)*math.log(1-f))
        # l = (1/2)*(f-y)**2
        L.append(l)
l = np.array(L).reshape(w1.shape)


ax1.plot_wireframe(w1,w2,l)
ax1.set_title("plot backpropogation")


plt.tight_layout()
plt.show()

0 个答案:

没有答案