python实现tensorflow2.0的常见优化器

本文介绍了TensorFlow2.0中几种常见的优化算法实现,包括SGD(梯度下降)、Momentum(动量优化)、Adagrad(自适应学习率)、RMSProp(均方根传播)以及Adam(自适应矩估计)。通过Python代码展示了这些优化器的工作原理,并用实例说明它们在模型训练过程中的应用。每个优化器的实现都利用了tf.GradientTape进行自动求导,以适应不同场景下的参数更新策略。

tensorlow2.0中的常见优化器如下:
在这里插入图片描述
其中,adam是最常使用的,比如esmm论文中使用。
下面通过python实现几种常见的优化器。其中使用了tensorflow2.0 的tf.GradientTape来自动求微分。

数据集构造

build data

import tensorflow as tf
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
x = np.arange(-3, 7, 0.1)
y = np.array([0.5 * _ * _ - 2 * _ + 0.5  for _ in x])
sns.lineplot(x, y, markers=True, dashes=False)
plt.grid(True)

在这里插入图片描述

x = tf.convert_to_tensor(x)
y = tf.convert_to_tensor(y)

SGD算法

  1. 计算损失函数(loss function, cost function)
  2. 计算损失函数关于模型参数θ\thetaθ的局部梯度【先求导数,然后带入点坐标】
  3. 沿着梯度方向进行下一次的迭代
  4. 知道梯度为0时,就达到了误差函数的最小值
    在这里插入图片描述
    在梯度下降中,一个最重要的参数就是学习率lr。
    如果学习率太小,模型需要多次迭代才能达到最小值点,导致模型的训练时间变长;
    在这里插入图片描述

如果学习率太大,模型在更新过程中,比较震荡,有可能会跳过最小值
在这里插入图片描述

# 损失函数

def sgd(a, b ,x, y, lr=0.001):
    with tf.GradientTape(persistent=True) as t1, tf.GradientTape(persistent=True) as t2:
        t1.watch(a)
        t2.watch(b)
        y_pred = tf.math.add(tf.math.multiply(a, tf.math.pow(x, 2)), tf.math.multiply(b, tf.math.pow(x, 1)))
        loss = tf.keras.losses.MeanSquaredError()(y, y_pred)
    dl_da = t1.gradient(loss, a)
    dl_db = t2.gradient(loss, b)

    a = a - lr * dl_da
    b = b - lr * dl_db
    return a, b 

def train(x, y):
    # 定义训练超参数
    MAX_ITER = 500
    TOL = 1e-5
    
    # 初始化模型的参数值
    a = tf.random.normal(shape = (1, ), dtype=tf.dtypes.float64)
    b = tf.random.normal(shape = (1, ), dtype=tf.dtypes.float64)
    cost_value_list = []
    print('初始值为a={}, b={}'.format(a, b))
    
    it = 0
    patience = 0
    while it < MAX_ITER: 
        y_pred = tf.math.add(tf.math.multiply(a, tf.math.pow(x, 2)), tf.math.multiply(b, tf.math.pow(x, 1)))
        pre_cost = tf.keras.losses.MeanSquaredError()(y, y_pred)
        a, b = sgd(a, b, x, y)
        y_pred = tf.math.add(tf.math.multiply(a, tf.math.pow(x, 2)), tf.math.multiply(b, tf.math.pow(x, 1)))
        post_cost = tf.keras.losses.MeanSquaredError()(y, y_pred)
        cost_value_list.append(post_cost)
        cost_delta = abs(pre_cost - post_cost)
        if cost_delta < TOL:
            patience += 1
        if patience == 3:
            break
            
        it += 1
    
    return a, b, cost_value_list
        
a, b, cost_list = train(x, y)
print('最终值为a={}, b={}'.format(a, b))
cost_list = [_.numpy() for _ in cost_list]
sns.lineplot(range(len(cost_list)), cost_list)
plt.grid(True)

在这里插入图片描述

动量优化Momentum

梯度下降算法的变量更行公式只是减去损失函数J(θ)J(\theta)J(

### 回答1: PythonTensorFlow 2.0 Demo是一个展示和演示TensorFlow 2.0的示例程序。TensorFlow是一个开源的机器学习框架,它提供了丰富的工具和库,用于构建和训练各种人工智能模型。 TensorFlow 2.0 Demo可以帮助我们了解如何使用Python编写TensorFlow代码,构建和训练模型。在Demo中,我们可以看到一些预先定义好的模型,如卷积神经网络(CNN)和循环神经网络(RNN),以及一些常见的数据集,如MNIST手写数字数据集。 Demo中的代码可以帮助我们学习如何使用TensorFlow 2.0的新特性,如Eager Execution和tf.keras API。Eager Execution使得TensorFlow代码更加直观和易于调试,而tf.keras API提供了一种方便的方式来定义和训练神经网络模型。 另外,Demo还可以帮助我们了解TensorFlow 2.0的一些新功能,如动态图(Dynamic Graph)和AutoGraph。动态图允许我们动态地构建和修改计算图,而AutoGraph则可以将Python代码自动转化为高效的TensorFlow计算图。 通过运行TensorFlow 2.0 Demo,我们可以学习到如何使用PythonTensorFlow构建和训练机器学习模型,并熟悉TensorFlow 2.0的一些新特性和功能。这对于想要进一步了解和掌握深度学习和人工智能的人来说非常有帮助。 ### 回答2Python TensorFlow 2.0 Demo 是一个用于展示 TensorFlow 2.0 版本的 Python 示例的演示程序。它旨在向用户展示如何使用 TensorFlow 2.0 进行机器学习和深度学习任务。 Python TensorFlow 2.0 Demo 演示了 TensorFlow 2.0 在数据处理、模型构建和训练等方面的功能。通过这个示例,用户可以了解 TensorFlow 2.0 的主要特点和用法。 在数据处理方面,Python TensorFlow 2.0 Demo 提供了许多常用的数据处理功能,例如加载数据集、数据集预处理、数据增强等。这些功能可以帮助用户准备数据用于模型的训练和评估。 在模型构建方面,Python TensorFlow 2.0 Demo 展示了如何使用 TensorFlow 2.0 构建各种类型的神经网络模型,包括卷积神经网络(CNN)、循环神经网络(RNN)和变分自编码器(VAE)等。用户可以学习如何定义模型的结构和参数,并将其编译为可训练的 TensorFlow 图。 在模型训练方面,Python TensorFlow 2.0 Demo 展示了如何使用 TensorFlow 2.0 进行模型的训练和评估。用户可以学习如何选择合适的优化器、损失函数和评估指标,并使用训练数据集对模型进行训练,并使用测试数据集对其进行评估。 总而言之,Python TensorFlow 2.0 Demo 可以帮助用户了解并学习如何使用 TensorFlow 2.0 进行机器学习和深度学习任务。通过这个演示程序,用户可以掌握 TensorFlow 2.0 的基本用法,并在实践中探索更多高级的功能和技巧。 ### 回答3: Python TensorFlow 2.0 是一个强大的深度学习框架,可以用于构建和训练各种机器学习模型。使用 Python TensorFlow 2.0,可以轻松地创建端到端的模型,处理大规模的数据集,以及进行模型的训练和推理。 在 TensorFlow 2.0 中,与之前版本相比,有一些重要的改进和新功能。其中最重要的是 Eager Execution(即动态图执行),它使得在 TensorFlow 中编写代码更加直观和简单,可以立即获得结果的反馈。另外,TensorFlow 2.0 还引入了一种新的高级 API——Keras,它提供了更简洁、易用的方式来定义和训练神经网络模型。 使用 TensorFlow 2.0 可以轻松地构建各种机器学习模型。例如,可以使用 TensorFlow 2.0 构建一个图像分类模型,对图像进行分类。首先,需要准备训练集和测试集的图像数据,然后使用 TensorFlow 2.0 的 Keras API 构建一个卷积神经网络模型。接下来,编写代码对模型进行训练,并使用测试集进行验证。通过迭代和调整模型的参数,可以获得更好的分类效果。 在实际使用 TensorFlow 2.0 进行机器学习任务时,通常还会使用一些其他的库和工具来辅助。例如,可以使用 NumPy 来处理和转换数据,使用 Matplotlib 来可视化结果,使用 Pandas 来进行数据处理和分析等等。同时,也可以利用 TensorFlow 的高级特性,如分布式训练和自定义损失函数等,来进一步提升模型的性能和效果。 总而言之,Python TensorFlow 2.0 是一个功能强大、易用的深度学习框架,可用于构建和训练各种机器学习模型。通过灵活的应用和结合其他工具和库,可以实现各式各样的机器学习任务,并获得良好的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值