python3+TensorFlow 2.x 基础学习(一)

目录

[TensorFlow 2.x基础](#TensorFlow 2.x基础)

[1、安装 TensorFlow 2.x](#1、安装 TensorFlow 2.x)

[2、TensorFlow 2.x 基础概念](#2、TensorFlow 2.x 基础概念)

[2、1 Eager Execution](#2、1 Eager Execution)

[2、2 TensorFlow 张量(Tensor)](#2、2 TensorFlow 张量(Tensor))

3、使用Keras构建神经网络模型

[3、1 构建 Sequential 模型](#3、1 构建 Sequential 模型)

[3、2 编译模型](#3、2 编译模型)

1、Optimizer(优化器)

2、Loss(损失函数)

3、Metrics(评估指标)

[3、3 训练模型](#3、3 训练模型)

[3、4 评估模型](#3、4 评估模型)

[3、5 预测](#3、5 预测)

[4、使用 TensorFlow 2.x 实现自定义训练循环](#4、使用 TensorFlow 2.x 实现自定义训练循环)

[5、TensorFlow 2.x 高级功能](#5、TensorFlow 2.x 高级功能)

[5、1 TensorFlow Dataset(数据管道)](#5、1 TensorFlow Dataset(数据管道))

[5、2 TensorFlow Serving](#5、2 TensorFlow Serving)

[5、3 TensorFlow Lite(模型优化和部署)](#5、3 TensorFlow Lite(模型优化和部署))

总结


TensorFlow 2.x基础

TensorFlow 2.x 是一个广泛使用的深度学习框架,特别适用于神经网络的构建和训练。与之前的版本相比,TensorFlow 2.x 提供了更加简洁和易用的 API,集成了 Keras 作为高层 API,并支持动态图(Eager Execution)。

1、安装 TensorFlow 2.x

首先,确保你已经安装了 TensorFlow 2.x。(Python 3.11.4)可以通过以下命令来安装:pip install tensorflow 查看:pip show tensorflow

Name: tensorflow

Version: 2.18.0

2、TensorFlow 2.x 基础概念

2、1 Eager Execution

TensorFlow 2.x 默认启用 Eager Execution,这意味着操作是即时执行的,计算结果会立刻返回,而不需要构建图。这样使得调试更加容易,代码更具可读性。

python 复制代码
import tensorflow as tf

# 启用 Eager Execution
tf.compat.v1.enable_eager_execution()

# 创建一个张量并执行操作
a = tf.constant([1, 2, 3])
b = tf.constant([4, 5, 6])

c = a + b  # 即时执行
print(c)  # 输出结果: tf.Tensor([5 7 9], shape=(3,), dtype=int32)

2、2 TensorFlow 张量(Tensor)

TensorFlow 的核心数据结构是张量(tensor)。张量类似于 NumPy 数组,可以存储数据并在 TensorFlow 图中传递。你可以创建不同类型的张量:

python 复制代码
# 创建张量
t1 = tf.constant([1, 2, 3])  # 一维张量
t2 = tf.constant([[1, 2], [3, 4]])  # 二维张量
# 张量操作
t3 = t1 + 5  # 所有元素加5
print(t3)  # tf.Tensor([6 7 8], shape=(3,), dtype=int32)

3、使用Keras构建神经网络模型

TensorFlow 2.x 中,Keras 成为默认的高级API。通过Keras可以快速构建和训练神经网络。

3、1 构建 Sequential 模型

tf.keras.models.Sequential 是TensorFlow Keras API 中用于构建模型的一种简单方式。它允许你按顺序堆叠多个层(layers),以构建深度学习模型,可以通过 add 方法向模型中添加层。常用的层包括全连接层(Dense)、卷积层(Conv2D)、池化层(MaxPooling2D)等

python 复制代码
from tensorflow.keras import layers, models
# 创建一个简单的 Sequential 模型
model = models.Sequential([
    #有 128 个神经元,激活函数为 ReLU
    layers.Dense(128, activation='relu', input_shape=(784,)),  # 输入层784 维的向量
    layers.Dropout(0.2),  # Dropout 层丢弃 20% 的神经元,防止过拟合
    layers.Dense(10, activation='softmax')  # 输出层10 个神经元,激活函数为 softmax用于多分类
])

# 打印模型概述
model.summary()

3、2 编译模型

在构建模型后,需要编译它,选择优化器、损失函数和评估指标:在深度学习中,optimizer、loss 和 metrics 是模型编译时的重要参数。下面将详细解释这三个参数的含义及其在模型训练中的作用。

1、Optimizer(优化器)

optimizer='adam' 指定了使用 Adam 优化器。优化器的主要作用是更新模型的权重,以最小化损失函数。Adam 优化器结合了动量和自适应学习率的优点,通常在许多任务中表现良好。

Adam 优化器的特点:自适应学习率:根据每个参数的历史梯度动态调整学习率。适合大规模数据和高维参数。通常收敛速度快,效果好。

2、Loss(损失函数)

loss='sparse_categorical_crossentropy' 指定了使用稀疏分类交叉熵作为损失函数。损失函数用于衡量模型预测值与真实值之间的差距。

稀疏分类交叉熵的特点:适用于多分类问题,且标签是整数形式(而不是独热编码)。计算方式是对每个样本的预测概率与真实标签的交叉熵进行求和。适合处理类别较多的分类问题。

3、Metrics(评估指标)

metrics=['accuracy'] 指定了在训练和评估过程中使用的评估指标。在这里,使用的是准确率(accuracy它表示模型预测正确的样本占总样本的比例。

**准确率的特点:**简单易懂,常用于分类问题。适合类别均衡的数据集,但在类别不均衡时可能会产生误导。

cpp 复制代码
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

3、3 训练模型

训练模型时,需要指定训练数据、标签、批量大小、训练的轮数(epochs)等参数:

python 复制代码
# 假设我们已经加载了 MNIST 数据集
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

# 预处理数据
train_images = train_images.reshape((train_images.shape[0], 784)).astype('float32') / 255
test_images = test_images.reshape((test_images.shape[0], 784)).astype('float32') / 255

# 训练模型
history = model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_data=(test_images, test_labels))
  • epochs:表示整个训练数据集将被训练的次数。设置为5模型将遍历整个训练数据集5次

  • batch_size :表示每次迭代中用于训练的样本数量。选择合适的 batch_size对模型的训练速度和性能有很大影响。常见的选择有32、64、128等,具体选择可以根据你的数据集大小和计算资源来决定。

3、4 评估模型

训练完成后,可以通过 evaluate 函数来评估模型在测试集上的表现:

python 复制代码
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {test_acc}')

model.evaluate(test_images, test_labels):这个函数用于评估模型在测试数据集上的表现。
test_images 是测试集的输入数据,通常是图像数据。
test_labels 是对应的标签,表示每个测试样本的真实类别。

该函数返回两个值:test_loss 和 test_acc,分别表示测试集上的损失值和准确率。print(f'Test accuracy: {test_acc}'):

准确率 (Accuracy) :正确预测的样本占总样本的比例。
精确率 (Precision) :正确预测为正类的样本占所有预测为正类的样本的比例。
召回率 (Recall) :正确预测为正类的样本占所有实际为正类的样本的比例。
F1-score:精确率和召回率的调和平均数。

3、5 预测

使用训练好的模型进行预测:

python 复制代码
predictions = model.predict(test_images)
print(predictions[0])  # 打印第一个测试样本的预测结果

4、使用 TensorFlow 2.x 实现自定义训练循环

虽然 Keras 提供了便捷的接口,但有时我们需要更多控制,特别是需要自定义训练循环时。在 TensorFlow 2.x 中,你可以轻松实现自定义的训练循环。

python 复制代码
# 自定义训练循环
for epoch in range(5):  # 训练5轮
    for step, (images, labels) in enumerate(train_dataset):
        with tf.GradientTape() as tape:
            predictions = model(images, training=True)
            loss = tf.losses.sparse_categorical_crossentropy(labels, predictions)
        
        # 计算梯度并更新模型参数
        grads = tape.gradient(loss, model.trainable_variables)
        optimizer.apply_gradients(zip(grads, model.trainable_variables))

5、TensorFlow 2.x 高级功能

5、1 TensorFlow Dataset(数据管道)

tf.data API 用于构建高效的数据管道,尤其是在处理大规模数据时。可以创建自定义的数据集、批处理和预处理操作。

python 复制代码
# 加载数据集并进行预处理
train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
train_dataset = train_dataset.shuffle(10000).batch(64)

# 迭代数据
for images, labels in train_dataset:
    print(images.shape, labels.shape)

tf.data.Dataset.from_tensor_slices((train_images, train_labels)) :函数将训练图像和标签转换为一个 tf.data.Dataset 对象。train_images 是一个包含训练图像的张量,train_labels 是对应的标签这个方法会将每个图像和其对应的标签配对,形成一个数据集。

train_dataset.shuffle(10000):这个方法用于随机打乱数据集中的样本,以提高模型的泛化能力。参数 10000 指定了缓冲区的大小,表示在打乱时会随机选择最多10000个样本进行打乱。这个值可以根据你的数据集大小进行调整。

**batch(64):**这个方法将数据集分成多个批次,每个批次包含64个样本。在训练过程中,模型会一次处理一个批次的数据,这样可以提高训练效率并减少内存占用。

5、2 TensorFlow Serving

TensorFlow Serving 是一个为生产环境提供的高效部署服务,它可以帮助你在服务器端进行实时的模型推理。你可以通过 TensorFlow Serving 部署训练好的模型,并通过 API 进行访问。

python 复制代码
# 启动 TensorFlow Serving
docker run -p 8501:8501 --name=tf_serving_mnist \
  --mount type=bind,source=/path/to/saved_model,destination=/models/mnist \
  -e MODEL_NAME=mnist -t tensorflow/serving

5、3 TensorFlow Lite(模型优化和部署)

TensorFlow Lite 允许将训练好的模型转换为适用于移动设备和边缘设备的格式。通过量化和剪枝等技术,TensorFlow Lite 可以显著减少模型的大小和计算需求。

python 复制代码
# 使用 TensorFlow Lite 转换模型
tflite_convert --saved_model_dir=/path/to/saved_model --output_file=model.tflite

总结

TensorFlow 2.x 是一个功能强大且灵活的深度学习框架,它集成了许多先进的功能,如 Keras、高效的数据处理 API(tf.data)、Eager Execution 和自动化的模型优化工具。通过简洁的 API 和强大的性能,TensorFlow 2.x 成为深度学习开发人员的首选框架之一。

相关推荐
程序猿000001号2 小时前
DeepSeek模型:开启人工智能的新篇章
人工智能·deepseek
梦云澜5 小时前
论文阅读(十四):贝叶斯网络在全基因组DNA甲基化研究中的应用
论文阅读·人工智能·深度学习
Future_yzx6 小时前
算法基础学习——快排与归并(附带java模版)
学习·算法·排序算法
忆~遂愿7 小时前
3大关键点教你用Java和Spring Boot快速构建微服务架构:从零开发到高效服务注册与发现的逆袭之路
java·人工智能·spring boot·深度学习·机器学习·spring cloud·eureka
纠结哥_Shrek7 小时前
pytorch逻辑回归实现垃圾邮件检测
人工智能·pytorch·逻辑回归
辞落山7 小时前
自定义数据集,使用 PyTorch 框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
人工智能·pytorch·逻辑回归
三次拒绝王俊凯8 小时前
记忆力训练day08
学习
天宇琪云8 小时前
关于opencv环境搭建问题:由于找不到opencv_worldXXX.dll,无法执行代码,重新安装程序可能会解决此问题
人工智能·opencv·计算机视觉
大模型之路8 小时前
大模型(LLM)工程师实战之路(含学习路线图、书籍、课程等免费资料推荐)
人工智能·大模型·llm
deephub9 小时前
十大主流联邦学习框架:技术特性、架构分析与对比研究
人工智能·python·深度学习·机器学习·联邦学习