首页 > 其他分享 >大模型面试手撕代码题1——梯度下降

大模型面试手撕代码题1——梯度下降

时间:2024-10-31 19:18:24浏览次数:7  
标签:__ plt 梯度 代码 面试 b0 b1 np alpha

本文以线性回归作为出发点开始我们的梯度下降的讲解

为了让本文读者理解的更加清晰,我顺着思路一步步给各位读者讲一下

第一步:导包(这一步必须的)

import numpy as np
import pandas as pd
from tqdm import tqdm
import matplotlib.pyplot as plt

第二步:为了完成本次的梯度下降算法,我们要简单的生成一部分数据

# 生成示例数据
def generate_data(n_samples=100, noise_scale=0.5):
    np.random.seed(42)  # 设置随机种子以确保结果可复现
    x = np.linspace(0, 10, n_samples)  # 生成从0到10的n_samples个等间距的点
    y = 2 * x + 1 + np.random.normal(scale=noise_scale, size=n_samples)  # 线性关系加上噪声
    return x, y

"""
[ 0.          0.1010101   0.2020202   0.3030303   0.4040404   0.50505051
  0.60606061  0.70707071  0.80808081  0.90909091  1.01010101  1.11111111
  1.21212121  ........ 9.39393939  9.49494949  9.5959596
  9.6969697   9.7979798   9.8989899  10.        ]共100个样本
[ 1.24835708  1.13288805  1.72788467  2.36757553  1.69100412  1.89303253
  3.00172762  ........ 19.79384491 19.46016172
 20.54199953 20.72648723 20.80053653 20.88270643]共100个样本
"""

 第三步:计算损失函数

# 计算损失函数
def get_J(x, y, b1, b0):
    h = b1 * x + b0
    delta2 = np.square(y - h)
    J = np.mean(delta2) / 2
    return J

这里面b1就是我们的k,b0就是我们传统意义上的b

第四步:更新参数函数

# 更新参数
def update(x, y, b1, b0, alpha):
    grad_k, grad_b = get_gradients(x, y, b1, b0)
    b1 -= alpha * grad_k
    b0 -= alpha * grad_b
    return b1, b0

第5步:主函数设置

# 主函数
def main():
    # 超参设置
    alpha = 0.0008
    epoch = 4000

    # 加载数据
    x, y = generate_data()

    # 初始化参数
    b1 = 1
    b0 = 0.3

    # 列表存放每轮的损失,以便绘图
    l = []
    e = []
    loss = get_J(x, y, b1, b0)
    l.append(loss)
    ep = 0
    e.append(ep)

    # 梯度下降
    for i in tqdm(range(epoch)):
        e.append(i + 1)
        b1, b0 = update(x, y, b1, b0, alpha)
        loss = get_J(x, y, b1, b0)
        l.append(loss)

    # 绘制损失随迭代次数变化的图表
    plt.plot(e, l)
    plt.title('Loss vs. Epoch')
    plt.xlabel('Epoch')
    plt.ylabel('Loss')
    plt.show()


if __name__ == '__main__':
    main()

其实逻辑一缕清楚,就没那么难了

标签:__,plt,梯度,代码,面试,b0,b1,np,alpha
From: https://blog.csdn.net/sdsasaAAS/article/details/143382671

相关文章

  • Microi吾码低代码平台
    Microi吾码-低代码平台Vue3在线试用地址:https://microi.netVue2传统界面试用地址1(仅查询)https://os.itdos.comVue2传统界面试用地址2(可操作数据)https://demo.microi.net/平台始于2014年(基于Avalon.js),2018年使用Vue2重构,持续更新至今,曾融资过1000万,研发团队高峰时30+人平台......
  • 线程绑定cpu核心的代码研究
    1、使用taskset指令1)获取进程pid[root@CENTOS57eq]#psaux|grepledroot92400.00.06324376pts/0S07:400:00./ledThreadroot92420.00.0112660968pts/0S+07:400:00grep--color=autoled2)查看进程当前运行在哪个cpu......
  • 测试代码 unittest
    测试代码unittest1.概述。相信接触过Java语言的朋友一定对Junit单元测试框架不陌生,对于Python语言,同样有类似的单元测试框架Unittest。Unittest是Python内部自带的一个单元测试的模块,它设计的灵感来源于Junit,具有和Junit类似的结构,有过Junit经验的朋友可以很快上手。Unitte......
  • 京东最新旋转验证码识别代码
     今天京东旋转验证又又又更新了,样例如下:更新了很多新图片,我们再次进行了大量数据标记,完成了这款验证码的更新。现在正确率可以达到99%左右。下边是这款验证码的识别代码:importbase64importrequestsimportdatetimeimportnumpyasnpfromioimportBytesIOfrom......
  • 数据结构 - 散列表,三探之代码实现
    相信通过前面两章对散列表的学习,大家应该已经掌握了散列表的基础知识,今天我们就选用简单的取模方式构建散列函数,分别实现链式法和开放寻址法中的线性探测法来解决碰撞问题,而再散列法则以方法的形式分别在两种实现方法中实现。01、链式法实现1、元素定义通过前面链式......
  • 使用ThreadPoolExecutor线程池消化线程执行代码
    此处记录一个使用ThreadPoolExecutor线程池的demo线程代码publicclassExcutorRunnableimplementsRunnable{@Overridepublicvoidrun(){System.out.println(Thread.currentThread().getName()+":线程执行666");try{Thread.......
  • 【Linux】巧妙运用<信号量>解决<水果放取问题>(思维导图&代码演示&思路解析)
    前言大家好吖,欢迎来到YY滴Linux系列,热烈欢迎!本章主要内容面向接触过C++的老铁主要内容含:欢迎订阅YY滴C++专栏!更多干货持续更新!以下是传送门!YY的《C++》专栏YY的《C++11》专栏YY的《Linux》专栏YY的《数据结构》专栏YY的《C语言基础》专栏YY的《初学者易错点》......
  • 牛客网刷题(4)(Java之(static)静态变量、静态方法、静态代码块、静态内部类)
    目录一、static关键字。(1)牛客网题目。(2)总结。<1>静态变量。(类变量)1、特点。2、补充与注意。3、代码演示。<2>静态方法1、特点。2、补充与注意。3、代码演示。<3>静态代码块。1、特点。2、补充与注意。3、代码演示。<4>静态内部类。1、特点。2、注意事项。3......
  • uniapp - 详细实现移动端公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程
    前言Vue版本,请访问这篇文章。在uni-appH5网站平台开发中,详解微信公众号网页接入微信授权登录示例代码,附带申请测试公众号全流程及配置教程,提供前端h5页面公众号网页实现授权登陆并获取用户昵称头像数据的示例源码,用自己项目跑出来的本地局域网IP段就可以拉起公众......
  • React面试常见题目(基础-进阶)
    React面试常见题目及详细回答讲解基础题目(20个)什么是React?回答:React是一个用于构建用户界面的JavaScript库,它允许你将UI拆分成可复用的组件。React起源于Facebook的内部项目,用于构建高性能的Web应用界面。React组件有哪些类型?回答:React组件主要有函数组件和类组件两种类......