首页 > 编程语言 >Python|梯度下降法

Python|梯度下降法

时间:2024-04-05 17:13:43浏览次数:25  
标签:Python 梯度 random batch 下降 rate learning np theta

全量梯度下降

import numpy as np
  
# 创建数据集X,y
np.random.seed(1)
X = np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]
  
# 创建超参数
n_iterations = 10000
t0, t1 = 5, 500
  
# 定义一个函数来动态调整学习率
def learning_rate_schedule(t):
    return t0/(t+t1)
  
# 1,初始化θ
theta = np.random.randn(2, 1)
# 4,判断是否收敛,一般不会去设定阈值,而是直接采用设置相对大的迭代次数保证可以收敛
for i in range(n_iterations):
    # 2,求梯度,计算gradient
    gradients = X_b.T.dot(X_b.dot(theta)-y)
    # 3,应用梯度下降法的公式去调整θ值 θt+1=θt-η*gradient
    learning_rate = learning_rate_schedule(i)
    theta = theta - learning_rate * gradients
print(theta)

随机梯度下降

import numpy as np
  
# 创建数据集
X = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]
# 创建超参数
n_epochs = 10000
m = 100
t0, t1 = 5, 500
  
# 定义一个函数来调整学习率
def learning_rate_schedule(t):
    return t0/(t+t1)
  
theta = np.random.randn(2, 1)
for epoch in range(n_epochs):
    # 在双层for循环之间,每个轮次开始分批次迭代之前打乱数据索引顺序
    arr = np.arange(len(X_b))
    np.random.shuffle(arr)
    X_b = X_b[arr]
    y = y[arr]
    for i in range(m):
        xi = X_b[i:i+1]
        yi = y[i:i+1]
        gradients = xi.T.dot(xi.dot(theta)-yi)
        learning_rate = learning_rate_schedule(epoch*m + i)
        theta = theta - learning_rate * gradients
  
print(theta)

小批量梯度下降

import numpy as np
  
# 创建数据集X,y
X = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
X_b = np.c_[np.ones((100, 1)), X]
  
# 创建超参数
t0, t1 = 5, 500
  
# 定义一个函数来动态调整学习率
def learning_rate_schedule(t):
    return t0/(t+t1)
  
n_epochs = 100000
m = 100
batch_size = 10
num_batches = int(m / batch_size)
  
theta = np.random.randn(2, 1)
for epoch in range(n_epochs):
    arr = np.arange(len(X_b))
    np.random.shuffle(arr)
    X_b = X_b[arr]
    y = y[arr]
    for i in range(num_batches):
        x_batch = X_b[i*batch_size: i*batch_size + batch_size]
        y_batch = y[i*batch_size: i*batch_size + batch_size]
        gradients = x_batch.T.dot(x_batch.dot(theta)-y_batch)
        learning_rate = learning_rate_schedule(epoch * m + i)
        theta = theta - learning_rate*gradients
  
print(theta)
 

标签:Python,梯度,random,batch,下降,rate,learning,np,theta
From: https://www.cnblogs.com/conpi/p/18115911

相关文章

  • 小白学python爬虫1
    """爬虫:通过编写程序来获取互联网上的资源需求:用程序模拟浏览器,输入一个网址,从该网址获取到资源或者内容"""#fromurllib.requestimporturlopen#url网址##url="http://www.baidu.com"#resp=urlopen(url)###print(resp.read().decode("utf-8"))......
  • Python栈和队列
    在计算机科学中,栈(Stack)和队列(Queue)是两种非常重要的数据结构,它们在算法设计和程序开发中扮演着关键角色。Python语言内置了对这两种数据结构的支持,尤其是在其`collections`和`deque`模块中。###栈(Stack)栈是一种后进先出(LastInFirstOut,LIFO)的数据结构,它只允许在一端进行......
  • Python简单函数循环综合实例
    importrandomprint("*"*71)print("*"*27+"欢迎来到名人猜猜猜"+"*"*27)print("*"*29+"Let'sbegining"+"*"*28)character_1='他是巨星'character_2='他是篮球健将'character_3='他身......
  • Python递归调用应用实例-汉诺塔
    递归介绍1.简单的说:递归就是函数自己调用自己,每次调用时传入不同的值2.递归有助于编程者解决复杂问题,同时可以让代码变得简洁汉诺塔传说汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石住子,在一根柱子上从上往下按照大小顺......
  • 10个全面了解python自动化办公代码
    10个全面了解python自动化办公代码当涉及自动化工作时,Python是一种非常强大的编程语言.以下是10个用于自动化工作的Python代码示例:文件操作:自动化文件操作可以帮助您批量处理文件、筛选内容等等. import os# 遍历目录下所有文件for root, dirs, files in ......
  • python(8)
    列表(三)列表,通过下标索引的方法,用赋值运算符将新的值替换进去1.改a=["1","2","3","4"]a[2]="5"["1","2","5","4"]a[2:]=["3","6"]  #切片["1","2",&q......
  • Python实参与形参(1)
    1.函数的定义defone():print("123456")print("123456")one()one()结果:1234561234561234561234562.函数的形参、实参应用defone(frist,last):print("你好",frist)iflast>100:print("你考试考的很好")else:......
  • 数学模型,第2章训练题,超市购物,垂钓俱乐部,圆盘加工,动物尺寸,python,论文
    目录      1.题目描述2. 题目描述3.题目描述4.题目描述5.问题描述1. 题目描述在超市购物时你注意到大包装商品比小包装商品便宜这种现象了吗?比如佳洁士牙膏120g装的每支10.80元,200g装的每支15.80元,二者单位质量的价格比是1.14:1。使用比例方法构造模型解......
  • Python面向对象的理解
    ★静态方法、实例方法、类方法项目操作对象调用方式静态方法既不操作类也不操作实例对象类或实例对象实例方法操作实例属性实例对象类方法操作类属性类或实例对象★python私有方法和私有属性理解规律总结1.私有的属性,不能通过对象直接访问,但是可......
  • 【前置知识】散度、梯度、旋度及其衍生
    在CFD理论研究中,以下的算符是不得不品的基础。下文整理在笛卡尔坐标系下,散度、梯度、旋度等一系列物理量。目录倒三角算符一阶梯度散度旋度二阶梯度的散度​编辑拉普拉斯算符散度的梯度爱因斯坦求和约定倒三角算符倒三角算符,称为nabla,哈密顿算子,又可称为del。......