TensorFlow 2基本功能和示例代码

TensorFlow 2.x 是 Google 开源的一个深度学习框架,广泛用于构建和训练机器学习模型。

一、核心特点

1. Keras API 集成

TensorFlow 2.x 将 Keras 作为其核心 API,简化了模型的构建和训练流程。Keras 提供了高层次的 API,易于使用和理解。

import tensorflow as tf
from tensorflow.keras import layers

# 使用 Keras Sequential API 构建模型
model = tf.keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(784,)),
    layers.Dense(10, activation='softmax')
])

model.summary()
2. 函数式 API 和子类化 API

除了 Keras 的序列化模型 API,TensorFlow 2.x 还支持函数式 API 和子类化 API,允许用户构建复杂的模型结构。

函数式 API 示例:

inputs = tf.keras.Input(shape=(784,))
x = layers.Dense(64, activation='relu')(inputs)
outputs = layers.Dense(10, activation='softmax')(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)

model.summary()

子类化 API 示例:

class MyModel(tf.keras.Model):
    def __init__(self):
        super(MyModel, self).__init__()
        self.dense1 = layers.Dense(64, activation='relu')
        self.dense2 = layers.Dense(10, activation='softmax')

    def call(self, inputs):
        x = self.dense1(inputs)
        return self.dense2(x)

model = MyModel()
model(tf.zeros((1, 784)))
3. 即时执行模式

TensorFlow 2.x 默认启用 Eager Execution,允许用户逐行运行代码和立即查看结果,使得调试和模型开发更加直观和灵活。

# 启用 Eager Execution
tf.config.run_functions_eagerly(True)

# 示例
x = tf.constant([[1.0, 2.0], [3.0, 4.0]])
y = tf.constant([[5.0, 6.0], [7.0, 8.0]])
z = tf.matmul(x, y)
print(z)
4. 兼容性工具

TensorFlow 2.x 提供了兼容性工具,如 tf.compat.v1,帮助用户迁移现有的 TensorFlow 1.x 代码到 TensorFlow 2.x。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

# TensorFlow 1.x 代码
x = tf.placeholder(tf.float32, shape=(None, 784))
y = tf.placeholder(tf.float32, shape=(None, 10))
5. 分布式训练

TensorFlow 2.x 提供了简化的分布式训练 API,如 tf.distribute.Strategy,支持在多 GPU、多 TPU 和分布式环境下训练模型。

strategy = tf.distribute.MirroredStrategy()

with strategy.scope():
    model = tf.keras.Sequential([
        layers.Dense(64, activation='relu', input_shape=(784,)),
        layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')
6. TensorFlow Hub 和 TensorFlow Datasets

提供了预训练模型和数据集库,帮助用户更快速地构建和训练模型。

import tensorflow_hub as hub
import tensorflow_datasets as tfds

# 使用 TensorFlow Hub 加载预训练模型
model = tf.keras.Sequential([
    hub.KerasLayer("https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4", input_shape=(224, 224, 3)),
    layers.Dense(10, activation='softmax')
])

# 使用 TensorFlow Datasets 加载数据集
dataset, info = tfds.load('mnist', with_info=True, as_supervised=True)
train_dataset, test_dataset = dataset['train'], dataset['test']
7. XLA 编译器

TensorFlow 2.x 支持 XLA(Accelerated Linear Algebra)编译器,优化计算图,提高性能。

# 启用 XLA 编译器
tf.config.optimizer.set_jit(True)
8. 硬件加速

支持 GPU 和 TPU 加速,提升训练和推理效率。

# 检查 GPU 是否可用
if tf.config.list_physical_devices('GPU'):
    print("GPU is available")
else:
    print("GPU is not available")

二、模型构建

1. Keras Sequential API

用于构建顺序模型,适合堆叠层的模型结构。

model = tf.keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(784,)),
    layers.Dense(10, activation='softmax')
])
2. Keras Functional API

用于构建复杂的模型结构,如多输入、多输出模型。

inputs = tf.keras.Input(shape=(784,))
x = layers.Dense(64, activation='relu')(inputs)
outputs = layers.Dense(10, activation='softmax')(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
3. 子类化 API

允许用户定义自定义层和模型。

class MyModel(tf.keras.Model):
    def __init__(self):
        super(MyModel, self).__init__()
        self.dense1 = layers.Dense(64, activation='relu')
        self.dense2 = layers.Dense(10, activation='softmax')

    def call(self, inputs):
        x = self.dense1(inputs)
        return self.dense2(x)

model = MyModel()

三、训练与评估

1. 训练模型

使用 model.compile 配置训练参数,使用 model.fit 训练模型。

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(train_dataset, epochs=5)
2. 评估模型

使用 model.evaluate 评估模型性能。

loss, accuracy = model.evaluate(test_dataset)
print(f"Loss: {loss}, Accuracy: {accuracy}")

四、其他功能

1. TensorFlow Lite

TensorFlow 的轻量级版本,适用于移动和嵌入式设备。

converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

with open('model.tflite', 'wb') as f:
    f.write(tflite_model)
2. TensorFlow Hub

一个库,旨在促进机器学习模型的可重用模块的发布、发现和使用。

model = tf.keras.Sequential([
    hub.KerasLayer("https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4", input_shape=(224, 224, 3)),
    layers.Dense(10, activation='softmax')
])
3. TensorFlow Extended(TFX)

一个基于 TensorFlow 的通用机器学习平台,包括 TensorFlow Transform、TensorFlow Model Analysis 和 TensorFlow Serving 等开源库。

# 示例代码需要结合 TFX 库使用
4. TensorBoard

一套可视化工具,支持对 TensorFlow 程序的理解、调试和优化。

tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir="./logs")
model.fit(train_dataset, epochs=5, callbacks=[tensorboard_callback])

五、综合应用示例

1. 模型构建

问题: 如何使用TensorFlow 2.x构建一个简单的全连接神经网络(MLP)?

代码示例:

import tensorflow as tf
from tensorflow.keras import layers, models

# 构建模型
model = models.Sequential([
    layers.Dense(64, activation='relu', input_shape=(784,)),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 打印模型结构
model.summary()
2. 数据预处理

问题: 如何使用TensorFlow 2.x对MNIST数据集进行预处理?

代码示例:

import tensorflow as tf

# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

# 归一化数据
x_train = x_train.reshape(-1, 784).astype('float32') / 255.0
x_test = x_test.reshape(-1, 784).astype('float32') / 255.0

# 将标签转换为整数
y_train = y_train.astype('int32')
y_test = y_test.astype('int32')
3. 模型训练

问题: 如何使用TensorFlow 2.x训练一个模型?

代码示例:

# 训练模型
history = model.fit(x_train, y_train, epochs=5, batch_size=32, validation_split=0.2)

# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc}")
4. 模型保存与加载

问题: 如何保存和加载TensorFlow 2.x模型?

代码示例:

# 保存模型
model.save('my_model.h5')

# 加载模型
loaded_model = tf.keras.models.load_model('my_model.h5')

# 使用加载的模型进行预测
predictions = loaded_model.predict(x_test)
5. 自定义损失函数

问题: 如何在TensorFlow 2.x中自定义损失函数?

代码示例:

import tensorflow as tf

# 自定义损失函数
def custom_loss(y_true, y_pred):
    return tf.reduce_mean(tf.square(y_true - y_pred))

# 编译模型时使用自定义损失函数
model.compile(optimizer='adam', loss=custom_loss)
6. 使用回调函数

问题: 如何在TensorFlow 2.x中使用回调函数?

代码示例:

# 定义回调函数
callbacks = [
    tf.keras.callbacks.EarlyStopping(patience=2, monitor='val_loss'),
    tf.keras.callbacks.ModelCheckpoint(filepath='best_model.h5', save_best_only=True)
]

# 训练模型时使用回调函数
model.fit(x_train, y_train, epochs=10, validation_split=0.2, callbacks=callbacks)
7. 使用TensorBoard

问题: 如何在TensorFlow 2.x中使用TensorBoard进行可视化?

代码示例:

# 定义TensorBoard回调
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='./logs')

# 训练模型时使用TensorBoard回调
model.fit(x_train, y_train, epochs=5, validation_split=0.2, callbacks=[tensorboard_callback])
8. 使用GPU加速

问题: 如何在TensorFlow 2.x中使用GPU加速训练?

代码示例:

# 检查是否有GPU可用
if tf.config.list_physical_devices('GPU'):
    print("GPU is available")
else:
    print("GPU is not available")

# 使用GPU进行训练
with tf.device('/GPU:0'):
    model.fit(x_train, y_train, epochs=5, batch_size=32)
9. 模型微调

问题: 如何在TensorFlow 2.x中对预训练模型进行微调?

代码示例:

# 加载预训练模型
base_model = tf.keras.applications.MobileNetV2(input_shape=(224, 224, 3), include_top=False, weights='imagenet')

# 冻结预训练模型的层
base_model.trainable = False

# 添加自定义层
model = tf.keras.Sequential([
    base_model,
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=32)
10. 分布式训练

问题: 如何在TensorFlow 2.x中进行分布式训练?

代码示例:

# 设置分布式策略
strategy = tf.distribute.MirroredStrategy()

# 在策略范围内构建和编译模型
with strategy.scope():
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(64, activation='relu', input_shape=(784,)),
        tf.keras.layers.Dense(64, activation='relu'),
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=32)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记忆化搜索(5题)

是什么? 是一个带备忘录的递归 如何实现记忆化搜索 1.添加一个备忘录(建立一个可变参数和返回值的映射关系) 2.递归每次返回的时候把结果放到备忘录里 3.在每次进入递归的时候往备忘录里面看看。 目录 1.斐波那契数列 2.不同路径 3.最…

Redis_Redission的入门案例、多主案例搭建、分布式锁进行加锁、解锁底层源码解析

目录 ①. Redis为什么选择单线程? ②. 既然单线程这么好,为什么逐渐又加入了多线程特性? ③. redis6的多线程和IO多路复用入门篇 ④. Redis6.0默认是否开启了多线程? ⑤. REDIS多线程引入总结 ①. Redis为什么选择单线程? ①…

本地运行大模型效果及配置展示

电脑上用ollama安装了qwen2.5:32b,deepseek-r1:32b,deepseek-r1:14b,llama3.1:8b四个模型,都是Q4_K_M量化版。 运行过程中主要是cpu和内存负载比较大,qwen2.5:32b大概需要22g,deepseek-r1:32b类…

新一代搜索引擎,是 ES 的15倍?

Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码…

从0开始,来看看怎么去linux排查Java程序故障

一,前提准备 最基本前提:你需要有liunx环境,如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后,你还需要安装jdk和配置环境变量 1. 安装JDK(以OpenJDK 17为例) 下载JDK…

MFC开发,给对话框添加垂直滚动条并解决鼠标滚动响应的问题

无论在使用QT或者MFC进行界面开发时,都会出现在一个对话框里面存在好多的选项,导致对话框变得非常长或者非常大,就会显现的不美观,在这种情况下通常是添加一个页面的滚动条来解决这个问题,下面我们就来介绍给MFC的对话…

(二)QT——按钮小程序

目录 前言 按钮小程序 1、步骤 2、代码示例 3、多个按钮 ①信号与槽的一对一 ②多对一(多个信号连接到同一个槽) ③一对多(一个信号连接到多个槽) 结论 前言 按钮小程序 Qt 按钮程序通常包含 三个核心文件: m…

QT简单实现验证码(字符)

0) 运行结果 1) 生成随机字符串 Qt主要通过QRandomGenerator类来生成随机数。在此之前的版本中,qrand()函数也常被使用,但从Qt 5.10起,推荐使用更现代化的QRandomGenerator类。 在头文件添加void generateRandomNumb…

受击反馈HitReact、死亡效果Death Dissolve、Floating伤害值Text(末尾附 客户端RPC )

受击反馈HitReact 设置角色受击标签 (GameplayTag基本了解待补充) 角色监听标签并设置移动速度 创建一个受击技能,并应用GE 实现设置角色的受击蒙太奇动画 实现角色受击时播放蒙太奇动画,为了保证通用性,将其设置为一个函数,并…

C++,STL 命名空间:理解 std 的作用、规范与陷阱

文章目录 引言一、为什么需要 std 命名空间?二、std 命名空间的组成三、使用 std 命名空间的正确姿势1. 显式作用域限定2. 谨慎使用 using 声明3. 头文件中禁止 using namespace std 四、常见陷阱与解决方案陷阱 1:与第三方库命名冲突陷阱 2:…

第11章:根据 ShuffleNet V2 迁移学习医学图像分类任务:甲状腺结节检测

目录 1. Shufflenet V2 2. 甲状腺结节检测 2.1 数据集 2.2 训练参数 2.3 训练结果 2.4 可视化网页推理 3. 下载 1. Shufflenet V2 shufflenet v2 论文中提出衡量轻量级网络的性能不能仅仅依靠FLOPs计算量,还应该多方面的考虑,例如MAC(memory acc…

【ArcGIS遇上Python】批量提取多波段影像至单个波段

本案例基于ArcGIS python,将landsat影像的7个波段影像数据,批量提取至单个波段。 相关阅读:【ArcGIS微课1000例】0141:提取多波段影像中的单个波段 文章目录 一、数据准备二、效果比对二、python批处理1. 编写python代码2. 运行代码一、数据准备 实验数据及完整的python位…

HTB:Administrator[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…

vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列

最近在家过年闲的没事,于是研究起深度学习开发工具链的配置和安装,之前欲与天公试比高,尝试在win上用vscodecuda11.6vs2019的cl编译器搭建cuda c编程环境,最后惨败,沦为笑柄,痛定思痛,这次直接和…

亚博microros小车-原生ubuntu支持系列:17 gmapping

前置依赖 先看下亚博官网的介绍 Gmapping简介 gmapping只适用于单帧二维激光点数小于1440的点,如果单帧激光点数大于1440,那么就会出【[mapping-4] process has died】 这样的问题。 Gmapping是基于滤波SLAM框架的常用开源SLAM算法。 Gmapping基于RBp…

FreeRTOS从入门到精通 第十六章(任务通知)

参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、任务通知简介 1、概述 (1)任务通知顾名思义是用来通知任务的,任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 (2&#…

数据结构选讲 (更新中)

参考 smWCDay7 数据结构选讲2 by yyc 。 可能会补充的: AT_cf17_final_j TreeMST 的 F2 Boruvka算法 目录 AT_cf17_final_j Tree MSTP5280 [ZJOI2019] 线段树 AT_cf17_final_j Tree MST link 题意 给定一棵 n n n 个点的树,点有点权 w i w_i wi​&am…

【01】共识机制

BTF共识 拜占庭将军问题 拜占庭将军问题是一个共识问题 起源 Leslie Lamport在论文《The Byzantine Generals Problem》提出拜占庭将军问题。 核心描述 军中可能有叛徒,却要保证进攻一致,由此引申到计算领域,发展成了一种容错理论。随着…

春晚舞台上的人形机器人:科技与文化的奇妙融合

文章目录 人形机器人Unitree H1的“硬核”实力传统文化与现代科技的创新融合网友热议与文化共鸣未来展望:科技与文化的更多可能结语 2025 年央视春晚的舞台,无疑是全球华人目光聚焦的焦点。就在这个盛大的舞台上,一场名为《秧BOT》的创意融合…

.NET Core缓存

目录 缓存的概念 客户端响应缓存 cache-control 服务器端响应缓存 内存缓存(In-memory cache) 用法 GetOrCreateAsync 缓存过期时间策略 缓存的过期时间 解决方法: 两种过期时间策略: 绝对过期时间 滑动过期时间 两…