Python 课程14-TensorFlow

前言

TensorFlow 是由 Google 开发的一个开源深度学习框架,广泛应用于机器学习和人工智能领域。它具有强大的计算能力,能够运行在 CPU、GPU 甚至 TPU 上,适用于从小型模型到大规模生产系统的各种应用场景。通过 TensorFlow,你可以构建和训练复杂的深度学习模型,如神经网络、卷积神经网络(CNN)、递归神经网络(RNN)等。

本教程将为你详细介绍如何使用 TensorFlow 构建和训练模型,包括其每个重要指令的说明与代码示例。无论你是初学者还是有经验的开发者,都可以通过本教程全面掌握 TensorFlow 的基础知识和应用。


目录

  1. TensorFlow 基础

    • 安装 TensorFlow
    • 创建张量(Tensors)
    • 张量操作与基本函数
    • 使用 GPU 加速
  2. 神经网络基础

    • 使用 Keras 构建简单的神经网络
    • 模型编译与训练
    • 模型评估与预测
    • 保存与加载模型
  3. 高级操作

    • 自定义训练循环
    • 使用 Dataset 进行数据管道处理
    • 自定义层与激活函数
    • 自动微分与梯度计算
  4. 卷积神经网络 (CNN)

    • 卷积层与池化层
    • 构建简单的 CNN 模型
    • 训练与评估 CNN 模型
  5. 递归神经网络 (RNN)

    • 构建简单的 RNN 模型
    • 使用 LSTM 处理序列数据
    • 训练与评估 RNN 模型

1. TensorFlow 基础

安装 TensorFlow

在开始使用 TensorFlow 之前,你需要安装它。可以通过 pip 安装 TensorFlow:

pip install tensorflow

 你可以使用以下代码检查是否成功安装:

import tensorflow as tf
print(tf.__version__)  # 输出 TensorFlow 的版本号
创建张量(Tensors)

张量(Tensors)是 TensorFlow 中的基本数据结构,类似于 NumPy 的数组,可以是多维数组。张量是不可变的,它们可以在 CPU 或 GPU 上运行。

  • 创建常量张量
    import tensorflow as tf# 创建一个常量张量
    tensor = tf.constant([[1, 2], [3, 4]])
    print(tensor)
    
  • 创建随机张量
    # 创建一个 3x3 的随机张量
    random_tensor = tf.random.normal([3, 3])
    print(random_tensor)
    
  • 创建全 0 或全 1 张量
    # 创建一个全 0 张量
    zero_tensor = tf.zeros([2, 3])# 创建一个全 1 张量
    one_tensor = tf.ones([2, 3])
    
    张量操作与基本函数

    TensorFlow 提供了丰富的张量操作函数,如加法、减法、矩阵乘法等。它们与 NumPy 的操作类似。

  • 加法与减法
    a = tf.constant([1, 2, 3])
    b = tf.constant([4, 5, 6])# 张量加法
    sum_tensor = tf.add(a, b)
    print(sum_tensor)# 张量减法
    sub_tensor = tf.subtract(a, b)
    print(sub_tensor)
    
  • 矩阵乘法
    matrix_a = tf.constant([[1, 2], [3, 4]])
    matrix_b = tf.constant([[5, 6], [7, 8]])# 矩阵乘法
    matmul_tensor = tf.matmul(matrix_a, matrix_b)
    print(matmul_tensor)
    
  • 重塑张量
    # 将张量重塑为 2x3
    reshaped_tensor = tf.reshape(tensor, [2, 3])
    print(reshaped_tensor)
    
    使用 GPU 加速

    如果你的计算机配有支持 CUDA 的 NVIDIA GPU,可以使用 GPU 加速深度学习任务。TensorFlow 会自动检测可用的 GPU 并将计算任务分配给它。

  • 查看是否使用 GPU
print("Is GPU available:", tf.config.list_physical_devices('GPU'))

如果 TensorFlow 检测到 GPU,则会在进行运算时优先使用 GPU 加速。


2. 神经网络基础

Keras 是 TensorFlow 中的高层 API,简化了神经网络的构建过程。使用 Keras,可以快速构建并训练神经网络模型。

使用 Keras 构建简单的神经网络

我们将通过 Keras 构建一个简单的前馈神经网络,并使用它对 MNIST 手写数字数据集进行分类。

  • 加载数据集
    from tensorflow.keras.datasets import mnist# 加载 MNIST 数据集
    (X_train, y_train), (X_test, y_test) = mnist.load_data()# 数据标准化:将像素值从 [0, 255] 缩放到 [0, 1]
    X_train = X_train / 255.0
    X_test = X_test / 255.0
    
  • 构建模型
    from tensorflow.keras import layers, models# 创建一个顺序模型
    model = models.Sequential()# 添加层
    model.add(layers.Flatten(input_shape=(28, 28)))  # 将 28x28 的图像展平为 784 维向量
    model.add(layers.Dense(128, activation='relu'))  # 添加全连接层
    model.add(layers.Dense(10, activation='softmax'))  # 输出层,10 个类别# 打印模型结构
    model.summary()
    
    模型编译与训练

    在编译模型时,你需要指定损失函数、优化器和评估指标。

  • 编译模型
    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
    
  • 训练模型
# 训练模型
model.fit(X_train, y_train, epochs=5, batch_size=32)
模型评估与预测
  • 评估模型
    # 在测试集上评估模型
    test_loss, test_acc = model.evaluate(X_test, y_test)
    print(f"Test accuracy: {test_acc:.2f}")
    
  • 使用模型进行预测
    # 使用训练好的模型进行预测
    predictions = model.predict(X_test)
    print(predictions[0])  # 输出第一个样本的预测结果
    
    保存与加载模型

    TensorFlow 支持将模型保存为文件,以便以后加载并继续使用。

  • 保存模型
    model.save('mnist_model.h5')
    
  • 加载模型
    from tensorflow.keras.models import load_model# 加载保存的模型
    loaded_model = load_model('mnist_model.h5')
    

    3. 高级操作

    自定义训练循环

    虽然 Keras 提供了简洁的 fit() 方法进行训练,但你也可以通过自定义训练循环更灵活地控制训练过程。

import tensorflow as tf# 自定义训练循环
for epoch in range(5):print(f"Epoch {epoch+1}")for batch, (X_batch, y_batch) in enumerate(train_dataset):with tf.GradientTape() as tape:# 前向传播logits = model(X_batch, training=True)loss_value = loss_fn(y_batch, logits)# 反向传播grads = tape.gradient(loss_value, model.trainable_weights)optimizer.apply_gradients(zip(grads, model.trainable_weights))print(f"Batch {batch}: Loss = {loss_value:.4f}")
使用 Dataset 进行数据管道处理

TensorFlow Dataset API 是一个用于加载和处理数据的高效工具,适合大规模数据集。

from tensorflow.data import Dataset# 创建 TensorFlow 数据集
dataset = Dataset.from_tensor_slices((X_train, y_train))# 数据集预处理
dataset = dataset.shuffle(buffer_size=1024).batch(32).repeat()# 迭代数据集
for batch_X, batch_y in dataset.take(1):print(batch_X.shape, batch_y.shape)
自定义层与激活函数

你可以使用 TensorFlow 创建自定义层或激活函数,以适应特殊需求。

  • 自定义层
    class MyCustomLayer(tf.keras.layers.Layer):def __init__(self, units=32):super(MyCustomLayer, self).__init__()self.units = unitsdef build(self, input_shape):self.w = self.add_weight(shape=(input_shape[-1], self.units),initializer='random_normal', trainable=True)self.b = self.add_weight(shape=(self.units,), initializer='zeros', trainable=True)def call(self, inputs):return tf.matmul(inputs, self.w) + self
    # 使用自定义层
    model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),MyCustomLayer(64),  # 自定义层tf.keras.layers.Dense(10, activation='softmax')
    ])model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 打印模型结构
    model.summary()
  • 自定义激活函数
    # 定义一个自定义激活函数
    def custom_activation(x):return tf.nn.relu(x) * tf.math.sigmoid(x)# 使用自定义激活函数
    model = tf.keras.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),tf.keras.layers.Dense(128),tf.keras.layers.Activation(custom_activation),  # 自定义激活函数tf.keras.layers.Dense(10, activation='softmax')
    ])
    
    自动微分与梯度计算

    TensorFlow 提供了自动微分的功能,允许你通过 tf.GradientTape 计算梯度,并用于优化模型。

  • 使用 tf.GradientTape 计算梯度
    # 创建模型和优化器
    model = tf.keras.Sequential([tf.keras.layers.Dense(10)])
    optimizer = tf.keras.optimizers.Adam()# 定义损失函数
    def compute_loss(y_true, y_pred):return tf.reduce_mean(tf.losses.mean_squared_error(y_true, y_pred))# 前向传播和梯度计算
    x = tf.random.normal([3, 3])
    y = tf.random.normal([3, 10])with tf.GradientTape() as tape:y_pred = model(x)loss = compute_loss(y, y_pred)# 计算梯度
    gradients = tape.gradient(loss, model.trainable_variables)# 更新模型参数
    optimizer.apply_gradients(zip(gradients, model.trainable_variables))
    


    4. 卷积神经网络 (CNN)

    卷积神经网络(CNN)特别适合处理图像数据。它通过卷积层提取图像的局部特征,能够在分类、物体检测等任务中取得优异的效果。

    卷积层与池化层
  • 卷积层:提取图像局部特征。
  • 池化层:减少特征图的尺寸,降低计算量,同时保留重要信息。
    from tensorflow.keras import layers# 构建 CNN 模型
    model = tf.keras.Sequential([layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),layers.MaxPooling2D((2, 2)),  # 池化层layers.Conv2D(64, (3, 3), activation='relu'),layers.MaxPooling2D((2, 2)),layers.Flatten(),layers.Dense(64, activation='relu'),layers.Dense(10, activation='softmax')
    ])# 打印模型结构
    model.summary()
    
    构建简单的 CNN 模型

    我们将使用 MNIST 数据集来训练一个简单的 CNN 模型。

  • 加载并预处理图像数据
    # 加载 MNIST 数据集
    (X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()# 调整输入形状,增加通道维度(因为卷积层需要4D输入)
    X_train = X_train.reshape(-1, 28, 28, 1).astype('float32') / 255
    X_test = X_test.reshape(-1, 28, 28, 1).astype('float32') / 255
    
  • 编译并训练 CNN 模型
    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型
    model.fit(X_train, y_train, epochs=5, batch_size=64)
    
    训练与评估 CNN 模型
  • 评估模型
    # 在测试集上评估 CNN 模型
    test_loss, test_acc = model.evaluate(X_test, y_test)
    print(f"Test accuracy: {test_acc:.2f}")
    

    5. 递归神经网络 (RNN)

    递归神经网络(RNN)适用于处理序列数据,如时间序列和自然语言处理任务。RNN 可以记忆之前的信息,并用于后续的输入,从而在处理时间依赖关系时非常有效。

    构建简单的 RNN 模型

    我们可以使用 LSTM(长短期记忆网络) 这一特殊类型的 RNN,来处理序列数据,如股票价格预测或文本分类。

  • 使用 LSTM 构建 RNN 模型
    from tensorflow.keras import layers# 构建 RNN 模型
    model = tf.keras.Sequential([layers.LSTM(128, input_shape=(10, 1)),  # 假设输入序列长度为10layers.Dense(10, activation='softmax')  # 输出层,10 个类别
    ])# 打印模型结构
    model.summary()
    
    使用 LSTM 处理序列数据

    我们将模拟序列数据,并使用 LSTM 进行预测。

  • 生成序列数据
    import numpy as np# 创建模拟的时间序列数据
    X_train = np.random.rand(1000, 10, 1)  # 1000 个样本,每个样本长度为 10
    y_train = np.random.randint(0, 10, 1000)  # 10 个类别的随机标签
    
  • 编译并训练模型
    model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型
    model.fit(X_train, y_train, epochs=5, batch_size=32)
    
    训练与评估 RNN 模型
  • 评估模型
    # 假设我们有测试集 X_test 和 y_test
    test_loss, test_acc = model.evaluate(X_test, y_test)
    print(f"Test accuracy: {test_acc:.2f}")
    

    结论

    通过本详细的 TensorFlow 教程,你已经掌握了构建和训练深度学习模型的基本知识。我们从最基础的张量操作开始,逐步构建神经网络,并使用 Keras 高层 API 来快速实现深度学习模型。你还学习了如何通过自定义训练循环和层实现更高级的功能,以及使用 CNNRNN 处理图像和序列数据。

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

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

相关文章

FinOps三人行:共话FinOps云成本管理与AI的未来在线分享(文字+视频)

前言: 在数字化浪潮的推动下,云成本管理(Cloud Financial Management,简称FinOps)正逐渐成为企业关注的焦点。在2024年9月4日,一场关于云成本管理与人工智能(AI)未来的深入讨论在线…

体感魂斗罗-开篇

文章目录 前言新的目标Flag 前言 黑神话悟空大火,9月14,周鸿祎在抖音平台分享了360团队用两天的业余时间将《黑神话:悟空》爆改为体感游戏的过程,通过身体动作来控制游戏中的角色,实现更加自然和直观的操作方式。 把…

2025年最新大数据毕业设计选题-基于Spark分析相关

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向,比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向,比如民宿分析、电商行为分析、天气分析等等。。。…

2025年最新大数据毕业设计选题-基于Hive分析相关

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向,比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向,比如民宿分析、电商行为分析、天气分析等等。。。…

【bug】通过lora方式微调sdxl inpainting踩坑

报错内容 ValueError: Attempting to unscale FP16 gradients. 报错位置 if accelerator.sync_gradients:params_to_clip (itertools.chain(unet_lora_parameters, text_lora_parameters_one, text_lora_parameters_two)if args.train_text_encoderelse unet_lora_parameters…

Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞

由于raid卡bug故障,导致文件系统异常,从而使得数据库无法正常启动,客户找到我之前已经让多人分析,均未恢复成功,查看alert日志,发现他们恢复的时候尝试resetlogs库,然后报ORA-600 kcbzib_kcrsds_1错误 2024-09-15T17:07:32.55321508:00 alter database open resetlogs 2024-09-…

深入理解IP地址分类及子网划分详解

在互联网时代,IP地址是网络通信的基础。无论是访问网站、发送电子邮件,还是进行数据传输,IP地址都扮演着至关重要的角色。本文将详细解析IP地址的分类及子网划分的原理,帮助你更好地理解网络架构及其应用。 一、什么是IP地址 IP…

电信创维光猫DT741超级密码

正常的D740系是创维系列光猫如:SK-D740 之类的超密获取办法-光猫/adsl/cable无线一体机-恩山无线论坛 但是我这个固件是DT741v1.0 我只能说很S -B,这个版本如果是1.02那就可以很轻松的去用通用办法解决,但是呢!还有办法就是用最传…

数据恢复精灵排行榜:四款优秀软件推荐!

无论是误删的照片,还是格式化硬盘后的重要文件,每一次意外的数据丢失都可能给我们带来不小的麻烦。在这样的背景下,“数据恢复精灵”应运而生,它们能够帮助我们找回那些似乎已经消失无踪的信息。下面,就让我们一起来看…

【 html+css 绚丽Loading 】 000052 璇玑转轮

前言:哈喽,大家好,今天给大家分享今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f…

Cortex-A7的GIC(通用中断控制器):边沿触发和电平触发中断处理流程

0 资料 ARM Generic Interrupt Controller Architecture version 2.0 Architecture Specification1 边沿触发和电平触发中断处理流程 1.0 边沿触发和电平触发的区别 边沿触发(Edge-triggered) This is an interrupt that is asserted on detection of…

一分钟掌握 Excel VBA 技巧,轻松批量生成工资条,提高工作效率!

可能大家忽视了一点,Excel是我们日常办公中使用最多的工具,所以,学好Excel并加以运用,一定能提升你的工作效率,比如Excel VBA可以用代码实现自动化办公,下面举一个Excel VBA批量生成工资条的办公小案例。 …

关于 Visual Studio Code 如何插入自定义快捷方式

第一步:打开控制面板,也可以使用快捷键ctrlshiftp 然后点击命令面板 第二步:输入snippets搜索,选择配置用户代码片段 第三步:选择新建全局代码片段文件,然后输入文件名,这里我因为创建的是vue的…

鸿蒙媒体开发系列03——AVPlayer和AVRecorder概述

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。 1、概述 本期我们初步讨论音视频资源的播放与录制相关能力 —— AVPlayer & AV…

数字经济指数合集

数字经济指数合集 随着信息技术的快速发展,数字经济已成为推动全球经济增长的重要力量。在中国,数字经济的发展尤为迅速,不仅促进了产业结构优化升级,还提升了社会治理效能。为了更好地衡量各地数字经济的发展水平,一…

工厂模式,策略模式,代理模式,单例模式在项目中的应用

项目背景: 首先这篇文章是总结了OJ项目和AI答题平台项目(和一点点的聚合搜索项目)中设计模式的文章 在项目中也用了很多次的设计模式,我感觉起来,这些设计模式的作用就是提高项目的扩展性和降低耦合性 工厂模式&…

视频语音转成文字用什么工具?这4款就很不错!

如今视频语音已经可以帮助我们在短时间内或去很多信息,在办公,学习教育,影视娱乐方面可以帮助我们高效的进行记录。当我们需要文字化的整理时,就会需要转换的工具。这片文章遍要罗列4款我在办公室用到的几款比较高效准确的视频语音…

原来石岩也有羊台山登山口

带娃探寻家附近的好玩的,娃问:石岩湿地公园的水从哪里来的?我说可能是羊台山吧,我们可以随着河流去找下啊。其实我内心也是没底的,我去的羊台山都是从龙华的羊台山东地铁下车去的。 骑行的好处就是可以松弛感看风景&a…

犬类检测系统源码分享

犬类检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

C++ | (二)类与对象(上)

燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的假期为什么一去不复返呢? 目录 一、初识类 1.1 类的定义 1.2 C中…