探索PyTorch:从入门到实践的demo全解析

探索PyTorch:从入门到实践的demo全解析

  • 一、环境搭建:PyTorch的基石
    • (一)选择你的“利器”:安装方式解析
    • (二)步步为营:详细安装步骤指南
  • 二、基础入门demo:点亮第一盏灯
    • (一)张量操作:深度学习的“积木”
    • (二)自动求导:模型学习的“幕后英雄”
  • 三、数据处理demo:喂饱你的模型
    • (一)Dataset与DataLoader:数据加载的“黄金搭档”
    • (二)数据预处理:打磨数据的“利器”
  • 四、模型构建demo:搭建智慧大脑
    • (一)构建简单神经网络:从感知机到多层网络
    • (二)经典卷积神经网络:图像识别的“神器”
  • 五、模型训练与优化demo:雕琢模型的艺术
    • (一)损失函数:模型的“指南针”
    • (二)优化器:攀登高峰的“助力器”
  • 六、进阶应用demo:拓展无限可能
    • (一)生成对抗网络:创造的“魔法”
    • (二)迁移学习:站在巨人肩膀上的“智慧”
  • 七、多卡并行训练demo:加速前进的“引擎”
    • (一)单机多卡设置:开启并行之路
    • (二)多机多卡探索:分布式训练的“星辰大海”
  • 八、PyTorch的未来展望

开启PyTorch之旅
在这里插入图片描述

在深度学习的广袤天地里,PyTorch已然成为一颗璀璨夺目的明星,熠熠生辉。它由Facebook人工智能研究团队精心打造,以其卓越的性能、简洁的语法和强大的功能,为广大研究者和开发者提供了一个得心应手的工具,助力他们在深度学习的征程中披荆斩棘,探索未知。
无论是初出茅庐、对深度学习满怀热忱的新手,还是经验丰富、在领域内深耕多年的行家,这篇PyTorch Demo大全都将成为你们不可或缺的得力助手。对于新手而言,它宛如一座明亮的灯塔,照亮你们前行的道路,引领你们从PyTorch的基础知识学起,逐步掌握其核心概念与操作技巧,通过一个个精心设计的Demo,让你们在实践中感受深度学习的魅力,从而顺利踏入这一充满挑战与机遇的领域。而对于资深开发者,这里的高级Demo和实战案例,则像是一把把精准的手术刀,帮助你们深入剖析复杂模型的构建与优化,探索前沿技术的应用,让你们在深度学习的前沿阵地不断突破创新,攀登更高的技术巅峰。
深度学习绝非纸上谈兵,唯有通过大量的实践,才能真正领悟其中的奥秘。接下来,就让我们怀揣着对知识的渴望,携手踏入PyTorch的精彩世界,用代码书写属于我们的深度学习传奇。

一、环境搭建:PyTorch的基石

(一)选择你的“利器”:安装方式解析

在开启PyTorch之旅前,我们需先为其搭建一个稳固的“家园”,也就是安装环境。目前,常见的安装方式有Anaconda和pip,它们各有千秋,适用于不同的场景。
Anaconda宛如一位贴心的管家,为我们提供了一站式的解决方案。它不仅内置了丰富多样的科学计算库,如NumPy、SciPy等,还具备强大的环境管理功能,能让我们在同一台机器上轻松切换不同版本的Python环境,避免项目间的包冲突,就像为每个项目都打造了一个独立的“小天地”。对于初学者或是需要同时进行多个不同项目开发的研究者来说,Anaconda无疑是绝佳选择,它能让复杂的环境配置变得简单有序,让你专注于代码创作。
而pip则像是一把轻便的瑞士军刀,简洁高效。它是Python的原生包管理工具,使用起来直接明了。如果你对Python环境已经较为熟悉,且项目需求相对单一,只需要快速安装PyTorch及其依赖,pip便能迅速满足你的需求,无需额外安装庞大的Anaconda套件。不过,使用pip时要格外留意包的版本兼容性,以免引发冲突。

(二)步步为营:详细安装步骤指南

接下来,以Anaconda为例,为大家详细介绍PyTorch的安装步骤。
首先,前往Anaconda官网(https://www.anaconda.com/)下载适合你操作系统的版本,安装过程如同普通软件安装一般,一路“Next”即可,但需注意在选择安装路径时,尽量避开系统盘(C盘),以防日后系统重装导致数据丢失。安装完成后,打开Anaconda Prompt(Windows系统)或终端(Mac/Linux系统)。
第一步,创建虚拟环境,输入以下命令:

conda create -n pytorch_env python=3.8

这里我们创建了一个名为“pytorch_env”的虚拟环境,并指定Python版本为3.8,你可根据实际需求调整。创建过程中,终端会提示你安装一些依赖包,输入“y”确认即可。
第二步,激活虚拟环境:

conda activate pytorch_env

激活后,你会发现命令行前缀变为“(pytorch_env)”,表明已成功进入该环境。
第三步,安装PyTorch。前往PyTorch官网(https://pytorch.org/),在首页你会看到一个配置安装选项的区域。根据你的电脑硬件配置(是否有GPU及对应的CUDA版本),选择相应的选项,官网会自动生成适合你的安装命令。例如,若你有NVIDIA GPU且CUDA版本为11.3,安装命令可能如下:

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

将此命令复制到已激活的Anaconda Prompt中,回车执行,Anaconda便会自动从指定源下载并安装PyTorch及其相关依赖库,静静等待安装完成即可。
安装完成后,不妨进行一个小测试,在命令行中输入“python”进入Python交互环境,再输入以下代码:

import torch
print(torch.__version__)

若能成功输出PyTorch的版本号,恭喜你,PyTorch已成功安装,你的深度学习探索之旅正式启航!

二、基础入门demo:点亮第一盏灯

(一)张量操作:深度学习的“积木”

在PyTorch的世界里,张量(Tensor)宛如神奇的积木,是构建一切模型与算法的基石。它恰似一位千变万化的魔术师,可以轻松化身为不同形状、不同维度的数据载体,为我们在深度学习的海洋中畅游提供了便利。
创建张量的方式多种多样,犹如开启一扇扇通往不同数据世界的大门。你可以使用torch.rand函数,像一位随机的艺术家,挥洒灵感,创造出元素值在0到1之间均匀分布的张量,为模型训练注入随机性;也可用torch.zeros打造全0张量,如同搭建一座宁静的数字空城,等待数据的填充;若想得到全1张量,torch.ones便能满足需求,它像是点亮了一盏盏明灯,让数据空间充满光明。而torch.tensor则像一位精准的工匠,能根据给定的具体数据雕琢出定制化的张量。例如:

import torch# 生成一个2x3的随机张量,数据在0到1之间均匀分布
random_tensor = torch.rand(2, 3)  
print(random_tensor)# 创建一个3x4的全0张量
zero_tensor = torch.zeros(3, 4)  
print(zero_tensor)# 构建一个2x2的全1张量
one_tensor = torch.ones(2, 2)  
print(one_tensor)# 依据给定数据生成张量
custom_tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])  
print(custom_tensor)

张量的形状变换操作更是为数据处理提供了极大的灵活性,犹如神奇的变形魔法。.view函数宛如一把精巧的手术刀,能够精准地重塑张量的形状,让数据以全新的结构呈现,满足不同模型层的输入要求;.reshape函数则像一位温柔的重塑师,同样可以改变张量的维度排列,且在某些情况下更加智能,能自动推断缺失的维度大小;而.transpose函数好似一位旋转大师,轻松地对张量的维度进行转置,让数据的视角焕然一新。举个例子:

# 先创建一个1维张量
original_tensor = torch.arange(6)  
print(original_tensor)# 使用view将其变换为2x3的二维张量
reshaped_tensor = original_tensor.view(2, 3)  
print(reshaped_tensor)# 再用reshape变回1维张量
restored_tensor = reshaped_tensor.reshape(-1)  
print(restored_tensor)# 创建一个2x3的二维张量
matrix_tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])  
print(matrix_tensor)# 对其进行转置
transposed_tensor = matrix_tensor.transpose(0, 1)  
print(transposed_tensor)

索引与切片操作让我们能像在数据的宝藏库中精准寻宝一般,快速获取所需的数据片段。通过指定索引,我们可以瞬间定位到张量中的特定元素,如同在星空中找到最耀眼的那颗星;切片操作则能让我们批量获取连续或间隔的数据块,就像从一整条数据项链上取下特定的几段珍珠。例如:

# 构建一个3x4的张量
data_tensor = torch.randn(3, 4)  
print(data_tensor)# 获取第2行第3列的元素
element = data_tensor[1, 2]  
print(element)# 取出前两行数据
slice_tensor = data_tensor[:2, :]  
print(slice_tensor)

张量还支持丰富多样的数学运算,它们如同精密的计算器,能高效地处理数据。加法、减法、乘法、除法等基本运算,以及矩阵乘法等高级运算,都能在张量之间流畅地进行。并且,PyTorch遵循广播机制,能自动适配不同形状的张量进行运算,就像一位智慧的协调者,让数据运算无缝对接。例如:

# 生成两个形状不同的张量
tensor_a = torch.randn(2, 3)  
tensor_b = torch.randn(3)  # 进行加法运算,自动广播
result_add = tensor_a + tensor_b  
print(result_add)# 执行乘法运算
result_mul = tensor_a * tensor_b  
print(result_mul)

(二)自动求导:模型学习的“幕后英雄”

自动求导机制无疑是PyTorch中最为耀眼的一颗明珠,它默默在幕后发力,为模型的学习与优化提供了强大的动力,宛如一位智慧超群的导师,指引着模型参数一步步走向最优解。
在PyTorch里,每个张量都拥有一个名为.requires_grad的神奇属性,它宛如一盏信号灯,一旦开启(设置为True),PyTorch便会如同一位严谨的记录员,一丝不苟地记录下该张量后续所经历的所有操作,构建起一个精密的计算图。这个计算图恰似一张无形的大网,将张量之间的运算关系紧密相连,为后续的梯度计算铺就道路。例如:

import torch# 创建一个张量,并开启自动求导
x = torch.tensor([2.0], requires_grad=True)  
print(x)# 对张量进行操作
y = x ** 2 + 3 * x  
print(y)

当模型的前向传播计算完成,输出结果已然明晰,此时我们便可轻启.backward()函数,它如同冲锋的号角,触发反向传播的进程。在这一过程中,PyTorch会依据链式法则,沿着计算图的脉络,逆向而行,精准计算出每个张量相对于损失函数的梯度,如同沿着河流溯源,找出每一滴水的源头。这些梯度值随后会被妥善存储在张量的.grad属性中,等待我们取用,以更新模型的参数,推动模型不断进化。例如:

# 假设这是损失函数的值,为了演示方便,直接给定
loss = torch.tensor([5.0])  
# 执行反向传播
loss.backward()  
# 查看x的梯度
print(x.grad) 

让我们通过一个更为详细的线性回归示例,深入感受自动求导的魅力。假设我们拥有一组简单的数据点(x, y),期望找到一条最优的直线 y = wx + b,使得这条直线尽可能贴近这些数据点,这就如同在散点的星空中寻找一条最契合的轨迹。我们的目标是最小化损失函数,这里选用均方误差作为衡量标准,它像一把精准的尺子,度量着预测值与真实值之间的差距。

import torch# 模拟一些输入数据和对应的真实标签
x_data = torch.tensor([[1.0], [2.0], [3.0], [4.0]], dtype=torch.float32)
y_data = torch.tensor([[3.0], [5.0], [7.0], [9.0]], dtype=torch.float32)# 初始化权重和偏置,开启自动求导
w = torch.tensor([[1.0]], dtype=torch.float32, requires_grad=True)
b = torch.tensor([[0.0]], dtype=torch.float32, requires_grad=True)# 定义模型预测函数
def forward(x):return x @ w + b# 定义损失函数
def loss_function(y_pred, y_true):return ((y_pred - y_true) ** 2).mean()# 设置学习率和训练轮数
learning_rate = 0.01
epochs = 100for epoch in range(epochs):# 前向传播y_pred = forward(x_data)# 计算损失loss = loss_function(y_pred, y_data)# 反向传播loss.backward()# 更新权重和偏置,手动实现梯度下降with torch.no_grad():w -= learning_rate * w.gradb -= learning_rate * b.grad# 梯度清零,为下一次迭代做准备w.grad.zero_()b.grad.zero_()if (epoch + 1) % 10 == 0:print(f"Epoch [{epoch + 1}/{epochs}], Loss: {loss.item():.4f}")print(f"Final weights: {w.item():.4f}, bias: {b.item():.4f}")

在这个示例中,每一次迭代都包含了前向传播、损失计算、反向传播以及参数更新的完整流程。在前向传播时,模型依据当前的权重 w 和偏置 b 对输入数据 x_data 进行预测,得出预测值 y_pred;随后,损失函数精确度量出预测值与真实标签 y_data 之间的均方误差 loss。紧接着,反向传播启动,loss.backward() 指令下达后,PyTorch沿着计算图回溯,精确计算出 w 和 b 关于损失函数的梯度,并存储在 .grad 属性中。最后,在 torch.no_grad() 的保护下,我们依据梯度下降算法,小心翼翼地更新 w 和 b 的值,让模型朝着最优解稳步迈进。每经过 10 个训练周期,我们还会查看当前的损失值,以便实时监控模型的学习进展,就像航海时不断校准航向,确保最终能抵达成功的彼岸。

三、数据处理demo:喂饱你的模型

(一)Dataset与DataLoader:数据加载的“黄金搭档”

在深度学习的奇妙旅程中,数据宛如珍贵的燃料,而Dataset与DataLoader则像是一对默契无间的“黄金搭档”,为模型的高效运行源源不断地输送动力。
当我们面对个性化的数据集时,自定义Dataset类就如同打造一把专属的钥匙,开启数据的宝库。它需要我们精心继承torch.utils.data.Dataset基类,并且用心雕琢两个至关重要的魔法方法:getitem__与__len。__getitem__方法宛如一位贴心的向导,它依据给定的索引,精准地穿梭于数据的迷宫之中,将对应的样本数据与标签巧妙提取并返回,确保模型能够按图索骥,获取所需;__len__方法则像是一位严谨的管家,一丝不苟地清点着数据集的样本总数,让模型对数据的规模了如指掌。
假设我们手头有一个猫咪和狗狗图片分类的任务,图片存储在不同的文件夹下,对应的标签便是文件夹名称。下面这段代码便能搭建起一个专属的图片数据集类:

from torch.utils.data import Dataset
from PIL import Image
import osclass CatDogDataset(Dataset):def __init__(self, root_dir, transform=None):self.root_dir = root_dirself.transform = transformself.image_paths = []self.labels = []for label in os.listdir(root_dir):label_dir = os.path.join(root_dir, label)if os.path.isdir(label_dir):for image_name in os.listdir(label_dir):image_path = os.path.join(label_dir, image_name)self.image_paths.append(image_path)self.labels.append(label)def __getitem__(self, index):image_path = self.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC学习(二)——RESTful API、拦截器、异常处理、数据类型转换

一、RESTful (一)RESTful概述 RESTful是一种软件架构风格,用于设计网络应用程序。REST是“Representational State Transfer”的缩写,中文意思是“表现层状态转移”。它基于客户端-服务器模型和无状态操作,以及使用HTTP请求来处理数据。RES…

Windows中安装Python3

Windows中安装Python3 1. 下载Python安装包 首先,访问Python的官方网站 Python.org,选择适合你Windows版本的Python安装包。 2. 运行安装包 下载完成.exe文件后,双击运行安装包。在安装过程中,有一些关键的选项需要特别注意&a…

虚幻引擎结构之UWorld

Uworld -> Ulevel ->Actors -> AActor 在虚幻引擎中,UWorld 类扮演着至关重要的角色,它就像是游戏世界的总指挥。作为游戏世界的核心容器,UWorld 包含了构成游戏体验的众多元素,从游戏实体到关卡设计,再到物…

2024第一届Solar杯应急响应挑战赛

日志流量 日志流量-1 直接放到D盾分析 解码 flag{A7b4_X9zK_2v8N_wL5q4} 日志流量-2 哥斯拉流量 工具解一下 flag{sA4hP_89dFh_x09tY_lL4SI4} 日志流量-3 tcp流6复制data流 解码 改pdf flag{dD7g_jk90_jnVm_aPkcs} 内存取证 内存取证-1 vol.py -f 123.raw --profileWin…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript (简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

Spring Boot教程之四十:使用 Jasypt 加密 Spring Boot 项目中的密码

如何使用 Jasypt 加密 Spring Boot 项目中的密码 在本文中,我们将学习如何加密 Spring Boot 应用程序配置文件(如 application.properties 或 application.yml)中的数据。在这些文件中,我们可以加密用户名、密码等。 您经常会遇到…

七、队列————相关概念详解

队列————相关概念详解 前言一、队列1.1 队列是什么?1.2 队列的类比 二、队列的常用操作三、队列的实现3.1 基于数组实现队列3.1.1 基于环形数组实现的队列3.1.2 基于动态数组实现的队列 3.2 基于链表实现队列 四、队列的典型应用总结 前言 本篇文章,我们一起来…

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具,可用于构建知识库,实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库,包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…

Pandas03

Pandas01 Pandas02 文章目录 内容回顾1 排序和统计函数2 缺失值处理2.1 认识缺失值2.2 缺失值处理- 删除2.3 缺失值处理- 填充非时序数据时序数据 3 Pandas数据类型3.1 数值类型和字符串类型之间的转换3.2 日期时间类型3.3 日期时间索引 4 分组聚合4.1 分组聚合的API使用4.2 分…

springboot整合log4j2日志框架1

一 log4j基本知识 1.1 log4j的日志级别 Log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从低到高依次为:All,trace,debug,info,warn,err…

Spring源码_05_IOC容器启动细节

前面几章,大致讲了Spring的IOC容器的大致过程和原理,以及重要的容器和beanFactory的继承关系,为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的,接下来的每一章都是从总体脉络中, 去研究之前没看的一些重要…

WPF使用OpenCvSharp4

WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中,右键单击项目名称,选择“管理 NuGet 包”。搜索并安装以下包: OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…

TCP-UDP调试工具推荐:Socket通信测试教程(附详细图解)

前言 在网络编程与应用开发中,调试始终是一项不可忽视的重要环节。尤其是在涉及TCP/IP、UDP等底层网络通信协议时,如何确保数据能够准确无误地在不同节点间传输,是许多开发者关注的核心问题。 调试的难点不仅在于定位连接建立、数据流控制及…

【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南

下面详细介绍所提到的两条命令,它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip (Python 的包管理工具&#xf…

【数据结构】单链表的使用

单链表的使用 1、基本概念2、链表的分类3、链表的基本操作a、单链表节点设计b、单链表初始化c、单链表增删节点**节点头插:****节点尾插:****新节点插入指定节点后:**节点删除: d、单链表修改节点e、单链表遍历,并打印…

虚幻引擎是什么?

Unreal Engine,是一款由Epic Games开发的游戏引擎。该引擎主要是为了开发第一人称射击游戏而设计,但现在已经被成功地应用于开发模拟游戏、恐怖游戏、角色扮演游戏等多种不同类型的游戏。虚幻引擎除了被用于开发游戏,现在也用于电影的虚拟制片…

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具,可以自动安装、升级、删除软件包的功能,可以自动解决软件包之间的依赖关系,使得用户更方便软件包的管理。要使用yum必须要进行配置,个人将其分为三类,本地yum源、局域网yum源、第三方yum源&#…

Linux上更新jar包里的某个class文件

目标:替换voice-1.0.jar里的TrackHandler.class文件 一.查询jar包里TrackHandler.class所在的路径 jar -tvf voice-1.0.jar |grep TrackHandler 二.解压出TrackHandler.class文件 jar -xvf voice-1.0.jar BOOT-INF/classes/com/yf/rj/handler/TrackHandler.cla…

机器学习中回归预测模型中常用四个评价指标MBE、MAE、RMSE、R2解释

在机器学习中,评估模型性能时常用的四个指标包括平均绝对误差(Mean Absolute Error, MAE)、均方误差(Mean Squared Error, MSE)、均方根误差(Root Mean Squared Error, RMSE)和决定系数&#xf…

基于SpringBoot的Jwt认证以及密码aes加密解密技术

目录 前言 1.SpringBoot项目的创建 2.相关技术 3.项目架构 4.项目关键代码 5.项目最终的运行效果 ​编辑 6.PostMan测试接口结果 前言 学习了SpringBoot之后,才觉得SpringBoot真的很方便,相比传统的SSH,SSM,SpringBo…