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

32- PyTorch基础 (PyTorch系列) (深度学习)

知识要点

  •  PyTorch可以说是现阶段主流的深度学习框架 .


1 PyTorch入门

1.1 PyTorch概述

Torch是什么?一个火炬!其实跟Tensorflow中Tensor是一个意思,可以当做是能在GPU中计算的矩阵.,也可以当做是ndarray的GPU版

PyTorch可以说是现阶段主流的深度学习框架,武林盟主之争大概是这个历史。15年底之前Caffe是老大哥,随着Tensorflow的诞生,霸占江湖数载,19年起无论从学术界还是工程界PyTorch已经霸占了半壁江山!

1.2 PyTorch安装

打开PyTorch 官网, 根据官网的安装提示选择符合自己情况的选项, 生成安装语句, 拷贝安装语句进行安装.

2. PyTorch张量

Pytorch最基本的操作对象是Tensor(张量),它表示一个多维矩阵.

张量类似于NumPy的ndarrays,张量可以在GPU上使用以加速计算。

2.1 张量与数据类型

import torch
import numpy as np
import pandas as pd
  • 创建tensor: 可以直接使用python列表或者ndarray创建tensor
x = torch.tensor([6, 2])
x = torch.tensor(np.array([1, 2, 3]))
  • 与ndarray类似, pytorch也有很多快捷的方法用来创建张量.
import torch# 创建一个[0, 1)之间的随机均匀分布
x = torch.rand(2, 3)
print(x)# 创建一个标准正态分布
x = torch.randn(2, 3)
print(x)# 创建全是0的tensor
x = torch.zeros(2, 3)
print(x)# 创建全是1的tensor
x = torch.ones(2, 3)
print(x)

  • 类似的可以通过shape或size获取tensor的形状, size可以具体制定获取哪一个维度的形状大小:
x = torch.ones(2, 3, 4)
x.shape
# 输出 torch.Size([2, 3, 4])
x.size()
# 输出 torch.Size([2, 3, 4])
x.size(0)
# 输出 2

2.2 Tensor基本数据类型

pytorch中的tensor有以下基本数据类型

  • 32位浮点型: torch.float32

  • 64位浮点型: torch.float64

  • 32位整型: torch.int32

  • 16位整型: torch.int16

  • 64位整型: torch.int64

我们可以在创建tensor的时候通过dtype指定数据类型:

x = torch.tensor([6, 2], dtype=torch.float32)# 通过.type转换数据类型
x.type(torch.int64)    # tensor([6, 2])

2.3 与ndarray数据类型的转换

ndarray可以和tensor进行转换

import numpy as np# 标准正太分布
a = np.random.randn(2, 3)
# 通过from_numpy可以把ndarray转化为tensor
x1 = torch.from_numpy(a)
# tensor通过numpy也可以转化为ndarray
x1.numpy()
'''array([[ 0.00346987,  0.49298463,  0.8929266 ],[-1.21628393, -0.93081964, -0.16680752]])'''

2.4 张量运算

tensor的运算规则和numpy的运算规则很类似:

import numpy as npa = np.random.randn(2, 3)
# 通过from_numpy可以把ndarray转化为tensor
x1 = torch.from_numpy(a)
x = torch.ones(2, 3)# 和单个数字运算, tensor中每个元素分别和这个数字运算
x + 3
'''输出:tensor([[4., 4., 4.],[4., 4., 4.]], dtype=torch.float64)'''# 两个形状相同的tensor进行运算, 对应位置元素分别运算.
x + x1# 也可以调用pytorch的运算方法, 结果是一样的
x.add(x1)# 加了下划线表示对x本来的值进行修改
x.add_(x1)# 改变tensor的形状, 使用.view, 相当于numpy中的reshape
x.view(3, 2)
x.view(-1, 1)
print(x)
'''tensor([[-0.7429,  0.5438, -0.0259],[ 0.8848, -0.0550,  2.7443]])'''# 单个元素的张量使用.item()转化为python数据
x = x.mean()   # tensor(0.5582)
x.item()    # 0.5581828951835632

2.5 张量的自动微分

将Torch.Tensor属性 .requires_grad 设置为True,

pytorch将开始跟踪对此张量的所有操作。

完成计算后,可以调用 .backward() 并自动计算所有梯度。

该张量的梯度将累加到.grad属性中。

x = torch.ones(2, 2, requires_grad=True)
x.requires_grad    # 输出 True# 进行张量运算
y = x + 2# y是由于运算而创建的,因此具有grad_fn属性
print(y.grad_fn)
# 输出: <AddBackward0 object at 0x00000096768B1708># 进行更多操作
z = y * y * 3
out = z.mean()print(z, out)
# 输出
#tensor([[27., 27.],#[27., 27.]], grad_fn=<MulBackward0>) tensor(27., grad_fn=<MeanBackward0>)

2.6 计算梯度

out.backward()    # 自动微分运算, 注意 out 是标量值
# 打印梯度 d(out)/ dx out = f(x)
print(x.grad)
# tensor([[4.5000, 4.5000],# [4.5000, 4.5000]])

当张量的 requires_grad 属性为 True 时,

pytorch会一直跟踪记录此张量的运算

当不需要跟踪计算时,可以通过将代码块包装在 with torch.no_grad(): 上下文中

print(x.requires_grad)    # True
print((x ** 2).requires_grad)    # Truewith torch.no_grad():print((x ** 2).requires_grad)    # False

也可使用 .detach() 来获得具有相同内容但不需要跟踪运算的新Tensor :

print(x.requires_grad)    # True
y = x.detach()
print(y.requires_grad)    # False

使用 requires_grad_ 就地改变张量此属性:

a = torch.randn(2, 2)
a = a*3 + 2
print(a.requires_grad)
# 输出 False
a.requires_grad_(True)
print(a.requires_grad)
# 输出True

相关文章:

32- PyTorch基础 (PyTorch系列) (深度学习)

知识要点 PyTorch可以说是现阶段主流的深度学习框架 . 1 PyTorch入门 1.1 PyTorch概述 Torch是什么&#xff1f;一个火炬&#xff01;其实跟Tensorflow中Tensor是一个意思&#xff0c;可以当做是能在GPU中计算的矩阵.&#xff0c;也可以当做是ndarray的GPU版&#xff01; PyT…...

用gdb.attach()在gdb下断点但没停下的情况及解决办法

在python中&#xff0c;如果导入了pwntools&#xff0c;就可以使用里面的gdb.attach(io)的命令来下断点。 但是这一次鼠鼠遇到了一个情况就是下了断点&#xff0c;但是仍然无法在断点处开始运行&#xff0c;奇奇怪怪。 这是我的攻击脚本 我们运行一下。 可以看到其实已经运行起…...

Linux入门篇-作业(jobs)调度(本质仍然是进程)

简介 之所以叫做作业调度&#xff0c;作业是以shell为单位的&#xff0c;一个shell建立的作业&#xff0c;不会被另外一个shell看到&#xff08;包 括root&#xff09;&#xff0c;但是仍然可以看到作业对应的进程。①前台进程&#xff08;front process&#xff09; 运行在用户…...

vue 监听 取消监听

vue 的 watch 除了可以使用声明式的配置项以外&#xff0c;还可以通过命令式 this.$watch 方法。 如下是我们比较少用的命令式&#xff08;想要初始只监听一次&#xff0c;必须命令式写法&#xff09;&#xff1a; 监听只运行一次 声明式 export default{data: {showType: fa…...

0103深度优先搜索和单点连通-无向图-数据结构和算法(Java)

文章目录1.1 走迷宫1.2 图的深度优先搜索实现1.3 算法分析及性能1. 4 单点连通性后记1.1 走迷宫 简单的迷宫&#xff0c;如下图1.1-1所示&#xff1a; 探索迷宫而不迷路&#xff0c;我们需要&#xff1a; 选择一条没有标记过的通道&#xff0c;在你走过的路上铺一条绳子&…...

进销存管理系统

技术&#xff1a;Java等摘要&#xff1a;进销存管理系统是为了实现企业仓库商品管理的系统化、规范化和自动化&#xff0c;从而提高企业管理效率而设计开发的管理信息系统。它完全取代了过去一直用人工管理的工作方式&#xff0c;避免了由于管理人员手工操作上的疏忽以及管理质…...

Sonar:VSCode配置SonarLint/SonarLint连接SonarQube

需求描述 公司为项目代码配置了Sonar检测&#xff0c;希望在VSCode中开发项目时能够同步检测结果。 注意事项 SonarQube版本必须为7.9&#xff0c;否则SonarLint无法连接&#xff08;GitHub-SonarLint-Wiki第一行就有说明&#xff09;&#xff01;&#xff01;&#xff01;S…...

陀螺仪小车(Forerake-Car)

项目简介&#xff1a;搭建一辆有arduino UNO 与rnf24l01组成的小车&#xff1b;手部安装由arduino nano开发板、nrf24l01、imu构成的手势控制器&#xff0c;利用手势控制器检测手部状态、发送信号对小车进行前进&#xff0c;实现基于卡尔曼滤波的MPU6050姿态结算。 准备工作&am…...

Leetcode Day5 含有重复元素集合的组合+

1、含有重复元素集合的组合 给定一个可能有重复数字的整数数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次&#xff0c;解集不能包含重复的组合。 【题目传送门】 思…...

Mac Book pro(M1)使用总结

1、拿到电脑激活的时候&#xff0c;一定要记住账号密码及安全问题的答案。 2、显示隐藏文件夹&#xff1a; 3、显示.git或者gitignore等隐藏后缀的文件&#xff1a; 打开终端 defaults write com.apple.finder AppleShowAllFiles TRUE重启Finder在终端输入 killall Finder …...

QML集成JavaScript

在QML中可以使用现有的QML元素来创建页面&#xff0c;但QML紧密的集成了必要的JavaScript。 但QML中使用JavaScript比较严格&#xff0c;在QML中不可以添加或修改JavaScript全局对象成员&#xff0c;这样可能会使用一个未经声明的变量。 内联JavaScript 一些小型的JavaScript函…...

学习周报3.5

文章目录前言文献阅读摘要介绍方法总结相关性总结前言 本周阅读文献《Multi-step ahead probabilistic forecasting of multiple hydrological》&#xff0c;文献主要提出一种基于三维卷积神经网络、卷积最小门记忆神经网络和变分贝叶斯神经网络的混合深度学习模型&#xff08…...

java基础学习篇

java学习 多写&#xff08;代码、笔记、文章&#xff09;&#xff0c;多练&#xff08;交流、思维、技能&#xff09;&#xff0c;多分享&#xff0c;多提问、多思考 什么是计算机 由硬件和软件组成&#xff0c;广泛应用在科学计算、数据处理、自动控制&#xff0c;计算机辅…...

Go 语言基础语法及应用实践

Go语言是一门由Google开发的静态类型、编译型的开源编程语言,被设计成简单、高效、安全的语言。作为一门相对年轻的语言,Go语言的使用范围正在不断扩大,特别是在Web开发、云计算、容器化和分布式系统等领域越来越受到欢迎。 在本篇文章中,我们将探讨Go语言的基础语法及应用…...

C语言自定义类型---进阶

之前的文章中有结构体初阶知识的讲解&#xff0c;对结构体不是很了解的小伙伴可以先去去看一下结构体初阶 结构体&#xff0c;枚举&#xff0c;联合结构体结构体类型的声明特殊的声明结构的自引用结构体变量的定义和初始化结构体内存对齐 <3 <3 <3(重点)那为什么存在内…...

85.链表总结

链表总结 链表总结与进阶 抽象数据类型&#xff08;ADT abstract data type&#xff09;与抽象数据接口&#xff08;ADI abstract data Interface&#xff09; 链表实际上就是对于结构体、结构体指针和结构体内可以包含指向同类型的结构体指针不可以包含指向同类型的结构体的应…...

【博学谷学习记录】超强总结,用心分享|狂野大数据课程【DataFrame的相关API】的总结分析

操作dataFrame一般有二种操作的方式, 一种为SQL方式, 另一种为DSL方式 SQL方式: 通过编写SQL语句完成统计分析操作DSL方式: 领域特定语言 指的通过DF的特有API完成计算操作(通过代码形式)从使用角度来说: SQL可能更加的方便一些, 当适应了DSL写法后, 你会发现DSL要比SQL更加…...

粒子群优化最小二乘支持向量机SVM回归分析,pso-lssvm回归预测

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 SVM应用实例,粒子群优化最小二乘支持向量机SVM回归分析 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大…...

lavis多模态开源框架学习--安装

安装lavis安装lavis测试安装问题过程中的其他操作安装lavis 因为lavis已经发布在pypi中&#xff0c;所以可以直接利用pip安装 pip install salesforce-lavis测试安装 from lavis.models import model_zoo print(model_zoo) # # Architectures Types # # …...

【IDEA】如何在Tomcat上创建部署第一个Web项目?

看了网上很多教程&#xff0c;发现或多或都缺失了一些关键步骤信息&#xff0c;对于新手小白很不友好&#xff0c;那么今天就教大家如何在Tomcat服务器&#xff08;本地&#xff09;上部署我们的第一个Web项目&#xff1a; 共分为三个部分&#xff1a; 1. IDEA创建Web项目&am…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点&#xff1a; 共 6 个字段&#xff1a; Year&#xff08;年&#xff09;Month&#xff08;月&#xff09;Day&#xff08;日&#xff09;Hour&#xff08;小时&#xff09;Minute&#xff08;分钟&#xff09;Second&#xff08;秒&#xff09; 表示…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...

AWS vs 阿里云:功能、服务与性能对比指南

在云计算领域&#xff0c;Amazon Web Services (AWS) 和阿里云 (Alibaba Cloud) 是全球领先的提供商&#xff0c;各自在功能范围、服务生态系统、性能表现和适用场景上具有独特优势。基于提供的引用[1]-[5]&#xff0c;我将从功能、服务和性能三个方面进行结构化对比分析&#…...

Spring是如何实现无代理对象的循环依赖

无代理对象的循环依赖 什么是循环依赖解决方案实现方式测试验证 引入代理对象的影响创建代理对象问题分析 源码见&#xff1a;mini-spring 什么是循环依赖 循环依赖是指在对象创建过程中&#xff0c;两个或多个对象相互依赖&#xff0c;导致创建过程陷入死循环。以下通过一个简…...

day51 python CBAM注意力

目录 一、CBAM 模块简介 二、CBAM 模块的实现 &#xff08;一&#xff09;通道注意力模块 &#xff08;二&#xff09;空间注意力模块 &#xff08;三&#xff09;CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...

分布式光纤声振传感技术原理与瑞利散射机制解析

分布式光纤传感技术&#xff08;Distributed Fiber Optic Sensing&#xff0c;简称DFOS&#xff09;作为近年来迅速发展的新型感知手段&#xff0c;已广泛应用于边界安防、油气管道监测、结构健康诊断、地震探测等领域。其子类技术——分布式光纤声振传感&#xff08;Distribut…...

docker 部署redis集群 配置

docker的网络模式 网桥模式每次重启容器都有可能导致容器ip地址变化&#xff0c;需要固定ip的自己自定义网络&#xff0c;这里介绍的是默认网络模式 docker创建容器 docker run --name redis6379 -p 6379:6379 -p 16379:16379 -v /etc/redis/redis6379:/etc/redis -d --r…...