Pytorch深度学习教程_3_初识pytorch
欢迎来到《PyTorch深度学习教程》系列的第三篇!在前面的两篇中,我们已经介绍了Python及numpy的基本使用。今天,我们将深入探索PyTorch的核心功能,帮助你更好地理解和使用这个强大的深度学习框架。
欢迎订阅专栏:
深度学习保姆教程_tRNA做科研的博客-CSDN博客

目录
1.张量:深度学习的基石
(1)张量的理解
(2)张量的关键属性
(3)创建张量
(4)张量为何重要
2.张量操作与广播
(1)基本张量操作
(2)广播机制
(3)索引和切片
(4)数学运算
(5)常见问题与最佳实践
3.Pytorch使用GPU
(1)GPU 和 CUDA 的基本概念
(2)在 PyTorch 中启用 GPU 加速
GPU 加速的优势
4.PyTorch 的生态系统和工具
(1)TorchVision:你的计算机视觉工具箱
(2)TorchText:轻松处理自然语言处理
(3)TorchAudio:你的音频工具包
其他值得注意的工具
5.结语
1.张量:深度学习的基石
张量是深度学习中的基本数据结构,可以看作是多维数组,能够表示从简单数字到图像、文本等复杂数据。理解张量对于掌握深度学习至关重要。
(1)张量的理解
标量(零维张量):表示单个数值。
import torchscalar_tensor = torch.tensor(42)
向量(一维张量):表示一列数字。
vector_tensor = torch.tensor([1, 2, 3])
矩阵(二维张量):表示一个表格数字。
matrix_tensor = torch.tensor([[1, 2], [3, 4]])
高维张量:表示图像、视频等复杂数据。
(2)张量的关键属性
-
形状(Shape):定义张量的维度。
print(matrix_tensor.shape) # 输出:torch.Size([2, 2])
- 数据类型(Dtype):指定张量中元素的类型。
print(matrix_tensor.dtype) # 输出:torch.int64
- 设备(Device):表示张量存储的位置(CPU或GPU)。
print(matrix_tensor.device) # 输出:cpu
(3)创建张量
可以从多种方式创建张量:
-
从Python列表创建:
my_list = [1, 2, 3]
tensor = torch.tensor(my_list)
- 使用内置函数创建:
zeros_tensor = torch.zeros(3, 4) # 创建全零张量
ones_tensor = torch.ones(2, 2) # 创建全一张量
random_tensor = torch.randn(2, 3) # 创建随机数张量
(4)张量为何重要
张量提供了一种统一的方式来表示和操作深度学习中的数据,并且在GPU上进行高效计算,是现代神经网络的基石。
通过理解张量及其属性,你将能够更好地构建和训练深度学习模型。
2.张量操作与广播
张量操作和广播机制是深度学习中不可或缺的工具。本节将深入探讨核心张量操作以及广播机制。
(1)基本张量操作
与 NumPy 数组类似,可以对张量执行逐元素操作:
算术运算:
import torchx = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])sum_tensor = x + y # 逐元素相加
difference = x - y # 逐元素相减
product = x * y # 逐元素相乘
division = x / y # 逐元素相除
聚合函数:
mean_value = torch.mean(x)
sum_value = torch.sum(x)
max_value = torch.max(x)
min_value = torch.min(x)
(2)广播机制
广播机制允许不同形状的张量进行运算,只要满足一定条件。
基本广播:
scalar = 2
tensor = torch.tensor([1, 2, 3])
result = tensor * scalar # 将标量广播以匹配张量的形状
复杂广播:
a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([10, 20])
result = a * b # 将 b 广播以匹配 a 的形状
(3)索引和切片
可以使用索引和切片来访问张量的特定元素或子集。
基本索引:
tensor = torch.tensor([10, 20, 30, 40])
first_element = tensor[0]
last_element = tensor[-1]
切片:
subtensor = tensor[1:3] # 从索引 1 到 2(不包括 3)的元素
(4)数学运算
PyTorch 提供了常见的线性代数运算函数。
矩阵乘法:
matrix1 = torch.randn(2, 3)
matrix2 = torch.randn(3, 2)
product = torch.matmul(matrix1, matrix2)
点积:
vector1 = torch.tensor([1, 2, 3])
vector2 = torch.tensor([4, 5, 6])
dot_product = torch.dot(vector1, vector2)
(5)常见问题与最佳实践
形状不匹配: 确保张量具有兼容的形状以进行运算。
数据类型: 注意张量的数据类型,以避免意外结果。
GPU 利用: 利用 GPU 加速进行更快的计算。
清晰性: 使用清晰的变量名和注释以提高代码可读性。
通过理解张量操作和广播机制,可以更高效地操作和处理数据,从而更好地构建和训练深度学习模型。
3.Pytorch使用GPU
GPU 加速是深度学习中不可或缺的一部分,尤其在处理大规模数据和复杂模型时,其优势尤为显著。通过 PyTorch,我们可以轻松地利用 GPU 的强大计算能力来加速模型的训练和推理过程。
(1)GPU 和 CUDA 的基本概念
GPU(Graphics Processing Unit):最初设计用于图像处理,但其并行计算能力使其成为处理深度学习任务的理想选择。
CUDA(Compute Unified Device Architecture):这是 NVIDIA 提供的一套并行计算平台和编程模型,允许开发者利用 NVIDIA GPU 的计算能力。
我们已经在之前的教程中配置好了CUDA:
2025最新深度学习pytorch完整配置:conda/jupyter/vscode-CSDN博客
(2)在 PyTorch 中启用 GPU 加速
首先,检查系统中是否安装了 GPU 并且 PyTorch 能够识别它:
import torchif torch.cuda.is_available():print("GPU is available!")
else:print("GPU is not available.")
接下来,创建一个在 GPU 上运行的张量:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tensor = torch.randn(3, 4, device=device)
也可以在 CPU 和 GPU 之间移动张量
tensor_cpu = tensor.to("cpu")
tensor_gpu = tensor_cpu.to(device)
GPU 加速的优势
- 更快的训练时间:对于大型模型和数据集,GPU 可以显著减少训练时间。
- 实时应用:GPU 加速使得实时推理成为可能,这对于图像和视频处理等应用至关重要。
- 更大的模型:GPU 的并行计算能力使得训练更大、更复杂的模型成为可能。
4.PyTorch 的生态系统和工具
PyTorch 拥有一个充满活力的工具和库生态系统,这些工具和库补充了其核心功能,使其成为深度学习开发的综合平台。让我们探索一些关键组件。
(1)TorchVision:你的计算机视觉工具箱
TorchVision 是专为计算机视觉任务设计的包。它提供了:
- 预训练模型:如 ResNet、VGG 和 AlexNet 等先进模型。
- 数据集:常见数据集,如 ImageNet、CIFAR-10 和 MNIST。
- 变换:用于图像预处理的数据增强技术。
import torch
import torchvision# 加载预训练的 ResNet 模型
model = torchvision.models.resnet50(weights=ResNet50_Weights.IMAGENET1K_V1)# 或者使用默认权重
# model = torchvision.models.resnet50(weights=ResNet50_Weights.DEFAULT)
(2)TorchText:轻松处理自然语言处理
TorchText 用于处理基于文本的数据,提供:
- 数据集:常见 NLP 数据集,如 IMDB 和 Penn Treebank。
- 文本处理工具:分词、填充和数值化等。
- 词嵌入:预训练的词嵌入,如 GloVe 和 FastText。
import torch
from torchtext.datasets import IMDB# 加载 IMDB 数据集
train_data, test_data = IMDB(split=('train', 'test'))
(3)TorchAudio:你的音频工具包
TorchAudio 专注于音频处理,包括:
- 音频加载和保存:支持多种音频格式。
- 音频变换:音频数据增强技术。
- 特征提取:用于提取频谱图和梅尔频谱图的工具。
其他值得注意的工具
- PyTorch Lightning:高级框架,简化训练,提供分布式训练和超参数调整等功能。
- TorchX:用于管理和部署 PyTorch 模型的平台。
- Hydra:配置管理工具,用于组织复杂实验。
- Weights & Biases:实验跟踪、可视化和协作平台。
构建坚实的基础
利用 PyTorch 生态系统,你可以:
- 加速开发:利用预构建的组件和工具。
- 提升模型性能:受益于优化的实现和数据增强技术。
- 简化工作流:有效管理实验和协作。
通过结合 PyTorch 和这些工具,你可以高效地应对各种深度学习挑战。
记住:PyTorch 生态系统在不断演进,因此了解最新发展至关重要。
5.结语
本教程主要是快速入门,熟悉整个框架,对于比较细节的地方,我们通过具体的项目进行学习!下次见!
相关文章:
Pytorch深度学习教程_3_初识pytorch
欢迎来到《PyTorch深度学习教程》系列的第三篇!在前面的两篇中,我们已经介绍了Python及numpy的基本使用。今天,我们将深入探索PyTorch的核心功能,帮助你更好地理解和使用这个强大的深度学习框架。 欢迎订阅专栏: 深度…...
基于Flask的艺恩影片票房分析系统的设计与实现
【Flask】基于Flask的艺恩影片票房分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统利用Python编程语言进行后端开发,结合Echarts进行数据的可视化展示&a…...
ollama-chat-ui-vue,一个可以用vue对接ollama的开源项目,可接入deepSeek
ollama-chat-ui-vue 使用vue3 vite elementUi 搭建的前端chat,通过ollama可与模型对话,目前支持独立思考,切换模型(联网查询后续支持) github地址:ollama-chat-ui-vue 制作不易github点点star,谢谢 前置工作 安装ollama,ollama官网地址 安装完olla…...
TCP开发
TCP客户端编程开发 任何的网络编程套接字开发的两种工作模式:TCP网络、UDP网络。 TCP和UDP的介绍 TCP:连接式网络通信,长连接通信或流式通信。TCP的通信一般稳定、可靠,但传输速度往往没有UDP快。其中有这样一个概念----心跳时…...
【核心算法篇十二】《深入解剖DeepSeek多任务学习:共享表示层的24个设计细节与实战密码 》
引言:为什么你的模型总在"精神分裂"? 想象你训练了一个AI实习生: 早上做文本分类时准确率90%下午做实体识别却把"苹果"都识别成水果公司晚上做情感分析突然开始输出乱码这就是典型的任务冲突灾难——模型像被不同任务"五马分尸"。DeepSeek通…...
Java 基于SpringBoot+Vue 的旅游网站信息化管理系统设计与实现
Java 基于SpringBootVue 的旅游网站信息化管理系统设计与实现 博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系ἴ…...
构建简单RAG代码实现
步骤1:文档准备与切割 假设我们有一个关于机器学习的PDF文档需要处理。 示例代码: Python 深色版本 from llama_index import SimpleDirectoryReader # 加载文档 documents SimpleDirectoryReader(./data).load_data() 说明: 使用Simple…...
kubeadm拉起的k8s集群证书过期的做法集群已奔溃也可以解决
kubeadm拉起的k8s集群证书过期的做法 这个是很久之前遇到的了,今天有空(心血来潮)就都回忆回忆写在这里为爱发光,部分内容来自arch先生(死党)的帮助。有时候有很多部门提了建k8s的需求,有些是临…...
Ubuntu:20.04更新cmake到更高版本
从输出信息可以看出,您当前的系统中已经安装了 cmake,但版本是 3.16.3,而您的项目需要 CMake 3.18 或更高版本。默认情况下,Ubuntu 20.04 的官方软件仓库中提供的 CMake 版本较低(如 3.16.3),因…...
php 系统命令执行及绕过
文章目录 php的基础概念php的基础语法1. PHP 基本语法结构2. PHP 变量3.输出数据4.数组5.超全局变量6.文件操作 php的命令执行可以执行命令的函数命令执行绕过利用代码中命令(如ls)执行命令替换过滤过滤特定字符串神技:利用base64编码解码的绕…...
【Java】泛型与集合篇 —— Set 接口
目录 Set 接口及实现类HashSet 类特点内部实现构造方法LinkedHashSet 类基本概念特点构造方法常用方法适用场景用 Set 对象实现集合运算TreeSet 类特性构造方法常用方法注意事项对象顺序自然排序定制排序注意事项Set 接口及实现类 HashSet 类 HashSet 是 Java 集合框架中 Set…...
基于YOLOv8的人脸识别系统
文章目录 一.前言 二.原理阐述 三.源代码 四.代码改进 五.流程概述 一.前言 原开源项目是对于某时段校园门口学生出入的视频,使用YOLOv8目标检测算法以及yolov8l-face模型将目标换算成只检测人脸, 通过该模型中的track技术实现检测出的人脸进行自动跟踪, 通过跟踪到的…...
HBuilderX中,VUE生成随机数字,vue调用随机数函数
Vue 中可以使用JavaScript的Math.random() 函数生成随机数,它会返回 0 到 1 之间的浮点数, 如果需要0到1000之前的随机数,可以对生成的随机数乘以1000,再用js的向下取整函数Math.floor() 。 let randNum Math.random(); // 生成…...
论文笔记-WSDM2024-LLMRec
论文笔记-WSDM2024-LLMRec: Large Language Models with Graph Augmentation for Recommendation LLMRec: 基于图增强的大模型推荐摘要1.引言2.前言2.1使用图嵌入推荐2.2使用辅助信息推荐2.3使用数据增强推荐 3.方法3.1LLM作为隐式反馈增强器3.2基于LLM的辅助信息增强3.2.1用户…...
计算四个锚点TOA定位中GDOP的详细步骤和MATLAB例程
该MATLAB代码演示了在三维空间中,使用四个锚点的TOA(到达时间)定位技术计算几何精度衰减因子(GDOP)的过程。如需帮助,或有导航、定位滤波相关的代码定制需求,请联系作者 文章目录 DOP计算原理MATLAB例程运行结果示例关键点说明扩展方向另有文章: 多锚点Wi-Fi定位和基站…...
Lookup Join显著增强,Paimon1.0版本如何做的?
Hi,大家好,我们又满血复活了。 2025年开年更新频率不快,一方面是大模型如火如荼,也一直在补相关知识;另外一方面,新的一年里身体健康被我摆到了第一位,不会像前几年那么卷了。 后续我们的更新会…...
【Golang学习之旅】如何在Go语言中使用Redis实现分布式锁,并解决锁过期导致的并发问题?
文章目录 前言1. 分布式锁的基本原理1.1 锁过期导致并发问题的解决: 2. Go实现分布式锁3. 代码实现分布式锁3.1 安装Go-Redis包3.2 创建分布式锁工具函数3.3 代码解析 4. 如何避免锁过期导致的并发问题4.1 延长锁的有效期4.2 利用Redis的WATCH命令(乐观锁…...
Vue前端开发-Vant组件之Button组件
Vant 有丰富的UI组件,而基础组件是全部组件的核心,基础组件中将常用的元素做了二次的开发,封装成Vant格式组件,如按钮、图片和布局等,这些封装后的Vant组件,提供了更多面向实际应用的属性和事件,…...
DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入)
前言 在当今数字化时代,AI编程助手已成为提升开发效率的利器。DeepSeek作为一款强大的AI模型,凭借其出色的性能和开源免费的优势,成为许多开发者的首选。今天,就让我们一起探索如何将DeepSeek接入PyCharm,实现高效、智…...
【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux网络编程笔记: https://blog.cs…...
健康养生:从生活细节开启活力之旅
在忙碌的现代生活里,健康养生不再是一个抽象概念,而是关乎生活质量的关键。其实,只要掌握日常养生要点,就能轻松开启活力满满的健康生活。 饮食是健康的基石。每日饮食需遵循 “彩虹原则”,摄入多种颜色食物。早餐时&…...
DeepSeek + Mermaid编辑器——常规绘图
下面这张图出自:由清华大学出品的 《DeepSeek:从入门到精通》。 作为纯文本生成模型,DeepSeek虽不具备多媒体内容生成接口,但其开放式架构允许通过API接口与图像合成引擎、数据可视化工具等第三方系统进行协同工作,最终…...
DevOps自动化部署详解:从理念到实践
在软件开发日益快速迭代的今天,如何以高效、稳定且可重复的方式将代码变更从开发环境自动部署到生产环境成为企业竞争的重要因素。DevOps 正是在这一背景下应运而生,它打破开发、测试、运维之间的壁垒,通过自动化工具和流程,实现持…...
【拥抱AI】GPT Researcher的诞生
一、GPT Researcher 研究过程总结 GPT Researcher 是一个开源的自主智能体,旨在通过利用人工智能技术实现高效、全面且客观的在线研究。它通过一系列创新的设计和优化,解决了传统研究工具(如 AutoGPT)中存在的问题,如…...
Redis7——基础篇(三)
前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二) 接上期内容:上期完成了Redis的基本…...
ES12 weakRefs的用法和使用场景
ES12 (ECMAScript 2021) 特性总结:WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一个新特性,用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象,即使该对象仍然被弱引用持有。WeakRef 通常与 FinalizationRegistry 结合使…...
【Elasticsearch】搜索时分片路由
Elasticsearch 的Search Shard Routing(搜索分片路由)是一个核心机制,用于在分布式环境中高效地分发和执行搜索请求,确保查询能够快速、准确地返回结果,同时充分利用集群资源并保持系统的高可用性。以下是结合上述内容…...
MySQL登录问题总结
不管何种数据库,使用的第一步都是先登录。 MySQL命令行登录语句:mysql -u username -P port -p -D database_name 登录MySQL的报错一般从报错信息都能得到反馈,常见报错原因分析如下,实例中的以test用户为例,登录环境为…...
一些耳朵起茧子的名词解释
1 web应用 1.1 web应用的概念 Web应用(Web Application) 是一种通过浏览器访问的软件程序,它运行在服务器上,用户通过网络(如互联网或内网)与它进行交互。与传统网站(主要提供静态内容&#x…...
Redis 持久化:从零到掌握
Redis 作为一款广泛使用的内存数据库,虽然核心功能是基于内存提供高性能的数据存取,但在实际应用中,数据的持久化是不可忽视的。毕竟,内存中的数据一旦出现故障或重启,就会面临数据丢失的风险。因此,Redis …...
