使用代码模拟梯度下降

news2024/12/23 22:29:01
import numpy as np
import matplotlib.pyplot as plt

f = lambda x: (x - 3.5) ** 2 - 4.5 * x + 10
x = np.linspace(0, 10, 200)
y = f(x)
plt.plot(x, y, color='g')

方式一: 求导

g = lambda x: 2 * (x - 3.5) - 4.5
# 令导数等于0  g=0
# 0 = 2 * (x-3.5)-4.5
# 2x - 11.5 = 0
x_min = 11.5 / 2
print(x_min)

方式二:梯度下降

if np.abs(x_ - last_x_) < precision: 通过对x_和last_x_进行对比查看学习率的变化判断是不是已经达到了最优

step = 0.01  #学习率
# 瞎蒙  随机的最小值
x_ = np.random.randint(0, 12, size=1)[0]
print("随机生产学习", '+++++++++++++++++++++++++++++++', x_)
# 记录上一次梯度下降的x_值
last_x_ = x_ + 2  # 只要与x_有一个比较大差值,就可以
# 需要使用x_和last_x_ 差值,作为退出条件
# 精确度  退出条件
precision = 1e-4
x_result = [x_]
count = 0
while True:
    if np.abs(x_ - last_x_) < precision:
        break
    else:
        # 更新之前的last_x_
        last_x_ = x_  # 将当前的x_复制给last_x_
        # 更新当前的x_
        x_ = x_ - step * g(x_)  #梯度下降更新权重,目标值
        x_result.append(x_)
        print('__________________________________', x_)
plt.figure(figsize=(9, 6))
plt.plot(x, y, color='red')
plt.scatter(np.array(x_result), f(np.array(x_result)), color='green')

在这里插入图片描述
if np.abs(g(x_)) < precision: 通过公式判断导数是不是趋于0 进行判断是不是达到最优

step = 0.01  #学习率
# 瞎蒙  随机的最小值
x_ = np.random.randint(0, 12, size=1)[0]
print("随机生产学习", '+++++++++++++++++++++++++++++++', x_)
# 记录上一次梯度下降的x_值
last_x_ = x_ + 2  # 只要与x_有一个比较大差值,就可以
# 需要使用x_和last_x_ 差值,作为退出条件
# 精确度  退出条件
precision = 1e-4
x_result = [x_]
count = 0
while True:
    if np.abs(g(x_)) < precision:  # 判断的梯度趋于0,到达最小值,山谷处,她的导数为0
        break
    else:
        # 更新之前的last_x_
        last_x_ = x_  # 将当前的x_复制给last_x_
        # 更新当前的x_
        x_ = x_ - step * g(x_)  #梯度下降更新权重,目标值
        x_result.append(x_)
        print('__________________________________', x_)
plt.figure(figsize=(9, 6))
plt.plot(x, y, color='red')
plt.scatter(np.array(x_result), f(np.array(x_result)), color='green')

if np.abs((f(x_)) - f(last_x_)) / np.abs(f(last_x_)) < precision: # 利用损失函数进行判断是不是已经达到了最优

step = 0.01  #学习率
# 瞎蒙  随机的最小值
x_ = np.random.randint(0, 12, size=1)[0]
print("随机生产学习", '+++++++++++++++++++++++++++++++', x_)
# 记录上一次梯度下降的x_值
last_x_ = x_ + 2  # 只要与x_有一个比较大差值,就可以
# 需要使用x_和last_x_ 差值,作为退出条件
# 精确度  退出条件
precision = 1e-4
x_result = [x_]
count = 0
while True:
 if np.abs((f(x_)) - f(last_x_)) / np.abs(f(last_x_)) < precision:  # 利用损失函数进行判断
        break
    else:
        # 更新之前的last_x_
        last_x_ = x_  # 将当前的x_复制给last_x_
        # 更新当前的x_
        x_ = x_ - step * g(x_)  #梯度下降更新权重,目标值
        x_result.append(x_)
        print('__________________________________', x_)
plt.figure(figsize=(9, 6))
plt.plot(x, y, color='red')
plt.scatter(np.array(x_result), f(np.array(x_result)), color='green')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1301884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML的img常见应用属性

目录 一、src、alt、width、height 的运用二、title的运用三、align的运用四、border的运用 一、src、alt、width、height 的运用 src指定图像的URL&#xff0c;即图像的路径alt指定图像的替代文本&#xff0c;当图像无法显示时&#xff0c;会显示替代文本。width指定图像的宽…

2021年第十届数学建模国际赛小美赛B题疾病传播的风险解题全过程文档及程序

2021年第十届数学建模国际赛小美赛 B题 疾病传播的风险 原题再现&#xff1a; 空气传播疾病可以通过咳嗽或打喷嚏、喷洒液体或灰尘传播。另一方面&#xff0c;一些常见的传染病只能通过飞沫传播。请建立一个模型&#xff0c;以评估密闭空间内空气传播和液滴传播疾病的可能性。…

【特殊文件(一)】属性文件读写实操

文章目录 属性文件特殊文件概述Properties属性文件概述Properties属性文件读取Properties属性文件写操作 属性文件 特殊文件概述 IO流是用来读、写文件中的数据。但是我们接触到的文件大部分都是普通的文本文件&#xff0c;普通的文本文件里面的数据是没有任何格式规范的&…

爆肝整理,Java接口自动化测试实战-rest-assured(详细总结)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、关于rest-assu…

使用CLion进行cuda编程,并使用cuda-gdb对核函数进行debug,这可能是全网你能够找到的最详细的CLion和cuda编程环境配置教程了

文章目录 前言一、环境准备二、相关学习资料三、环境配置1.新建Clion C Executable项目2.在Clion中的ToolChains中配置cuda-gdb3.配置CMake options4.配置CMakeLists.txt(1) Failed to compute shorthash for libnvrtc.so(2) c: error: unrecognized command-line option -G(3)…

第4章:知识融合:概述、方法

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

数据库 02-03 补充的SQL的集合运算,字符串计算,更名计算

集合运算&#xff1a; 01.union&#xff0c;并运算 union运算自动去重&#xff0c;是包括两个集合的全部部分。 如果不要去重&#xff0c;union all 02.交运算&#xff0c;intersect intersect运算是去重&#xff0c;只保留两个集合的相同部分。 intersect all 保留重复…

分割均衡字符串 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 均衡串定义:字符串只包含两种字符&#xff0c;且两种字符的个数相同。 给定一个均衡字符串&#xff0c;请给出可分割成新的均衡子串的最大个数。 约定字符串中只…

15:00面试,15:06就出来了,问的问题太变态了。。。

刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到5月一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资还要降…

Spring Cloud切换内嵌Tomcat为宝兰德Application Server

目录 替换Tomcat中间件Tomcat是什么Spring Cloud剔除tomcat引入宝兰德Application Server打包运行授权 替换Tomcat中间件 Tomcat是什么 Apache Tomcat (called “Tomcat” for short) is a free and open-source implementation of the Jakarta Servlet, Jakarta Expression …

报错:AttributeError: ‘DataFrame‘ object has no attribute ‘reshape‘

这个错误通常发生在你试图在 Pandas DataFrame 上直接使用 reshape 方法时。reshape 方法通常与 NumPy 数组相关联&#xff0c;而不是 Pandas DataFrame。 如果你正在使用 Pandas DataFrame 并希望重新塑造它&#xff0c;你应该使用 Pandas 的重塑函数&#xff0c;如 pivot、m…

connection error;reply-code=503;unknown exchange type ‘x-delayed-message‘

错误原因 这个错误表明你的 RabbitMQ 服务器不认识交换机类型 “x-delayed-message”&#xff0c;这通常是因为你的 RabbitMQ 服务器没有启用 rabbitmq_delayed_message_exchange 插件&#xff0c;或者插件版本与你的 RabbitMQ 服务器不兼容。 解决方法 启用 RabbitMQ 延迟队…

Django 模型操作-分页(七)

一、连接MySql数据库 1、先安装MySQL 2、再安装MySQL驱动 使用mysqlclient pip install mysqlclient 如果上面的命令安装失败, 则尝试使用国内豆瓣源安装: pip install -i https://pypi.douban.com/simple mysqlclient 二、在settings.py中配置 三、 book表的数据…

MyBatis `saveBatch` 性能调优详解

文章目录 1. 引言2. MyBatis saveBatch 简介3. 常见性能问题3.1 SQL 语句拼接3.2 参数传递3.3 数据库连接数 4. MyBatis saveBatch 性能调优4.1 使用批量插入语句4.1.1 代码示例 4.2 使用MyBatis的foreach标签4.2.1 代码示例 4.3 使用VALUES构造器4.3.1 代码示例 4.4 调整批量大…

机器学习算法性能评估常用指标总结

考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positive&#xff09;或负类&#xff08;negative&#xff09;。对一个二分问题来说&#xff0c;会出现四种情况。如果一个实例是正类并且也被 预测成正类&#xff0c;即为真正类&#xff08;True positive&#xff0…

轻松通关Flink第24讲:Flink 消费 Kafka 数据业务开发

在上一课时中我们提过在实时计算的场景下&#xff0c;绝大多数的数据源都是消息系统&#xff0c;而 Kafka 从众多的消息中间件中脱颖而出&#xff0c;主要是因为高吞吐、低延迟的特点&#xff1b;同时也讲了 Flink 作为生产者像 Kafka 写入数据的方式和代码实现。这一课时我们将…

张驰咨询:掌握流程改进的关键,深入了解六西格玛绿带培训

尊敬的读者&#xff0c;当您寻求提升个人能力&#xff0c;加强企业流程管理时&#xff0c;六西格玛绿带培训无疑是您的不二选择。本文将带您深入了解六西格玛绿带培训的核心内容、必备工具和实际案例&#xff0c;以助您在职业生涯中一帆风顺。 六西格玛绿带培训主要针对中层管…

【SQL开发实战技巧】系列(四十八):Oracle12C常用新特性☞多分区操作和管理

系列文章目录 【SQL开发实战技巧】系列&#xff08;一&#xff09;:关于SQL不得不说的那些事 【SQL开发实战技巧】系列&#xff08;二&#xff09;&#xff1a;简单单表查询 【SQL开发实战技巧】系列&#xff08;三&#xff09;&#xff1a;SQL排序的那些事 【SQL开发实战技巧…

风险评估是什么,为什么被称为保护网络安全的重要一环!

随着互联网的普及和信息技术的快速发展&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;网络在为我们带来便利的同时&#xff0c;也存在着各种安全风险。因此&#xff0c;进行网络风险评估是保护网络安全的重要一环。而为什么说风险评估是保护网络…

Gti GUI添加标签

通过Git Gui打开项目&#xff0c;通过菜单打开分支历史&#xff0c;我这里是名为"develop"的分支 选中需要打标签的commit&#xff0c;右键-Create tag即可 但貌似无法删除标签&#xff0c;只能通过git bash&#xff0c;本地标签通过git tag -d tagname&#xff0c;…