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

news2024/11/18 1:30:36

知识要点

  •  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 np

a = 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)    # True

with 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

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

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

相关文章

Aspose.Words for JasperReports Crack

Aspose.Words for JasperReports Crack 添加了在文档中指定字符间距的功能。 添加了文档样式选项&#xff0c;允许您指定是否自动重新定义样式。 显著改进了图表渲染&#xff1a; 渲染径向渐变笔刷时添加了相对坐标支持。 增加了对呈现趋势线和趋势线R平方的支持。 增加了对渲染…

zabbix自定义模版Templates和监控项items

注&#xff1a;此处使用的客户端和服务端版本均为 ubuntu 2204 自定义模板和监控项实现过程 在Zabbix 被监控主机上编写自定义监控项的取值的脚本,并加执行权限在Zabbix 被监控主机上的配置文件中添加自定义监控项,指定 key 和 对 key 赋值的脚本及参数在Zabbix Server 上使用…

docker环境安装tomcat

一 安装tomcat 1. 查找tomcat镜像 docker search tomcat 2. 安装指定版本的tomcat镜像 docker pull tomcat:9.0 二 启动tomcat镜像 docker run -d -p 8080:8080 --name tomcat tomcat:9.0 三 访问tomcat页面 http://ip:8080 第一访问会出现下面的情况 四 解决上述问题 进入…

C语言-基础了解-12-C数组

C数组 一、C数组 C 语言支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据&#xff0c;但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量&#xff0c;比如 runoob0、runoob1、…、runoo…

SpringBoot_第五章(Web和原理分析)

目录 1&#xff1a;静态资源 1.1&#xff1a;静态资源访问 1.2&#xff1a;静态资源源码解析-到WebMvcAutoConfiguration 2&#xff1a;Rest请求绑定&#xff08;设置put和delete&#xff09; 2.1&#xff1a;代码实例 2.2&#xff1a;源码分析到-WebMvcAutoConfiguratio…

穿越时空:当ChatGPT遇见stable-diffusion,你不敢相信的创意艺术之旅!

前言 欢迎来到一场创意的旅程&#xff0c;这里将聚焦于 ChatGPT 和 stable-diffusion 这两个令人激动的技术。在这篇文章中&#xff0c;我们将会探索这两种技术如何结合使用&#xff0c;为艺术创作带来全新的可能性。我们将探讨如何利用 ChatGPT 生成富有想象力的创意&#xf…

Mac Book pro(M1)使用总结

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

如何在虚拟机中安装ikuai软路由系统

首先访问ikuai官网下载固件固件下载-爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com) 根据需求下载 然后创建一个虚拟机&#xff0c;点击下一步 选择更下载的ISO映像文件&#xff0c;点击下一步 点击下一步 设置一下名称和储存位置&#xff0c;点击下一步 根据需求设置&a…

k8s集群调度

1、调度约束Kubernetes 是通过 List-Watch 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。1.1 List-Watch 用户通过kubectl命令提交请求交给apiserver创建pod&#xff0c;然后apiserver将pod信息存放到etcd中&#xff0c;之后…

并发编程——ReentrantLock

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;耶瞳空间 一&#xff1a;基本介绍 从Java 5开始&#xff0c;引入了一个高级的处理并发的java.util.concurrent包&#xff0c;它提供了大量更高级的并发功能&#xff0c;能大大简化多线程程序的编写…

shell基础(5)算数计算:运算语法、自增自减

文章目录1. shell算数运算的特点2. 运算符一览3. 运算语法3.1 整形运算3.2. 小数运算 ing4. 自增自减4.1. a与a4.2. 自加1. shell算数运算的特点 Shell 和其它编程语言不同&#xff0c;Shell 不能直接进行算数运算&#xff0c;必须使用数学计算命令。Shell只支持整数运算&#…

C++017-C++冒泡排序与插入排序

文章目录C017-C冒泡排序与插入排序冒泡排序与插入排序目标冒泡排序排序规则冒泡排序优化插入排序题目描述在线练习&#xff1a;总结C017-C冒泡排序与插入排序 在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 冒泡排序与插入排序 参考&#xff1a;…

详解基于 Celestia、Eclipse 构建的首个Layer3 链 Nautilus Chain

以流支付为主要概念的Zebec生态&#xff0c;正在推动流支付这种新兴的支付方式向更远的方向发展&#xff0c;该生态最初以Zebec Protocol的形态发展&#xff0c;并从初期的Solana进一步拓展至BNB Chian以及Near上。与此同时&#xff0c;Zebec生态也在积极的寻求从协议形态向公链…

【PyTorch】教程:torch.nn.Hardsigmoid

torch.nn.Hardsigmoid 原型 CLASS torch.nn.Hardsigmoid(inplaceFalse) 参数 inplace (bool) – 默认为 False 定义 Hardsigmoid(x){0if x≤−3,1if x≥3,x/61/2otherwise\text{Hardsigmoid}(x) \begin{cases} 0 & \text{if~} x \le -3, \\ 1 & \text{if~} x \ge 3…

PHP<=7.4.21 Development Server源码泄露漏洞

PHP<7.4.21 Development Server源码泄露漏洞php启动内置web服务器漏洞利用原理因为特殊的原因CTF荒废了一段时间&#xff0c;近期总算再次捡了起来&#xff0c;算是从头开始了吧。近期比赛刚好遇到了这个漏洞&#xff0c;看国内似乎还没有过多的论述&#xff0c;先总结一波。…

【自然语言处理】【大模型】大语言模型BLOOM推理工具测试

相关博客 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B&#xff1a;一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍 【自然语言处理】【大模型】BLOOM&#xff1a;一个176B参数…

RocksDB 架构

文章目录1、RocksDB 摘要1.1、RocksDB 特点1.2、基本接口1.3、编译2、LSM - Tree2.1、Memtable2.2、WAL2.3、SST2.4、BlockCache3、读写流程3.1、读取流程3.2、写入流程4、LSM-Tree 放大问题4.1、放大问题4.2、compactionRocksDB 是 Facebook 针对高性能磁盘开发开源的嵌入式持…

如何防止用户打开浏览器开发者工具?

大家好&#xff0c;我是前端西瓜哥。作为一名前端开发&#xff0c;在浏览一些网页时&#xff0c;有时会在意一些交互效果的实现&#xff0c;会打开开发者工具查看源码实现。 但有些网站做了防窥探处理&#xff0c;打开开发者工具后&#xff0c;会无法再正常进行网页的操作。 …

Jeston与Px4(四)

ROS控制PX4 上一节里我们已经将mavros和仿真gazebo搭建完毕&#xff0c;这一节将通过ros来实现对接PX4固件的目标 文章目录ROS控制PX41、搭建PX4开发固件环境1、搭建PX4开发固件环境 “永远不要使用sudo来修复权限问题&#xff0c;否则会带来更多的权限问题&#xff0c;需要重…

PMP项目管理引论介绍

目录1. 指南概述和目的1.1 项目管理标准1.2 道德与专业行为规范2 基本要素2.1 项目2.2 项目管理的重要性2.3 项目、项目集、项目组合以及运营管理之间的关系2.3.1 概述2.3.2. 项目组合与项目集管理2.3.3. 运营管理2.3.4. 组织级项目管理和战略2.3.5. 项目管理2.3.6. 运营管理与…