当前位置: 首页 > news >正文

【人工智能-初级】第15章 TensorFlow 和 PyTorch 的入门:深度学习的利器

文章目录

    • 一、引言
    • 二、TensorFlow 简介
      • 2.1 什么是 TensorFlow?
      • 2.2 TensorFlow 安装
      • 2.3 TensorFlow 构建简单的神经网络
      • 2.4 TensorBoard 可视化
    • 三、PyTorch 简介
      • 3.1 什么是 PyTorch?
      • 3.2 PyTorch 安装
      • 3.3 PyTorch 构建简单的神经网络
    • 四、TensorFlow 与 PyTorch 的对比
      • 4.1 灵活性
      • 4.2 易用性
      • 4.3 部署能力
    • 五、总结
      • 5.1 学习要点
      • 5.2 练习题

一、引言

在深度学习领域,TensorFlowPyTorch 是最流行的两个框架。它们为构建、训练和部署深度学习模型提供了强大的工具,使得研究人员和开发者能够快速开发复杂的神经网络应用。这两个框架各有优劣,TensorFlow 以其强大的生产部署能力而闻名,而 PyTorch 则以其易用性和灵活性深受研究人员的喜爱。

本篇文章将介绍 TensorFlow 和 PyTorch 的基础概念,通过实例代码展示如何使用这两个框架构建简单的深度学习模型,帮助读者快速上手这两款深度学习利器。

二、TensorFlow 简介

2.1 什么是 TensorFlow?

TensorFlow 是由 Google 开发的一个开源深度学习框架,最初用于大规模机器学习任务的分布式训练。它的主要特点包括:

  • 灵活性:支持从机器学习到深度学习的多种任务。
  • 易于部署:可以轻松地将模型部署到不同平台(如服务器、移动设备和浏览器)。
  • 强大的可视化工具:TensorBoard 是 TensorFlow 内置的可视化工具,用于追踪和监控训练过程。

TensorFlow 使用计算图(Computation Graph)来构建和执行模型,用户通过定义图中的节点和边来描述神经网络的结构。

2.2 TensorFlow 安装

要安装 TensorFlow,只需使用 Python 的 pip 工具:

pip install tensorflow

安装完成后,我们可以在 Python 环境中导入 TensorFlow:

import tensorflow as tf

2.3 TensorFlow 构建简单的神经网络

接下来,我们使用 TensorFlow 来实现一个简单的两层神经网络,用于对 MNIST 数据集进行分类。MNIST 数据集包含手写数字的图片,每个图片是 28x28 像素,分为 10 个类别(0-9)。

import tensorflow as tf
from tensorflow.keras import layers, models# 加载 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 = models.Sequential([layers.Flatten(input_shape=(28, 28)),layers.Dense(128, activation='relu'),layers.Dense(10, activation='softmax')
])# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练模型
model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))
  • layers.Flatten:将输入的 28x28 的图像展开为一维数组,作为全连接层的输入。
  • layers.Dense:定义全连接层,其中 128 个神经元使用 ReLU 激活函数,10 个输出神经元使用 softmax 激活函数。
  • model.compile:定义优化器、损失函数和评估指标。
  • model.fit:使用训练数据训练模型,执行 5 个训练周期(epoch)。

2.4 TensorBoard 可视化

TensorBoard 是 TensorFlow 提供的可视化工具,可以帮助我们查看模型训练的过程和参数变化。

使用 TensorBoard 的步骤如下:

  1. 在编译模型时添加日志记录。
  2. 启动 TensorBoard 服务器,查看日志。
import datetime# 定义日志目录
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)# 训练模型并记录日志
model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test), callbacks=[tensorboard_callback])

接着,可以在命令行中启动 TensorBoard:

tensorboard --logdir=logs/fit

打开浏览器并访问 http://localhost:6006 即可查看训练的可视化结果。

三、PyTorch 简介

3.1 什么是 PyTorch?

PyTorch 是由 Facebook 开发的一个开源深度学习框架,以其动态计算图的特性和高度的灵活性而受到研究人员的广泛喜爱。PyTorch 提供了类似 NumPy 的张量操作,并集成了自动求导功能,使得用户能够更方便地构建和调试神经网络。

PyTorch 的主要特点包括:

  • 动态图:在运行时动态构建计算图,使得调试和开发更加灵活。
  • 简洁的 API:与 Python 生态系统紧密集成,易于学习和使用。
  • 支持 GPU 加速:简单的 API 使得用户能够轻松将模型部署到 GPU 上。

3.2 PyTorch 安装

要安装 PyTorch,也可以使用 pip 工具:

pip install torch torchvision

安装完成后,我们可以在 Python 环境中导入 PyTorch:

import torch
import torch.nn as nn
import torch.optim as optim

3.3 PyTorch 构建简单的神经网络

接下来,我们使用 PyTorch 来实现一个简单的两层神经网络,来完成 MNIST 数据集的分类任务。

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 数据加载与预处理
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_data = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_data = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
train_loader = DataLoader(train_data, batch_size=64, shuffle=True)
test_loader = DataLoader(test_data, batch_size=64, shuffle=False)# 定义神经网络模型
class SimpleNN(nn.Module):def __init__(self):super(SimpleNN, self).__init__()self.flatten = nn.Flatten()self.fc1 = nn.Linear(28*28, 128)self.relu = nn.ReLU()self.fc2 = nn.Linear(128, 10)self.softmax = nn.Softmax(dim=1)def forward(self, x):x = self.flatten(x)x = self.fc1(x)x = self.relu(x)x = self.fc2(x)return self.softmax(x)model = SimpleNN()# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)num_epochs = 5
for epoch in range(num_epochs):model.train()running_loss = 0.0for images, labels in train_loader:images, labels = images.to(device), labels.to(device)# 前向传播outputs = model(images)loss = criterion(outputs, labels)# 反向传播与优化optimizer.zero_grad()loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader):.4f}')print('Finished Training')
  • transforms.Normalize:对图像进行归一化处理。
  • nn.Linear:定义全连接层,包含输入和输出特征数。
  • model.train():将模型设置为训练模式。
  • optimizer.zero_grad():清除梯度缓存,防止梯度累积。
  • loss.backward():计算梯度,进行反向传播。
  • optimizer.step():更新模型的参数。

四、TensorFlow 与 PyTorch 的对比

4.1 灵活性

  • TensorFlow:TensorFlow 在构建和运行模型时,采用静态计算图的方式,这意味着计算图在执行前就已经构建完成。这种方式有利于优化计算过程,适合在生产环境中部署模型。
  • PyTorch:PyTorch 则采用动态图的方式,在运行时动态构建计算图,这使得调试和模型修改更加方便,深受研究人员和开发者的喜爱。

4.2 易用性

  • TensorFlow:TensorFlow 的早期版本使用静态图,较为复杂,但自 2.0 版本以来,使用类似 Keras 的接口,变得更加易于上手。
  • PyTorch:PyTorch 的设计与 Python 编程语言紧密结合,代码简洁、易于理解,尤其适合新手学习深度学习和进行研究。

4.3 部署能力

  • TensorFlow:TensorFlow 提供了强大的生产部署工具,如 TensorFlow Serving,用于在生产环境中部署深度学习模型。
  • PyTorch:虽然 PyTorch 的部署能力相对较弱,但最近推出的 TorchServe 也为部署 PyTorch 模型提供了便利。

五、总结

TensorFlow 和 PyTorch 是当前深度学习领域最流行的两个框架,各有其优缺点。TensorFlow 更加适合生产部署,而 PyTorch 则因其灵活性和易用性在研究领域更受欢迎。在本文中,我们介绍了这两个框架的基础知识,并通过实例代码展示了如何使用 TensorFlow 和 PyTorch 构建简单的神经网络模型。希望这篇文章能够帮助您理解并快速上手这两款深度学习工具。

5.1 学习要点

  1. TensorFlow 的静态图和 PyTorch 的动态图:理解两者的主要区别以及对模型构建的影响。
  2. 深度学习模型的构建和训练:掌握如何使用 TensorFlow 和 PyTorch 构建和训练简单的神经网络模型。
  3. 模型部署:了解两者在生产环境中的应用及部署能力。

5.2 练习题

  1. 使用 TensorFlow 和 PyTorch 分别构建一个三层神经网络模型,比较其代码实现和训练效果。
  2. 在 PyTorch 中使用不同的优化器(如 SGD、Adam),观察对训练速度和精度的影响。
  3. 使用 TensorFlow 的 TensorBoard 可视化工具,监控模型的训练过程,并理解各项指标的含义。

希望本文能帮助您

http://www.lryc.cn/news/465815.html

相关文章:

  • git禁用 SSL 证书验证
  • C++之《剑指offer》学习记录(2):sizeof
  • linux线程 | 同步与互斥 | 线程池以及知识点补充
  • ArkTS 如何实现表单,地区选择效果
  • Vite 项目的核心配置- vite.config.ts 和 tsconfig.json 全解析
  • 如何使用JMeter进行性能测试的保姆级教程
  • Qt 实战(11)样式表 | 11.1、样式表简介
  • WebGl 多缓冲区和数据偏移
  • 基于SSM的甜品店销售管理系统
  • Spacetime Gaussian Feature Splatting for Real-Time Dynamic View Synthesis
  • PCL 基于FPFH特征描述子获取点云对应关系
  • 项目实战:Qt+OpenCV仿射变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)
  • OpenCV坐标系统与图像处理案例
  • Unity之如何使用Unity Cloud Build云构建
  • Halcon开启多线程
  • Echarts 点击事件无法使用 this 或者 this绑定的数据无法获取
  • PCL 基于距离阈值去除错误对应关系(永久免费版)
  • DirectX 11 和 Direct3D 11 的关系
  • 什么是SCRM?为什么企业要做SCRM?
  • 类间方差,分割地物
  • 基于微博评论的自然语言处理情感分析
  • MFEM( Modular Finite Element Methods)是一个灵活的、可扩展的、开源的有限元库
  • 在VMware上创建虚拟机以及安装Linux操作系统,使用ssh进行远程连接VMware安装注意点 (包含 v1,v8两张网卡如果没有的解决办法)
  • 关于vue3中如何实现多个v-model的自定义组件
  • 【STM32项目_2_基于STM32的宠物喂食系统】
  • 商场楼宇室内导航系统
  • 2025全网最全计算机毕业设计选题推荐:计算机毕设选题指导及避坑指南√
  • Vision China 2024 | 移远通信以一体化的AI训练及部署能力,引领3C电子制造智能升级
  • 浏览器播放rtsp视频流解决方案
  • Ubuntu下查看指定文件大小