【深度学习基础 1】 TensorFlow 框架

目录

一、TensorFlow简介

[1. 什么是 TensorFlow?](#1. 什么是 TensorFlow?)

2.TensorFlow的特点

二、TensorFlow的安装

[1. 安装 CPU 版本:](#1. 安装 CPU 版本:)

[2. 安装 GPU 版本(需要 CUDA 和 cuDNN 支持):](#2. 安装 GPU 版本(需要 CUDA 和 cuDNN 支持):)

[3. 检验](#3. 检验)

三、常用的TensorFlow函数

[1. 创建张量(Tensor)](#1. 创建张量(Tensor))

[2. 变量(Variable)](#2. 变量(Variable))

[3. 基本数学运算](#3. 基本数学运算)

[4. 自动求导(梯度计算)](#4. 自动求导(梯度计算))

[5. 应用示例](#5. 应用示例)

[① 构建简单的神经网络](#① 构建简单的神经网络)

[② 训练和评估模型](#② 训练和评估模型)

[③ 使用 TensorFlow 进行预测](#③ 使用 TensorFlow 进行预测)


一、TensorFlow简介

1. 什么是 TensorFlow?

TensorFlow 是 Google 开发的一个开源机器学习和深度学习框架,广泛用于构建和训练神经网络。它支持 CPU、GPU 和 TPU 加速计算,并且提供了灵活的 API 以适应研究和生产环境。

2.TensorFlow的特点

  • 高效的数值计算:基于数据流图(DataFlow Graph)进行计算。

  • 灵活的模型构建 :支持 Keras 高级 API 进行快速建模。

  • 跨平台支持:可在 CPU、GPU、TPU、移动设备和云端运行。

  • 自动微分:方便进行梯度计算和优化。

  • 丰富的生态系统:包括 TensorBoard(可视化工具)、TF-Serving(模型部署)等。

**注意:**Keras是基于Tensorflow编写的深度学习框架,是在Tensorflow的基础上再次集成的。

二、TensorFlow的安装

通过 pip 进行安装。建议在 Python 3.8 及以上版本的虚拟环境中安装

1. 安装 CPU 版本:

python 复制代码
pip install tensorflow

2. 安装 GPU 版本(需要 CUDA 和 cuDNN 支持):

python 复制代码
pip install tensorflow-gpu

**注:**CUDA 和 cuDNN的安装参考YOLO系列环境配置及训练_yolo环境配置-CSDN博客

3. 检验

python 复制代码
import tensorflow as tf
print(tf.__version__)

能成功输出对应安装的tensorflow版本号即视为成功

三、常用的TensorFlow函数

1. 创建张量(Tensor)

函数:constant

用途:张量(Tensor)是数据的基本结构,类似于 NumPy 数组

样例:

python 复制代码
import tensorflow as tf

# 创建标量、向量和矩阵
scalar = tf.constant(5)  
vector = tf.constant([1, 2, 3])  
matrix = tf.constant([[1, 2], [3, 4]])  

print("标量:", scalar)
print("向量:", vector)
print("矩阵:\n", matrix)

样例输出:

python 复制代码
标量: tf.Tensor(5, shape=(), dtype=int32)
向量: tf.Tensor([1 2 3], shape=(3,), dtype=int32)
矩阵:
 tf.Tensor(
[[1 2]
 [3 4]], shape=(2, 2), dtype=int32)

2. 变量(Variable)

函数:Variable

用途:在训练神经网络时,用变量(tf.Variable)来存储和更新权重参数

样例:

python 复制代码
# 创建变量
w = tf.Variable(3.0)
b = tf.Variable(2.0)

# 变量可以进行赋值
w.assign(5.0)
print("w:", w.numpy())

样例输出:

python 复制代码
w: 5.0

3. 基本数学运算

函数:constant

用途:提供了基本的数学运算,如加法、乘法、矩阵运算等。

样例:

python 复制代码
a = tf.constant(3.0)
b = tf.constant(2.0)

print("加法:", tf.add(a, b).numpy())  
print("乘法:", tf.multiply(a, b).numpy())  
print("矩阵乘法:", tf.matmul([[1, 2]], [[3], [4]]).numpy())  

样例输出:

python 复制代码
加法: 5.0
乘法: 6.0
矩阵乘法: [[11]]

4. 自动求导(梯度计算)

样例:

python 复制代码
x = tf.Variable(2.0)

with tf.GradientTape() as tape:
    y = x**3 + 2*x + 1  # y = x³ + 2x + 1

dy_dx = tape.gradient(y, x)  
print("dy/dx:", dy_dx.numpy())

样例输出:

python 复制代码
dy/dx: 14.0

分析:

  1. 变量定义

    tf.Variable(2.0) 声明一个可训练变量,TensorFlow会自动跟踪其梯度。

  2. 梯度记录

    tf.GradientTape() 会记录所有与变量 x 相关的计算操作(如平方、乘法等)。

  3. 梯度计算

    tape.gradient(y, x) 利用反向传播自动计算

5. 应用示例

① 构建简单的神经网络

使用 tf.keras可以搭建神经网络,例如将其用于手写数字识别的 MNIST 数据集

python 复制代码
from tensorflow import keras
from tensorflow.keras import layers

# 构建神经网络
model = keras.Sequential([
    layers.Dense(128, activation='relu', input_shape=(784,)),
    layers.Dense(10, activation='softmax')
])

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

# 查看模型结构
model.summary()

样例输出:

python 复制代码
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 128)               100480    
dense_1 (Dense)              (None, 10)                1290      
=================================================================
Total params: 101,770
Trainable params: 101,770
Non-trainable params: 0

分析:

model = keras.Sequential([
layers.Dense(128, activation='relu', input_shape=(784,)),
layers.Dense(10, activation='softmax')
])

  • 模型结构

    • 输入层 :隐式定义,接收形状为 (784,) 的输入(如展平后的28x28图像)。

    • 隐藏层 :全连接层(Dense),128个神经元,激活函数为ReLU。

    • 输出层:全连接层,10个神经元(对应10个类别),激活函数为Softmax(输出概率分布)。

  • 关键参数

    • input_shape=(784,):指定输入数据的维度(需与预处理后的数据一致)。

    • activation='relu':ReLU函数缓解梯度消失,提升非线性表达能力。

    • activation='softmax':将输出转换为概率分布,适用于多分类任务。

② 训练和评估模型

在①的基础上我们继续完善,在代码后段加上

python 复制代码
# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# 归一化处理
x_train, x_test = x_train / 255.0, x_test / 255.0

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

# 评估模型
test_loss, test_acc = model.evaluate(x_test.reshape(-1, 784), y_test)
print("测试准确率:", test_acc)

样例输出:

python 复制代码
Epoch 1/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.8847 - loss: 0.4228     
Epoch 2/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.9654 - loss: 0.1196  
Epoch 3/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.9759 - loss: 0.0803  
Epoch 4/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 2s 1ms/step - accuracy: 0.9821 - loss: 0.0578  
Epoch 5/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.9875 - loss: 0.0413  
313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 947us/step - accuracy: 0.9719 - loss: 0.0877
测试准确率: 0.9761000275611877

③ 使用 TensorFlow 进行预测

在②的基础上继续完善,记得先引入numpy库

python 复制代码
import numpy as np

# 取测试集中第一张图片并进行预测
sample = x_test[0].reshape(1, 784)  
predictions = model.predict(sample)

# 输出预测结果
print("预测类别:", np.argmax(predictions))

样例输出:

python 复制代码
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 46ms/step
预测类别: 7
相关推荐
暴力袋鼠哥1 分钟前
基于Flask的跨境电商头程预警分析系统
后端·python·flask
在下_诸葛15 分钟前
DeepSeek的API调用 | 结合DeepSeek API文档 | Python环境 | 对话补全(二)
人工智能·python·gpt·prompt·aigc
漫谈网络27 分钟前
闭包与作用域的理解
python·装饰器·闭包·legb
滴答滴答嗒嗒滴29 分钟前
Python小练习系列 Vol.5:数独求解(经典回溯 + 剪枝)
python·深度优先·剪枝
云徒川29 分钟前
AI对传统IT行业的变革
大数据·人工智能
Alger_Hamlet38 分钟前
Pycharm 2024.3 Python开发工具
ide·python·pycharm
techdashen39 分钟前
性能比拼: Go(Gin) vs Python(Flask)
python·golang·gin
rocksun42 分钟前
如何从数据库生成“AI”:Bruce Momjian
人工智能
Christopher42 分钟前
前端er在Cursor使用MCP实现精选照片的快速上手教程
人工智能
EasyNVR1 小时前
NVR接入录像回放平台EasyCVR视频融合平台城市/乡镇污水处理厂解决方案
网络·人工智能·音视频