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

【AI深度学习基础】PyTorch初探

引言

PyTorch 是由 Facebook 开源的深度学习框架,专门针对 GPU 加速的深度神经网络编程,它的核心概念包括张量(Tensor)、计算图和自动求导机制。PyTorch作为Facebook开源的深度学习框架,凭借其动态计算图直观的API设计,已成为学术界和工业界的主流选择。与TensorFlow的静态图不同,PyTorch支持即时执行模式,配合强大的GPU加速能力,特别适合快速原型开发。截至2023年,PyTorch在arXiv论文中的提及率已超过60%,广泛应用于计算机视觉、自然语言处理、推荐系统等领域。

核心结构图:
PyTorch核心结构


一、安装指南

推荐使用Anaconda进行环境管理:

# 查看CUDA版本(需提前安装NVIDIA驱动)
nvidia-smi # 创建虚拟环境(以CUDA 11.3为例)
conda create -n pytorch python=3.9
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch# 验证安装
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"

二、PyTorch核心特性

  1. 动态计算图 vs 静态计算图
    • 动态计算图:PyTorch采用动态计算图,即在运行时根据操作动态构建计算图。这种方式具有灵活性高、调试方便等优点,开发者可以随时对计算图进行修改和调整。
    • 静态计算图:与动态计算图相对,静态计算图在运行前需要先定义好计算图的结构,然后在运行时按照定义好的结构进行计算。这种方式在运行效率上可能更高,但在灵活性和调试方面相对不如动态计算图。
定义操作
即时执行
实时调试
预定义图结构
图优化
批量执行

特性对比表:

特性PyTorch动态图TensorFlow静态图
调试难度支持pdb实时调试需借助tf.debug工具
灵活性支持条件分支图结构固定
部署方式TorchScript转换SavedModel直接导出
  1. GPU加速与CUDA支持

    • PyTorch支持GPU加速,可以通过CUDA来利用GPU的强大计算能力。开发者可以将张量和模型移动到GPU上进行计算,从而大大提高计算速度。
    • 要使用GPU加速,需要确保你的系统安装了支持CUDA的显卡,并正确安装了CUDA驱动程序和相关库。
  2. 自动微分系统(Autograd)

    • PyTorch的自动微分系统Autograd能够自动计算张量的梯度,这对于神经网络的训练至关重要。开发者只需要定义前向传播过程,Autograd会自动计算反向传播所需的梯度。

三、核心数据结构-Tensor

1. 基础操作速查表

操作类型代码示例
创建张量torch.zeros(3,2)
随机初始化torch.randn(3,3)
类型转换tensor.float()
数学运算torch.matmul(A, B)

2. Numpy互操作性

import numpy as np
arr = np.random.rand(3,3)
tensor = torch.from_numpy(arr)  # Numpy转Tensor
new_arr = tensor.numpy()        # Tensor转Numpy

3. 神经网络构建基础示例

class MLP(nn.Module):def __init__(self):super().__init__()self.layers = nn.Sequential(nn.Linear(784, 256),nn.ReLU(),nn.Linear(256, 10))def forward(self, x):return self.layers(x)

4. 激活函数选择指南

函数类型适用场景PyTorch实现
ReLU隐藏层首选nn.ReLU()
Sigmoid二分类输出层nn.Sigmoid()
Softmax多分类输出层nn.Softmax(dim=1)

四、线性回归完整实现

import matplotlib.pyplot as plt# 数据生成与可视化
X = torch.linspace(-5, 5, 100).reshape(-1,1)
y = 2*X + 1 + torch.randn(X.size())*0.8
plt.scatter(X.numpy(), y.numpy(), alpha=0.6)# 模型定义
model = nn.Linear(1, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.02)# 训练过程
loss_history = []
for epoch in range(200):pred = model(X)loss = F.mse_loss(pred, y)optimizer.zero_grad()loss.backward()optimizer.step()loss_history.append(loss.item())# 结果可视化
plt.plot(loss_history)
plt.xlabel('Epoch')
plt.ylabel('Loss')

五、常见问题及避坑指南

  1. 维度不匹配错误

    # 错误示例:矩阵乘法维度不匹配
    A = torch.randn(3,4)
    B = torch.randn(5,6)
    torch.matmul(A, B)  # 触发RuntimeError
    

    解决方案:使用torch.reshape()torch.unsqueeze()调整维度

  2. 梯度累积问题

    # 正确做法:每个batch前清空梯度
    for data in dataloader:optimizer.zero_grad()loss.backward()optimizer.step()
    
  3. GPU显存溢出

    • 使用batch_size=32逐步调试
    • 检查是否有未释放的中间变量

六、总结说明

通过本阶段的学习,我们了解了PyTorch的基本概念和核心特性,掌握了张量的基本操作和神经网络的构建方法,并通过一个简单的线性回归示例进行了实践。PyTorch的灵活性和强大功能为我们后续深入学习深度学习奠定了基础。

七、结语

PyTorch是一个非常强大且易于使用的深度学习框架,适合初学者入门和开发者进行各种深度学习项目。希望本篇学习指南能够帮助你迈出PyTorch学习的第一步,期待你在后续的学习和实践中不断探索,利用PyTorch构建出更加优秀的模型。

相关文章:

【AI深度学习基础】PyTorch初探

引言 PyTorch 是由 Facebook 开源的深度学习框架,专门针对 GPU 加速的深度神经网络编程,它的核心概念包括张量(Tensor)、计算图和自动求导机制。PyTorch作为Facebook开源的深度学习框架,凭借其动态计算图和直观的API设…...

探索.NET 10 的新特性,开发效率再升级!

前言 最近,.NET 10 发布啦,作为长期支持(LTS)版本,接下来的 3 年里它会给开发者们稳稳的幸福。今天咱就来唠唠它都带来了哪些超实用的新特性。可在指定链接下载。 新特性 下面将介绍了.NET 10的新特性,其…...

< 自用文儿 > CertBot 申请 SSL 证书 使用 challenge 模式 避开防火墙的阻挡

环境: 腾讯 VPS 腾讯会向你销售 SSL , 这个本是免费的。CertBot 默认申请证书要用到 80 端口,会蹭边什么什么条款,备案法律来阻止80端口的通讯,没有网站也一样被阻拦。 通过腾讯买的域名: bestherbs.cn …...

系统架构评估方法-ATAM方法

架构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM) 是在SAAM的基础上 发展起来的,主要针对性能、实用性、安全性和可修改性,在系统开发之前,对这些质量属性 进行评价和折中。 (1)特定目标。 ATAM的目标是在考虑多个相互影响的质…...

deepseek在pycharm 中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm,如何接入deepseek是我们窥探ai代码编写的第一步,熟悉起来总没坏处。 1、官网安装pycharm社区版(免费),如果需要安装专业版,需要另外找破解码。 2、安装Ollama…...

硬通货用Deekseek做一个Vue.js组件开发的教程

安装 Node.js 与 Vue CLI‌ npm install -g vue/cli vue create my-vue-project cd my-vue-project npm run serve 通过 Vue CLI 可快速生成项目骨架,默认配置适合新手快速上手 目录结构‌ src/ ├── components/ # 存放组件文件 │ └── …...

类、方法和变量可使用的访问控制符和修饰符的表格展示

1. 类的修饰符 修饰符类别修饰符说明访问控制符public顶级类使用时,对所有包可见。嵌套类也可以使用。默认没有写访问修饰符时,仅在同一包内可见。protected (仅嵌套类)同一包内以及不同包的子类可见。private (仅嵌套类)仅在外部类内部可见。非访问修饰…...

FreeRTOS 任务管理与运行时间统计:API 解析与配置实践

1. FreeRTOS 任务相关 API 函数 1.1 FreeRTOS 任务相关 API 函数介绍 FreeRTOS 提供了一系列 API 来管理任务的状态、优先级和运行信息。以下是任务管理相关的主要 API 及其功能说明: 1.1.1 任务优先级管理 API 函数作用uxTaskPriorityGet()获取任务的当前优先级…...

基于提示驱动的潜在领域泛化的医学图像分类方法(Python实现代码和数据分析)

摘要 医学图像分析中的深度学习模型易受数据集伪影偏差、相机差异、成像设备差异等导致的分布偏移影响,导致在真实临床环境中诊断不可靠。领域泛化(Domain Generalization, DG)方法旨在通过多领域训练提升模型在未知领域的性能,但…...

【C++】5.4.3 范围for语句

范围for语句基本形式: for(声明变量:序列容器) {循环执行语句; } 其中,“序列容器”是指花括号括起来的初始值列表、数组、vector或者string等类型的对象,主要特点是拥有能返回迭代器的 begin() 和 end() 成员; “声明变量”是一个类似声明…...

LeetCode 排序章节

快速排序 简单 LCR 159. 库存管理 III 仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限。 示例 1: 输入:stock [2,5,7,4], cnt 1 输出&a…...

常见的限流算法有哪些?

一、固定窗口算法(Fixed Window) 原理: 将时间划分为固定长度的窗口(如1秒、1分钟),每个窗口内统计请求次数,超过阈值则拒绝后续请求。例如:每秒限流100次,窗口结束后计…...

【pyqt】(十一)单选框

控件-单选框 单选框的类名为QRadioBox,在学习新的控件的时候, 需要掌握的内容主要除了属性之外,其信号触发方法也非常重要。还可以利用Designer来辅助我们进行学习,尤其是利用Designer的属性展示和设置。 单选框中,最…...

深度解析:视频软编码与硬编码的优劣对比

视频编码 一、基本原理与核心技术 压缩原理 通过时空冗余消除实现数据压缩: 空间冗余:利用帧内预测(如DC/角度预测)消除单帧内相邻像素相似性。时间冗余:运动估计与补偿技术(ME/MC)减少连续帧间…...

[Windows] 批量为视频或者音频生成字幕 video subtitle master 1.5.2

参考原文:[Windows] 批量为视频或者音频生成字幕 video subtitle master 1.5.2 Video Subtitle Master 1.5.2 介绍 Video Subtitle Master 1.5.2 是一款功能强大的客户端工具,能够批量为视频或音频生成字幕,还支持批量将字幕翻译成其他语言…...

Lab 3 Page Table

题目链接 我的问题: 1 每个进程的kernel stack是干啥的来着?在何时初始化的? 题目2:A kernel page table per process (hard) 1 一些题目要求 Your first job is to modify the kernel so that every process uses its own c…...

爬虫逆向:脱壳工具 frida-dexdump 的使用详解

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. 工具简介1.1 frida-dexdump介绍1.2 frida-dexdump支持场景1.3 frida-dexdump优点1.4 frida-dexdump工具使用方法2. 环境准备3. 安装 frida-dexdump4. 使用步骤4.1 步骤一:连接 Android 设备4.1 步骤二:安装目标应用…...

图论-腐烂的橘子

994.腐烂的橘子 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到…...

FPGA-DE2115开发板实现4位全加器、3-8译码器。

文章目录 一、安装quartus二、4位全加器三、3-8译码器(8段数码管)四、参考文章 一、安装quartus 安装quartus参考文章:Quartus Prime 18.0与ModelSim的安装 Quartus II 18.0安装教程(非常详细)从零基础入门到精通&…...

【leetcode hot 100 48】旋转图像

方法一:(原地旋转)对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。matrix[row][col]在旋转后的新位置为matrix[col][n−row−1]。只要旋转四次就能回到原点。 class Solution {public vo…...

TWind 的黑马点评随笔

TWind 的黑马点评随笔 ​ 目前是把黑马点评的技术部分完全做完了,不能说吃得饱饱,也算个半饱吧。 ​ 黑马点评严格来说不算项目,因为它给的前端过于垃圾,内容又重在Redis,所以称之为Redis练习貌似跟贴切。 ​ 尽管如…...

Fork/Join 框架详解:分支合并的高性能并发编程

目录 引言 一、Fork/Join 框架概述 1.1 什么是 Fork/Join 框架? 1.2 Fork/Join 框架的核心组件 二、Fork/Join 框架的使用步骤 三、Fork/Join 框架的示例 3.1 示例 1:计算数组元素之和 代码实现 代码解析 3.2 示例 2:并行排序 代码…...

爬虫逆向:脱壳工具ZjDroid的使用详解

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. 工具简介2. 环境准备3. ZjDroid工具的使用方法4. 使用步骤4.1 步骤一:连接 Android 设备4.2 步骤二:安装目标应用4.3 步骤三:启动 ZjDroid 脱壳脚本4.4 步骤四:触发应用加载壳内代码4.5 步骤五:获取脱壳后的文件…...

上海市闵行区数据局调研云轴科技ZStack,共探数智化转型新路径

为进一步深化人工智能、大模型技术的应用,推动区域数字经济高质量发展,2025年2月27日,上海市闵行区数据局局长吴畯率队赴上海云轴科技股份有限公司(以下简称“云轴科技ZStack”)开展专题调研。此次调研旨在深入了解企业…...

Python----数据分析(Matplotlib五:pyplot的其他函数,Figure的其他函数, GridSpec)

一、pyplot的其他函数 1.1、xlabel 在matplotlib中, plt.xlabel() 函数用于为当前活动的坐标轴(Axes)设置x轴的 标签。当你想要标识x轴代表的数据或单位时,这个函数非常有用。 plt.xlabel(xlabel text) 1.2、ylabel 在matplotl…...

Android Coil总结

文章目录 Android Coil总结概述添加依赖用法基本用法占位图变形自定义ImageLoader取消加载协程支持缓存清除缓存监听 简单封装 Android Coil总结 概述 Coil 是一个用于 Android 的 Kotlin 图像加载库,旨在简化图像加载和显示的过程。它基于 Kotlin 协程&#xff0…...

mybatisplus 开发流程

目录 什么是mybatisplus? 创建项目 先创建一个简单的Java项目​编辑 引入依赖 1.引入父依赖 2.引入其他依赖 springboot配置 application.yml qppication-dev.yml 创建包 实体类 映射(创建一个接口) 构建测试环境 进行方法的实…...

父进程和子进程

思维导图&#xff1a; 1.使用父子进程实现一个图片的拷贝 要求父进程拷贝前一部分 子进程拷贝后一部分 使用diff查看两个文件是否相同 #include <head.h> int main(int argc, const char *argv[]) {int fd1open("/home/ubuntu/3.6/xiaoxin.bmp",O_RDONLY);…...

网络安全 信息安全 计算机系统安全

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、网络安全概述 1、网络安全&#xff1a;网络安全是指通过采取必要措施&#xff0c;防范对网络的攻击、侵入、干扰、破坏和非法使用以及意外事故&#xff0c;…...

C语言基础2

一、变量的作用域 局部变量的作用域是变量所在的局部范围&#xff0c;全局变量的作用域是整个工程。 int main() { { int a 10; printf("a %d\n", a); } printf("a %d\n", a); //报错位置 return 0; } 这里会发生报错&#xff1a; “a”: 未声明的…...

在springboot项目中引入log4j 2.x

步骤 1&#xff1a;排除 Spring Boot 默认的日志依赖 Spring Boot 默认使用 Logback 作为日志框架&#xff0c;所以需要先排除它&#xff0c;在 pom.xml&#xff08;如果是 Maven 项目&#xff09; 中添加如下配置&#xff1a; <dependency><groupId>org.springf…...

大模型推理显存优化:从KV Cache压缩到量化策略实战

引言&#xff1a;显存瓶颈的困境 随着ChatGPT等大语言模型的广泛应用&#xff0c;模型推理过程中的显存占用问题日益凸显。以典型的Llama2-13B模型为例&#xff0c;单次推理就需要占用超过6GB显存&#xff0c;严重制约了服务吞吐量和硬件利用率。本文将深入探讨大模型推理中的…...

使用阿里云 API 进行声音身份识别的方案

使用阿里云 API 进行声音身份识别的方案 阿里云提供 智能语音交互&#xff08;智能语音识别 ASR&#xff09; 和 声纹识别&#xff08;说话人识别&#xff09; 服务&#xff0c;你可以利用 阿里云智能语音 API 进行 说话人识别&#xff0c;实现客户身份验证。 方案概述 准备工…...

03 面向对象

1、封装 1.1 属性和行为 #include <iostream> using namespace std;// 面向对象三大特性&#xff1a;封装、继承、多态/* 封装的语法&#xff1a;class 类名 { 访问权限:属性&#xff08;成员变量&#xff09;行为&#xff08;成员函数&#xff09; }; */class Hero {/…...

【YOLOv12改进trick】多尺度大核注意力机制MLKA模块引入YOLOv12,实现多尺度目标检测涨点,含创新点Python代码,方便发论文

&#x1f34b;改进模块&#x1f34b;&#xff1a;多尺度大核注意力机制&#xff08;MLKA&#xff09; &#x1f34b;解决问题&#x1f34b;&#xff1a;MLKA模块结合多尺度、门控机制和空间注意力&#xff0c;显著增强卷积网络的模型表示能力。 &#x1f34b;改进优势&#x1f…...

java 初学知识点总结

自己总结着玩 1.基本框架 public class HelloWorld{ public static void main(String[] args){ }//类名用大写字母开头 } 2.输入&#xff1a; (1)Scanner:可读取各种类型&#xff0c;字符串相当于cin>>; Scanner anew Scanner(System.in); Scan…...

File文件和目录

一、文件和目录相关概念 计算机文件&#xff08;File&#xff09;:以计算机硬盘为载体存储在计算机上的信息集合,可以是文本&#xff08;.txt&#xff09;、图片(.jpg、.png、.jpeg)、视频(.mp4)、程序(.exe)等&#xff0c;文件一般有拓展名&#xff0c;表示文件的类型。 文件…...

C++ 数据结构详解及学习规划

C++数据结构详解及学习规划 一、C++常用数据结构详解与示例 以下是C++中核心数据结构的分类及具体实现示例: 1. 线性数据结构 a. 数组(Array) • 定义:存储固定大小、同类型元素的连续内存结构。 • 特点:快速随机访问(O(1)),但插入/删除效率低(O(n))。 • 应用场…...

Mac同时安装jdk8和jdk17,默认选择jdk8

在Mac上同时安装JDK 8和JDK 17&#xff0c;并设置默认版本为JDK 8&#xff0c;可以按照以下步骤操作&#xff1a; 一、下载并安装JDK 8和JDK 17 下载JDK 8 访问Oracle JDK下载页面。在“Java SE Archive Downloads”部分&#xff0c;找到JDK 8的下载链接。选择适合您Mac芯片类…...

PTA 7-6 列出连通集

题目详情&#xff1a; 给定一个有 n 个顶点和 m 条边的无向图&#xff0c;请用深度优先遍历&#xff08;DFS&#xff09;和广度优先遍历&#xff08;BFS&#xff09;分别列出其所有的连通集。假设顶点从 0 到 n−1 编号。进行搜索时&#xff0c;假设我们总是从编号最小的顶点出…...

计算机毕业设计SpringBoot+Vue.js疗养院管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

分布式系统设计(架构能力)

一、微服务架构 服务治理 Nacos 注册中心&#xff08;AP模式&#xff09; CAP选择&#xff1a;Nacos 默认采用 AP 模式&#xff08;可用性 分区容忍性&#xff09;&#xff0c;通过心跳检测实现服务健康管理。服务发现&#xff1a;客户端定时拉取服务列表&#xff0c;支持权重…...

CR电路介绍

CR电路&#xff08;RC电路&#xff09;介绍 CR电路&#xff08;电阻-电容电路&#xff09;由电阻&#xff08;R&#xff09;和电容&#xff08;C&#xff09;组成&#xff0c;是电子系统中的基础模块&#xff0c;广泛用于信号处理、定时、滤波等场景。以下是其核心功能、实现方…...

Redis数据结构,渐进式遍历,数据库管理

1.Redis的其他数据结构 前面我们主要讲述了Redis中比较常用的集中数据结构String&#xff0c;List&#xff0c;Hash&#xff0c;Set&#xff0c;Zset&#xff0c;但这并不代表Redis只用这几种数据结构还有如Streams&#xff0c;Geospatial&#xff0c;Hyperloglog&#xff0c;…...

动态规划01背包问题系列一>最后一块石头的重量II

这里写目录标题 题目分析&#xff1a;状态表示&#xff1a;状态转移方程&#xff1a;初始化&#xff1a;填表顺序&#xff1a;返回值&#xff1a;代码呈现&#xff1a;优化版本&#xff1a;代码呈现&#xff1a; 题目分析&#xff1a; 状态表示&#xff1a; 状态转移方程&#…...

GCC编译

目录 gcc编译c语言流程&#xff1a; 步骤 编译器 预处理 编译 汇编 链接 完整编译 多文件编译 其他常用gcc选项 gcc编译c语言流程&#xff1a; 预处理大写-E 编译为大写-S &#xff0c;生成汇编代码文件 汇编为小写-c 链接这里可以加-o 重命名a.out这个可…...

康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术

随着自动驾驶技术的迅猛发展&#xff0c;构建高保真、动态的仿真场景成为了行业的迫切需求。传统的三维重建方法在处理复杂场景时常常面临效率和精度的挑战。在此背景下&#xff0c;3D高斯点阵渲染&#xff08;3DGS&#xff09;技术应运而生&#xff0c;成为自动驾驶仿真场景重…...

Jetson NV 上解决 PyQt5 “Could not load the Qt platform plugin ‘xcb‘“ 错误

在 Jetson NV 上运行 PyQt5 应用程序时&#xff0c;可能会遇到以下错误&#xff1a; qt.qpa.xcb: could not connect to display qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. This application failed…...

计算机毕业设计Python+DeepSeek-R1大模型微博的话题博文及用户画像分析系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

文件上传靶场(1--9关)

实验环境&#xff1a; 1&#xff0c;upload的靶场环境可以去GitHub上自行查找 2&#xff0c;打开小皮面板的nginx和数据库 3&#xff0c;将文件上传的靶场部署到本地&#xff1a; 放到小皮的phpstduy_pro的www下面 小提示&#xff1a; 另外如果你用的是php7的版本建议将版…...