Datawhale第八期——Task2设立计算图并自动计算

Datawhale第八期——Task2设立计算图并自动计算

使用numpy实现梯度下降算法

import numpy as np
import matplotlib.pyplot as plt
def func(x):
    return np.square(x)
def dfunc(x):
    return 2*x

def main():
    x=np.linspace(-1,1,100)
    y=func(x)
    eta=0.1#这是学习率(决定了参数移动到最优值的速度快慢)
    theta=-1.0#第一个点
    episilon=1e-8
    while True:
        gradient=dfunc(theta)
        last_theta=theta
        theta-=gradient*eta#对theta进行更新
        if abs(func(theta)-func(last_theta))<episilon:
            break
    print(theta)
    print(func(theta))
    
main()

        


使用pytorch实现梯度下降算法

import torch
x = torch.Tensor([0])#设定初始值
x.requires_grad_(True)
for epoch in range(epoches):
    y=x*x
    y.backward()#反向传播求梯度
    eta=0.1#这是学习率(决定了参数移动到最优值的速度快慢)
    x.data= x.data - eta*x.grad.data
    # 在 PyTorch 中梯度如果不清零会积累((因为PyTorch是基于动态图的, 每迭代一次就会留下计算缓存, 到一下次循环时需要手动清楚缓存))
    x.grad.data.zero_()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值