TensorFlow 入门指南:Eager Execution 模式实战

TensorFlow 入门指南:Eager Execution 模式实战

training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

概述

本文基于 Google Cloud Platform 的机器学习课程内容,重点讲解 TensorFlow 的 Eager Execution 模式。我们将通过实际代码示例,帮助读者理解 TensorFlow 的两种执行模式差异,并掌握在 Eager 模式下进行张量操作和自动微分的基本技能。

TensorFlow 执行模式对比

Eager Execution(即时执行模式)

Eager 模式是 TensorFlow 2.0 的默认执行方式,其特点是:

  • 操作立即执行并返回具体值
  • 代码直观,易于调试
  • 适合快速原型开发
  • 减少了样板代码量

启用方式简单,只需在代码开头添加 tf.enable_eager_execution() 即可。

Graph Execution(图执行模式)

图模式是 TensorFlow 1.x 的默认执行方式,特点是:

  • 操作构建符号计算图,不立即执行
  • 需要在 tf.Session() 上下文中运行
  • 代码相对不直观
  • 能进行性能优化
  • 适合分布式训练和生产环境

基础张量操作

张量创建与加法

import tensorflow as tf
tf.enable_eager_execution()

a = tf.constant([5, 3, 8], dtype=tf.int32)
b = tf.constant([3, -1, 2], dtype=tf.int32)
c = tf.add(a, b)  # 显式加法操作
print(c)  # 输出张量值、形状和数据类型

运算符重载

TensorFlow 重载了基本运算符,使代码更简洁:

c = a + b  # 等价于 tf.add(a,b)
print(c)

NumPy 互操作性

TensorFlow 操作可以接受 Python 原生类型和 NumPy 数组作为输入:

import numpy as np

# 不同类型输入示例
a_py = [1,2]  # Python 列表
b_py = [3,4]  
a_np = np.array([1,2])  # NumPy 数组
b_np = np.array([3,4])
a_tf = tf.constant([1,2], dtype=tf.int32)  # TF 张量
b_tf = tf.constant([3,4], dtype=tf.int32)

# 转换示例
print(a_tf.numpy())  # 将TF张量转为NumPy数组

线性回归实战

数据集准备

我们模拟线性函数 y = 2x + 10:

X = tf.constant([1,2,3,4,5,6,7,8,9,10], dtype=tf.float32)
Y = 2 * X + 10

损失函数实现

使用均方误差(MSE)作为损失函数:

def loss_mse(X, Y, w0, w1):
    Y_hat = w0 * X + w1
    return tf.reduce_mean((Y_hat - Y)**2)

自动微分

TensorFlow 的自动微分功能简化了梯度计算:

grad_f = tf.contrib.eager.gradients_function(loss_mse, params=[2, 3])

训练循环

完整训练过程示例:

STEPS = 1000
LEARNING_RATE = .02

# 初始化权重
w0 = tf.constant(0.0, dtype=tf.float32)
w1 = tf.constant(0.0, dtype=tf.float32)

for step in range(STEPS):
    # 1. 计算梯度
    d_w0, d_w1 = grad_f(X, Y, w0, w1)
    
    # 2. 更新权重
    w0 = w0 - LEARNING_RATE * d_w0
    w1 = w1 - LEARNING_RATE * d_w1
    
    # 3. 定期打印损失
    if step % 100 == 0:
        print(f"STEP: {step} MSE: {loss_mse(X, Y, w0, w1)}")

# 输出最终结果
print(f"w0: {float(w0):.4f}, w1: {float(w1):.4f}")

进阶:非线性函数拟合

尝试拟合更复杂的非线性函数,如 y = xe^{-x^2}:

X = tf.constant(np.linspace(0,2,1000), dtype=tf.float32)
Y = X * np.exp(-X**2)

# 构建特征
def make_features(X):
    features = [X, tf.ones_like(X)]  # 线性特征
    features.append(X**2)  # 添加二次项
    features.append(X**3)  # 添加三次项
    return tf.stack(features, axis=1)

# 训练过程类似线性回归,但使用更多特征

总结

本文介绍了 TensorFlow Eager Execution 模式的核心概念和基本用法,通过线性回归和非线性函数拟合的实例,展示了如何利用 TensorFlow 的自动微分功能实现模型训练。Eager 模式降低了 TensorFlow 的学习门槛,使开发者能够更直观地构建和调试模型。

对于生产环境,当性能成为关键考量时,可以考虑切换到 Graph 模式以获得更好的优化效果。但随着 TensorFlow 2.0 的推出,Eager 模式已成为默认选择,并在性能上做了大量优化,使其在大多数场景下都能满足需求。

training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

包楚多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值