Python神经模型评估微分方程图算法

🎯要点

🎯神经网络映射关联图 | 🎯执行时间分析 | 🎯神经网络结构降维 | 🎯量化图结构边作用 | 🎯数学评估算法实现

🍪语言内容分比

在这里插入图片描述
在这里插入图片描述

🍇Python随机梯度下降算法

随机梯度下降是梯度下降算法的一种变体,用于优化机器学习模型。它解决了传统梯度下降方法在处理机器学习项目中的大型数据集时计算效率低下的问题。在随机梯度下降中,每次迭代不会使用整个数据集,而是只选择一个随机训练示例(或一个小批量)来计算梯度并更新模型参数。这种随机选择将随机性引入优化过程,因此在随机梯度下降中出现了“随机”一词。

使用随机梯度下降的优势在于其计算效率,尤其是在处理大型数据集时。与需要处理整个数据集的传统梯度下降方法相比,通过使用单个示例或小批量,每次迭代的计算成本显著降低。

步骤:

  • 初始化:随机初始化模型的参数。
  • 设置参数:确定更新参数的迭代次数和学习率。
  • 随机梯度下降循环:重复以下步骤,直到模型收敛或达到最大迭代次数。
  • 返回优化参数:一旦满足收敛条件或达到最大迭代次数,返回优化模型参数。

在随机梯度下降中,由于每次迭代只从数据集中随机选择一个样本,因此算法达到最小值的路径通常比典型的梯度下降算法更嘈杂。但这并不重要,因为只要我们达到最小值并且训练时间明显缩短,算法所采用的路径就无关紧要。

需要注意的一点是,由于随机梯度下降通常比典型的梯度下降更嘈杂,因此由于其下降的随机性,通常需要更多次迭代才能达到最小值。尽管它需要比典型的梯度下降更多的迭代次数才能达到最小值,但它在计算上仍然比典型的梯度下降便宜得多。因此,在大多数情况下,与批量梯度下降相比,随机梯度下降更适合用于优化学习算法。

我们将使用更新参数、拟合训练数据集和预测新测试数据时使用的方法创建一个随机梯度下降类。我们将使用的方法如下:

  • SGD 类封装了用于训练线性回归模型的随机梯度下降算法。
  • 然后我们初始化 SGD 优化器参数,例如学习率、轮数、批量大小和容差。它还将权重和偏差初始化为 None。
  • 预测函数:该函数使用当前权重和偏差计算输入数据 X 的预测。它在输入 X 和权重之间执行矩阵乘法,然后添加偏差项。
  • mean_squared_error 函数:该函数计算真实目标值 y_true 和预测值 y_pred 之间的均方误差。
  • 梯度函数:使用均方误差损失函数的梯度公式计算损失函数相对于权重和偏差的梯度。
  • 拟合方法:此方法使用随机梯度下降将模型拟合到训练数据。它会迭代指定的次数,打乱数据并更新每个时期的权重和偏差。它还会定期打印损失并根据容差检查收敛情况。

算法实现:

import numpy as npclass SGD:def __init__(self, lr=0.01, epochs=1000, batch_size=32, tol=1e-3):self.learning_rate = lrself.epochs = epochsself.batch_size = batch_sizeself.tolerance = tolself.weights = Noneself.bias = Nonedef predict(self, X):return np.dot(X, self.weights) + self.biasdef mean_squared_error(self, y_true, y_pred):return np.mean((y_true - y_pred) ** 2)def gradient(self, X_batch, y_batch):y_pred = self.predict(X_batch)error = y_pred - y_batchgradient_weights = np.dot(X_batch.T, error) / X_batch.shape[0]gradient_bias = np.mean(error)return gradient_weights, gradient_biasdef fit(self, X, y):n_samples, n_features = X.shapeself.weights = np.random.randn(n_features)self.bias = np.random.randn()for epoch in range(self.epochs):indices = np.random.permutation(n_samples)X_shuffled = X[indices]y_shuffled = y[indices]for i in range(0, n_samples, self.batch_size):X_batch = X_shuffled[i:i+self.batch_size]y_batch = y_shuffled[i:i+self.batch_size]gradient_weights, gradient_bias = self.gradient(X_batch, y_batch)self.weights -= self.learning_rate * gradient_weightsself.bias -= self.learning_rate * gradient_biasif epoch % 100 == 0:y_pred = self.predict(X)loss = self.mean_squared_error(y, y_pred)print(f"Epoch {epoch}: Loss {loss}")if np.linalg.norm(gradient_weights) < self.tolerance:print("Convergence reached.")breakreturn self.weights, self.bias

我们将创建一个包含 100 行和 5 列的随机数据集,并在此数据上拟合随机梯度下降类。 另外,我们将使用此算法的预测方法

X = np.random.randn(100, 5)
y = np.dot(X, np.array([1, 2, 3, 4, 5]))\+ np.random.randn(100) * 0.1
model = SGD(lr=0.01, epochs=1000,batch_size=32, tol=1e-3)
w,b=model.fit(X,y)
y_pred = w*X+b

输出

Epoch 0: Loss 64.66196845798673
Epoch 100: Loss 0.03999940087439455
Epoch 200: Loss 0.008260358272771882
Epoch 300: Loss 0.00823731979566282
Epoch 400: Loss 0.008243022613956992
Epoch 500: Loss 0.008239370268212335
Epoch 600: Loss 0.008236363304624746
Epoch 700: Loss 0.00823205131002819
Epoch 800: Loss 0.00823566681302786
Epoch 900: Loss 0.008237441485197143

这种获取值并根据不同参数调整它们以减少损失函数的循环称为反向传播。

TensorFlow实现此算法

import tensorflow as tf
import numpy as npclass SGD:def __init__(self, lr=0.001, epochs=2000, batch_size=32, tol=1e-3):self.learning_rate = lrself.epochs = epochsself.batch_size = batch_sizeself.tolerance = tolself.weights = Noneself.bias = Nonedef predict(self, X):return tf.matmul(X, self.weights) + self.biasdef mean_squared_error(self, y_true, y_pred):return tf.reduce_mean(tf.square(y_true - y_pred))def gradient(self, X_batch, y_batch):with tf.GradientTape() as tape:y_pred = self.predict(X_batch)loss = self.mean_squared_error(y_batch, y_pred)gradient_weights, gradient_bias = tape.gradient(loss, [self.weights, self.bias])return gradient_weights, gradient_biasdef fit(self, X, y):n_samples, n_features = X.shapeself.weights = tf.Variable(tf.random.normal((n_features, 1)))self.bias = tf.Variable(tf.random.normal(()))for epoch in range(self.epochs):indices = tf.random.shuffle(tf.range(n_samples))X_shuffled = tf.gather(X, indices)y_shuffled = tf.gather(y, indices)for i in range(0, n_samples, self.batch_size):X_batch = X_shuffled[i:i+self.batch_size]y_batch = y_shuffled[i:i+self.batch_size]gradient_weights, gradient_bias = self.gradient(X_batch, y_batch)# Gradient clippinggradient_weights = tf.clip_by_value(gradient_weights, -1, 1)gradient_bias = tf.clip_by_value(gradient_bias, -1, 1)self.weights.assign_sub(self.learning_rate * gradient_weights)self.bias.assign_sub(self.learning_rate * gradient_bias)if epoch % 100 == 0:y_pred = self.predict(X)loss = self.mean_squared_error(y, y_pred)print(f"Epoch {epoch}: Loss {loss}")if tf.norm(gradient_weights) < self.tolerance:print("Convergence reached.")breakreturn self.weights.numpy(), self.bias.numpy()X = np.random.randn(100, 5).astype(np.float32)
y = np.dot(X, np.array([1, 2, 3, 4, 5], dtype=np.float32)) + np.random.randn(100).astype(np.float32) * 0.1model = SGD(lr=0.005, epochs=1000, batch_size=12, tol=1e-3)
w, b = model.fit(X, y)
y_pred = np.dot(X, w) + b

输出

Epoch 0: Loss 52.73115158081055
Epoch 100: Loss 44.69907760620117
Epoch 200: Loss 44.693603515625
Epoch 300: Loss 44.69377136230469
Epoch 400: Loss 44.67509460449219
Epoch 500: Loss 44.67082595825195
Epoch 600: Loss 44.674285888671875
Epoch 700: Loss 44.666194915771484
Epoch 800: Loss 44.66718292236328
Epoch 900: Loss 44.65559005737305

算法优劣对比:

优势:

  • 速度:随机梯度下降比梯度下降的其他变体(例如批量梯度下降和小批量梯度下降)更快,因为它只使用一个示例来更新参数。
  • 内存效率:由于随机梯度下降一次更新每个训练示例的参数,因此内存效率很高,并且可以处理无法放入内存的大型数据集。
  • 避免局部极小值:由于随机梯度下降中的噪声更新,它有能力逃离局部极小值并收敛到全局极小值。

劣势:

  • 有噪声的更新:随机梯度下降中的更新有噪声并且具有很高的方差,这会使优化过程不太稳定并导致在最小值附近振荡。
  • 收敛缓慢:随机梯度下降可能需要更多迭代才能收敛到最小值,因为它一次更新每个训练示例的参数。
  • 对学习率的敏感性:学习率的选择在随机梯度下降中至关重要,因为使用高学习率会导致算法超出最小值,而低学习率会使算法收敛缓慢。
  • 不太准确:由于更新的噪声,随机梯度下降可能无法收敛到精确的全局最小值,并可能导致解决方案次优。这可以通过使用学习率调度和基于动量的更新等技术来缓解。

👉参阅&更新:计算思维 | 亚图跨际

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

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

相关文章

python采集阿里巴巴历年员工人数统计报告

数据为2012到2022财年阿里巴巴每年的全职员工数量。截止2022年3月31日&#xff0c;阿里巴巴共有全职员工254941人&#xff0c;比上年增长3479人。 数据来源于阿里巴巴20-F和F-1文件 按阿里巴巴财政年度进行统计&#xff0c;阿里巴巴财年结束日期为每年3月31日 为全职员工人数 阿…

博客标题:C++中的继承:构建面向对象的基石

目录 ​编辑 引言 继承的基本形式 示例1&#xff1a;基本继承 继承的类型 示例2&#xff1a;不同类型的继承 多重继承 示例3&#xff1a;多重继承 继承与多态性 示例4&#xff1a;继承与多态 结论 结尾 引言 在面向对象编程&#xff08;OOP&#xff09;中&#xff…

庞加莱猜想真的被证明了吗

一般认为&#xff0c;庞加莱猜想作出巨大贡献的&#xff0c;主要是瑟斯顿(Thurston)&#xff0c;他给出了几何化猜想&#xff0c;认为宇宙一定由八种基本拓扑形状构成。 第一&#xff0c;在之前&#xff0c;1961年斯梅尔宣称证明了五维和五维以上成立的结论。1981年弗里德曼宣称…

一文理解 Treelite,Treelite 为决策树集成模型的部署和推理提供了高效、灵活的解决方案

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、什么是 Treelite&#xff1f; Treelite 是一个专门用于将决策树集成模型高效部署到生产环境中的机器学习模型编译器&#xff0c;特别适合处理大批量数据的推理任务&#xff0c;能够显著提升推理性能…

192.168.1.1路由器管理系统使用教程

节选自&#xff1a;192.168.1.1路由器管理系统-厂商有哪些-如何使用-无法登录原因-苏州稳联 什么是 192.168.1.1 路由器管理系统&#xff1f; 192.168.1.1 是大多数家庭路由器的默认 IP 地址&#xff0c;用于访问路由器的管理控制台。通过这个管理系统&#xff0c;用户可以配…

Pearson 相关系数的可视化辅助判断和怎么用

Pearson 相关系数的可视化辅助判断和怎么用 flyfish Pearson 相关系数 是一种用于衡量两个连续型变量之间线性相关程度的统计量。其定义为两个变量协方差与标准差的乘积的比值。公式如下&#xff1a; r ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i −…

国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践

亚马逊云科技(AWS)是全球云行业最&#x1f525;火的云平台&#xff0c;在全球经济形势不好的大背景下&#xff0c;通过网课学习亚马逊云科技AWS基础备考亚马逊云科技AWS证书&#xff0c;对于找工作或者无背景转行做AWS帮助巨大。欢迎大家关注小李哥&#xff0c;及时了解世界最前…

数据类型及数据块认知

西门子STEP7编程语言 梯形图(LAD) 功能块图(FBD) 语句表(STL) 其中梯形图和功能块图可以相互转换 CPU常用数据区 信号输入区 I 信号输出区 Q 程序中表现形式&#xff0c;IX.X/QX.X;IWX/QWX-访问的是CPU输出输入过程映像区 另一种形式IWX:P/QWX:P-访问的是信号端口地址&#xf…

红酒的秘密配方:如何调配出个性化的口感?

在红酒的世界里&#xff0c;每一滴都蕴藏着大自然的秘密和酿酒师的匠心。那些令人陶醉的口感、迷人的色泽和香气&#xff0c;都是经过精心调配和时光酝酿的结果。今天&#xff0c;就让我们一起揭开红酒调配的神秘面纱&#xff0c;探索如何调配出个性化的口感&#xff0c;感受雷…

推荐4款免费好用文本转语音工具

Edge文本转语音 Edge文本转语音功能主要通过Edge-TTS实现。Edge-TTS是由微软开发的文本转语音&#xff08;TTS&#xff09;Python库&#xff0c;利用微软Azure Cognitive Services的强大功能&#xff0c;能够将文本信息转换成流畅自然的语音输出。该库支持多种中文语音语色&…

Idea使用EasyApi插件自动生成接口文档到Yapi

1.安装EasyApi插件 2.配置Yapi 设置-》EasyApi Yapi的Server 配置为Yari项目的地址 tokens&#xff1a;项目名Yapi项目里面的token&#xff1a;例如&#xff1a;test-project0e6cfb3c22c884a0fce108fffe554a20ca12341e421d7201233143ee440af36b mytest-portal0e6cfb3c22c884a…

【Linux进阶】文件系统4——文件系统特性

1.磁盘组成与分区的复习 首先说明一下磁盘的物理组成&#xff0c;整块磁盘的组成主要有&#xff1a; 圆形的碟片&#xff08;主要记录数据的部分&#xff09;&#xff1b;机械手臂&#xff0c;与在机械手臂上的磁头&#xff08;可擦写碟片上的数据);主轴马达&#xff0c;可以…

从“+AI”到“AI+”,时代进入“Next Level”

“创新的速度比创新本身更重要。”埃隆马斯克曾这样说到。 近日&#xff0c;由马斯克所掌舵的特斯拉&#xff0c;在2024年世界人工智能大会上正式推出了第二代Optimus&#xff08;擎天柱&#xff09;人形机器人&#xff0c;距离第一代面世&#xff0c;仅过去9个月。 加速升级…

Java 操作 Redis客户端

目录 1.渐进式遍历 2.Java 操作 Redis 客户端 2.1 引入依赖 2.2 配置端口转发 2.3 连接Redis Server 3.基础操作 3.1 set 和 get 3.2 exists 和 del 3.3 keys 3.4 expire 和 ttl 3.5 type 4.字符串操作 4.1 mget 和 mset 4.2 append 4.3 getrange 和 setrange 4.4 incr 和 d…

第5章-组合序列类型

#全部是重点知识&#xff0c;必须会。 了解序列和索引|的相关概念 掌握序列的相关操作 掌握列表的相关操作 掌握元组的相关操作 掌握字典的相关操作 掌握集合的相关操作1&#xff0c;序列和索引 1&#xff0c;序列是一个用于存储多个值的连续空间&#xff0c;每一个值都对应一…

美容师有什么话术技巧?美业人如何提升自己的销售技巧?博弈美业门店管理系统分享经验

作为一名美容师&#xff0c;有一些话术和销售技巧可以帮助你提升服务质量和销售业绩。以下是博弈美业收银系统分享的一些建议&#xff1a; 1.建立信任&#xff1a; 在与客户交流时&#xff0c;表现出真诚、友好和专业的态度。倾听客户的需求&#xff0c;并给予针对性的建议&a…

降Compose十八掌之『见龙在田』| Modifier

公众号「稀有猿诉」 原文链接 降Compose十八掌之『见龙在田』| Modifier 通过前面的文章我们学会了如何使用元素来构建和填充我们的UI页面&#xff0c;但这只完成了一半&#xff0c;元素还需要装饰&#xff0c;以及进行动画和事件响应&#xff0c;这才能生成完整的UI。这…

洛谷 数学进制 7.9

P1100 高低位交换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码一 #include<bits/stdc.h> using namespace std; typedef long long ll; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)const ll N1e510; char a[N];int main() {IOS;ll a;int b[32]…

关于Qt模型插入最后一行数据中存在未填满的项,点击导致崩溃的解决办法

在使用Qt模型视图框架的时候&#xff0c;你可能会遇见这种情况&#xff1a;给QTableView设置设置模型的时候&#xff0c;网模型里面插入数据&#xff0c;因为数据是一行一行插入的&#xff0c;即要使用model的appandRow函数&#xff0c;但有时候最后一行数据没有填满一行&#…

Java面试八股之MySQL索引B+树、全文索引、哈希索引

MySQL索引B树、全文索引、哈希索引 注意&#xff1a;B树中B不是代表二叉树&#xff08;binary&#xff09;&#xff0c;而是代表平衡&#xff08;balance&#xff09;&#xff0c;因为B树是从最早的平衡二叉树演化而来&#xff0c;但是B树不是一个二叉树。 B树的高度一般在2~…