写给新人的深度学习扫盲贴:TensorFlow与Keras

发布于:2025-05-30 ⋅ 阅读:(39) ⋅ 点赞:(0)

一、TensorFlow与Keras简介

简单来讲,TensorFlow与Keras同属于人工智能下的深度学习框架,并且在发展过程中,它们居然走到了一起,让人不禁慨叹,技术无国界,技术是未来。
在这里插入图片描述

1.1 TensorFlow:工业级深度学习引擎

诞生背景:2015年,Google Brain团队开源了TensorFlow,旨在为学术界和工业界提供统一的机器学习平台。其名称“TensorFlow”源于“张量(Tensor)”和“数据流(Flow)”,体现了其核心设计理念:通过数据流图进行多维数组(张量)的计算。

优势

  • 灵活性与可扩展性:支持从移动端到分布式集群的部署(如TensorFlow Lite、TensorFlow Serving)。
  • 生态系统完善:提供可视化工具(TensorBoard)、预训练模型库(TensorFlow Hub)和社区支持。
  • 跨平台兼容性:可在CPU、GPU、TPU等硬件上运行,并支持多种编程语言接口。

1.2 Keras:深度学习的高级接口

设计哲学:Keras由法国人François Chollet于2015年创建,目标是“让深度学习像搭积木一样简单”。其API设计遵循“用户友好、模块化、易扩展”的原则,尤其适合快速原型开发。

与TensorFlow的融合:自TensorFlow 2.0起,Keras被整合为tf.keras,成为官方推荐的高级API。这种集成既保留了Keras的简洁性,又结合了TensorFlow的底层优化能力。

1.3 两者关系:互补而非对立

  • Keras是TensorFlow的“快捷方式”:通过tf.keras,可以用更少的代码实现复杂模型,例如只需几行代码即可构建卷积神经网络。
  • TensorFlow是Keras的“强力引擎”:Keras依赖TensorFlow等后端进行计算加速,同时TensorFlow的底层API(如自动微分、分布式训练)为Keras提供了性能保障。

二、了解核心组件

2.1 张量(Tensor):数据的基本单位

张量是多维数组的泛化形式。例如:

  • 标量(0维):单个数字(如5
  • 向量(1维):一列数字(如[1, 2, 3]
  • 矩阵(2维):表格数据(如[[1,2], [3,4]]
  • 高维张量:图像数据(3维:高度×宽度×通道)或视频数据(4维)。
2.2 层(Layer):模型的构建块

层是神经网络的基本单元,常见类型包括:

  • 全连接层(Dense):每个神经元与上一层全部连接,用于特征组合。
  • 卷积层(Conv2D):通过滤波器提取空间特征,适合图像处理。
  • 循环层(LSTM/GRU):处理序列数据(如文本、时间序列),具有记忆功能。
2.3 模型(Model):层的组合

模型是层的定向无环图(DAG)。Keras提供两种构建方式:

  • 顺序模型(Sequential):层的线性堆叠,适合简单结构。
  • 函数式API:支持多输入/输出、共享层等复杂拓扑。

三、TensorFlow与Keras的安装

3.1 推荐使用虚拟环境

使用condavenv创建隔离环境,避免依赖冲突:

# 使用conda  
conda create -n tf_env python=3.8  
conda activate tf_env  

# 使用venv  
python -m venv tf_env  
source tf_env/bin/activate  # Linux/macOS  
tf_env\Scripts\activate     # Windows  

本人在当前笔记本使用后者。

3.2 安装TensorFlow与Keras

通过pip一键安装最新稳定版(包含Keras):

pip install tensorflow  

GPU加速支持
若使用NVIDIA显卡,安装GPU版本以提升训练速度:

pip install tensorflow[and-cuda]  

安装独立版Keras(可选)
Keras已默认集成在TensorFlow中(tf.keras)。如需安装独立版本:

pip install keras  

3.3 验证安装

执行python语句, 本人此系列文章使用jupyter notebook。

import tensorflow as tf  
print("TensorFlow版本:", tf.__version__)  
print("GPU是否可用:", tf.config.list_physical_devices('GPU'))  

在这里插入图片描述

3.4 Hello world

构建一个简单的全连接网络,测试环境是否正常工作:

import tensorflow as tf  

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

# 构建模型  
model = tf.keras.Sequential([  
    tf.keras.layers.Flatten(input_shape=(28, 28)),  
    tf.keras.layers.Dense(128, 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)  

# 评估  
test_loss, test_acc = model.evaluate(x_test, y_test)  
print("测试集准确率:", test_acc)  

执行结果如下:

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11490434/11490434 ━━━━━━━━━━━━━━━━━━━━ 128s 11us/step

Epoch 1/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 9s 4ms/step - accuracy: 0.8739 - loss: 0.4405
Epoch 2/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 9s 5ms/step - accuracy: 0.9638 - loss: 0.1219
Epoch 3/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9769 - loss: 0.0780
Epoch 4/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9828 - loss: 0.0561
Epoch 5/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.9870 - loss: 0.0419
313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.9696 - loss: 0.0964
测试集准确率: 0.9740999937057495

网站公告

今日签到

点亮在社区的每一天
去签到