梯度下降法演示

# (x-2)**2 = 0
from tqdm import trange

epoch = 1000
lr = 0.09
x = 5  # 初始值, 凯明初始化, # 何凯明
label = 0


for e in trange(epoch):

    pre = (x - 2) ** 2
    loss = (pre - label) ** 2

    delta_x = 2*(pre - label) * (x - 2)
    x = x - delta_x * lr

print(x)
100%|███████████████████████████████████████████████████| 1000/1000 [00:00<00:00, 386821.36it/s]
1.9474942856120552

可以使用matplotlib和FuncAnimation库来生成动态图。这里是一个简单的示例代码,可以生成(x-2)^2=0的根随迭代次数变化的动态图:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from tqdm import trange
from matplotlib.animation import PillowWriter

epoch = 1000
lr = 0.09
x = 5
label = 0

fig, ax = plt.subplots()
ax.set_xlim(0, epoch)
ax.set_ylim(0, 10)

x_data = []
y_data = []

line, = ax.plot([], [])

def update(frame):
    global x
    global y_data
    global x_data

    pre = (x-2) ** 2
    loss = (pre - label) ** 2

    delta_x = 2*(pre - label) * (x-2)
    x = x - delta_x * lr

    x_data.append(frame)
    y_data.append(x)

    line.set_data(x_data, y_data)

    return line,

ani = FuncAnimation(fig, update, frames=trange(epoch), blit=True)

ax.set_xlabel('Epoch')
ax.set_ylabel('X')

writer = PillowWriter(fps=150)
ani.save('animation.gif', writer=writer)

在上述代码中,我们首先使用matplotlib创建了一个图形窗口,并设置了x轴和y轴的范围。然后,我们定义了一个update函数,该函数在每次迭代中计算损失和更新x的值,并将当前的x和迭代次数分别添加到x_data和y_data列表中。最后,我们使用FuncAnimation函数创建了一个动画对象,并将update函数作为参数传递进去。

在调用FuncAnimation函数时,我们使用trange函数来生成一个迭代器,该迭代器会在每次迭代时更新动画。blit参数设置为True表示只更新变化的部分,可以提高动画的效率。最后,我们调用plt.show()函数显示动画图形窗口。

运行这段代码,你将会看到一个动态图,其中x的值会随着迭代次数的增加而趋近于2,即(x-2)^2=0的根。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值