【pyTorch学习笔记③】PyTorch基础·上篇

news2024/10/7 7:33:18

文章目录

  • 一、PyTorch介绍
  • 二、PyTorch的安装
    • 1、CPU版本
    • 2、GPU版本
  • 三、Numpy与Tensor
    • 1.Tensor的创建
    • 2.Tensor的变形
  • 相关推荐

一、PyTorch介绍

PyTorch是Facebook发布的一款深度学习框架,继承了Torch灵活、动态的编程环境和用户友好的界面,支持以快速和灵活的方式构建动态神经网络,还允许在训练的过程中快速更改代码而不妨碍其性能,支持动态图形等尖端AI模型的能力,是快速实验的理想选择。
主要由4个主要的包组成:
(1)torch:可将张量类型转换为torch.cuda.TensorFloat,并在GPU上进行计算。
(2)torch.autograd:用于构建计算图形并自动获取梯度的包
(3)torch.nn:具有共享层和损失函数的神经网络库
(4)torch.optim:具有通用优化算法(如SGD、Adam等)的优化包

二、PyTorch的安装

最好先安装一个anaconda或者miniconda,然后创建虚拟环境,再安装PyTorch
https://pytorch.org/get-started/locally/

1、CPU版本

在这里插入图片描述

2、GPU版本

GPU版本要先安装GPU驱动、CUDA、cuDNN计算框架。
可以参见:https://mp.csdn.net/mp_blog/creation/editor/120840528
再安装PyTorch:
在这里插入图片描述

三、Numpy与Tensor

PyTorch的Tensor可以是零维、也可以是一维、多维,它与Numpy相似,二者可以共享内存,转换方便高效。二者区别在于,Numpy只能在CPU上计算,而Tensor在GPU环境中可以选择在GPU上运行。
从接口上可以划分为两类:
(1)torch.function。如torch.sum、torch.add等
(2)tensor.function。如tensor.view、tensor.add等
但是这两者大都等价。如x.add(y)与torch.add(x,y)等价。
从是否修改自身数据也可以分成两类:
(1)不修改自身的数据:如x.add(y),运行结束后x值不变,返回一个新的tensor
(2)修改自身的数据:如x.add_(y),运行结果保存在x中,即x被修改。

import torch
x = torch.tensor([1,2])
y = torch.tensor([3,4])
z = x.add(y)
print(x)
>>>tensor([1, 2])
print(z)
>>>tensor([4, 6])
x.add_(y)
print(x)
>>>tensor([4, 6])

1.Tensor的创建

两点说明:
(1)torch.Tensor是torch.tensor和torch.empty的混合,但是,当传入数据时,torch.Tensor使用全局默认dtype(FloatTensor),而torch.tensor是从数据中推断数据类型。
(2)torch.tensor(1)返回的是固定值1,而torch.Tensor(1)返回的是大小为1的张量,值是随机的。

t1 = torch.Tensor(1)
print(t1)
>>>tensor([-1.0713])
t2 = torch.tensor(1)
print(t2)
>>>tensor(1)

(1)Tensor:直接从参数构造

print(torch.Tensor([1,2,3]))
>>>tensor([1., 2., 3.])
print(torch.Tensor([[1,2],[3,4]]))
>>>tensor([[1., 2.], 
        [3., 4.]])

(2)Tensor/eye:指定形状生成

# 指定形状,随机生成
print(torch.Tensor(2,3))
>>>tensor([[-3.5458e-16, -1.4412e+17, -3.5458e-16],
        [ 4.2352e-22, -3.5457e-16,  5.6296e+14]])
print(torch.eye(2,3))
>>>tensor([[1., 0., 0.],
        [0., 1., 0.]])

(3)linspace:给定范围均分

print(torch.linspace(1,10,10))
>>>tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

(4)logspace:给定范围均分(区别于3,范围以10为底)

print(torch.logspace(1,2,10))
>>>tensor([ 10.0000,  12.9155,  16.6810,  21.5443,  27.8256,  35.9381,  46.4159,
         59.9484,  77.4264, 100.0000])

(5)rand:指定形状,【0,1)均匀分布

print(torch.rand(2,3))
>>>tensor([[0.4956, 0.5236, 0.1909],
        [0.5445, 0.1571, 0.3773]])

(6)randn:指定形状,标准正态分布

print(torch.randn(2,3))
>>>tensor([[-0.6656, -0.0725,  1.9198],
        [ 0.6756, -1.8594, -0.8263]])

(7)ones:指定形状,初始值为1

print(torch.ones(2,3))
>>>tensor([[1., 1., 1.],
        [1., 1., 1.]])

(8)zeros:指定形状,初始值为0

print(torch.zeros(2,3))
>>>tensor([[0., 0., 0.],
        [0., 0., 0.]])

(9)ones_like:模仿形状,初始值为1

a = torch.Tensor(2,3)
print(torch.ones_like(a))
>>>tensor([[1., 1., 1.],
        [1., 1., 1.]])

(10)zeros_like:模仿形状,初始值为0

a = torch.Tensor(2,3)
print(torch.zeros_like(a))
>>>tensor([[0., 0., 0.],
        [0., 0., 0.]])

(11)arange:在指定区间,以指定间隔生成一个序列张量

print(torch.arange(1,10,1))
>>>print(torch.arange(1,10,1))

(12)from_Numpy:从ndarray创建一个Tensor

a = np.arange(1,10,1)
print(a)
>>>[1 2 3 4 5 6 7 8 9]
print(torch.from_numpy(a))
>>>tensor([1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=torch.int32)

2.Tensor的变形

(1)查看形状

a = torch.randn(2,3)
print(a.size())
>>>torch.Size([2, 3])
print(a.shape)
>>>torch.Size([2, 3])
# 返回a的维度
print(a.dim())
>>>2

(2)计算元素个数

a = torch.randn(2,3)
print(torch.numel(a))
>>>6

(3)修改形状

a = torch.randn(2,3)
print(a)
>>>tensor([[-0.0169,  0.3507, -0.8997],
        [ 0.1978, -1.3577,  0.7491]])
print(a.view(3,2))
>>>tensor([[-0.0169,  0.3507],
        [-0.8997,  0.1978],
        [-1.3577,  0.7491]])
print(a) # 可见,view没有修改a自身
>>>tensor([[-0.0169,  0.3507, -0.8997],
        [ 0.1978, -1.3577,  0.7491]])
print(a.resize(2,3))
>>>UserWarning: non-inplace resize is deprecated      
  warnings.warn("non-inplace resize is deprecated")
tensor([[-0.0169,  0.3507, -0.8997],
        [ 0.1978, -1.3577,  0.7491]])
print(a) # 可见,resize修改了a自身,官方也不建议这样修改。
>>>tensor([[-0.0169,  0.3507, -0.8997],
        [ 0.1978, -1.3577,  0.7491]])
a = torch.randn(2,3)
print(a.reshape(3,2))
>>>tensor([[-2.1509,  1.9620],
        [-0.3320, -1.8106],
        [-2.1936,  0.1626]])
print(a)
>>>tensor([[-2.1509,  1.9620, -0.3320],
        [-1.8106, -2.1936,  0.1626]])

# 增加维度
a = torch.randn(2,3)
print(a)
>>>tensor([[ 0.3440, -0.9412,  1.0980],
        [-1.2131,  1.1445,  2.2529]])
z = torch.unsqueeze(a,0)
print(z)
>>>tensor([[[ 0.3440, -0.9412,  1.0980],
         [-1.2131,  1.1445,  2.2529]]])

# 压缩维度
a = torch.randn(2,1,3,1)
print(a.size())
>>>torch.Size([2, 1, 3, 1])
z = torch.squeeze(a)
print(z.size()) # 将全部大小为1的维压缩
>>>torch.Size([2, 3])
z = torch.squeeze(a,3)
print(z.size())# 若指定维的大小为1则压缩该维,不为1不压缩
>>>torch.Size([2, 1, 3])

相关推荐

【pyTorch学习笔记①】Numpy基础·上篇
【pyTorch学习笔记②】Numpy基础·下篇

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

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

相关文章

kafka使用详解、最佳实践和问题排查

kafka是一个常用的分布式消息中间件,与RabbitMQ对比,特点是可以无限横向扩容,并保持高可靠性、高吞吐量和低延迟,因此比RabbitMQ有更高的市场占有率(网上搜了一下,kafka大约41%,RabbitMQ大约29%…

【网络安全】Metasploit工具

Metasploit Metasploit介绍默认安装目录主要应用文件modules文件内容介绍目录内容 Metasploit使用常用命令信息收集之端口扫描信息收集之c段扫描ms17_010(永恒之蓝) msfvenom生成木马命令入侵win全过程 Metasploit介绍 默认安装目录 /usr/share/metasp…

C语言指针2大问题:指针类型有什么用?指针如何运算?

如题,本篇博客主要解决2个疑点:指针类型的用处,指针如何运算。 1.指针类型 C语言中的指针类型,在X86环境下大小是4个字节,在X64环境下大小是8个字节。既然指针的大小和指针类型无关,那么指针类型究竟有什么…

AI看图说话,MiniGPT-4已经开源

MiniGPT-4 是一个人工智能工具,​最大的飞跃是增加了识图能力,​并且回答准确性也得到显著提高。​它可以识别图片并回答关于图片的问题,​例如图片内容、​颜色等等。 ​此外,​它还可以进行图像对话,​即通过图片和…

MFC之CRect详解

2023年4月25日,周二晚上。 今天查了不少关于CRect类及其相关内容的资料,学到了不少东西,所以我决定写一篇详细的关于CRect类及其相关内容的文章,以记录今天所学。 CRect类 在 MFC 中,CRect 类表示一个矩形区域。它是…

【Vue 移动端开发】适配百分之99的屏幕方案

之前提起移动端适配,都是一些视口的概念,包括物理像素和逻辑像素,理想视口,dpr等等等。利用 media query 和 rem 是最常见的移动端适配方案。如下代码: const deviceWidth document.documentElement.clientWidth || …

Axure RP 9 for Mac 原型设计软件安装,Mac软件打开提示:已损坏,无法打开。您应该将它移到废纸篓。怎么解决?

Axure RP 9 for Mac 原型设计软件安装,Mac软件打开提示:已损坏,无法打开。您应该将它移到废纸篓。怎么解决? 安装过程很简单: 1、下载后先将软件拖入应用程序中; 2、打开软件,弹出登录界面,点…

网络编程代码实例:用户数据报协议(UDP)简单版

文章目录 前言代码仓库内容代码(有详细注释)server.cclient.cMakefile 结果总结参考资料作者的话 前言 网络编程代码实例:用户数据报协议(UDP)简单版。 代码仓库 yezhening/Environment-and-network-programming-exa…

[ICLR 2020] Reducing Transformer Depth on Demand with Structured Dropout

Contents IntroductionTraining Transformers with Random Structured PruningRandomly Dropping Structures at Training TimePruning at Inference Time ExperimentsReferences Introduction 作者提出了一种新的 structural pruning 方法 LayerDrop,通过在训练时…

FastDFS集群搭建

简介 FastDFS是什么?我们这里可以看一下度娘的解释。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量…

Python base64模块加密解密

一、为何使用base64加密解密 为了安全机制的系统,在用户登录的时候,会采用一系列措施保护用户信息,防止程序被攻击,比如:将用户输入的密码加密处理,在控制台看请求接口看到的密码是加密过的密码&#xff0c…

前端 Chrome 插件推荐

1.Ajax Interceptor 场景: 1.前端本地在开发,后端接口还没好,可以提前mock数据,并且真实的模拟网络请求。可以对代码不侵入的方式,提高编码效率。后面真实联调速度就会快很多。 2.当你参与项目的一部分开发的时候&a…

WPF实现PasswordBox切换明密功能

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

生产mysql遇到kill不掉的sql的解决方法

一、问题描述 今天上线,生产mysql有个2700万数据的大表lt_integral_detail_info,准备给这个表加字段、加索引; 执行加字段加索引的命令比较费时,结果这时有人对这个表执行了多个select count(*)操作,导致直接把Navic…

SQL优化(5):limit优化

在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。 我们一起来看看执行limit分页查询耗时对比: 找一个有1000W数据量的表进行测试分析 查询前10条数据分页,耗时0.03秒 查询100…

【力扣】二叉树的分层遍历1和2

二叉树的分层遍历1 链接:二叉树的分层遍历1: 首先,我们需要知道什么是二叉树的层序遍历。二叉树的层序遍历是一种按照树的层次从上到下,从左到右访问每个节点的方法。例如,对于下面这棵二叉树: 1/ \2 3…

Linux_红帽8学习笔记分享_7(Crontab计划任务+NTP时间同步服务器)

Linux_红帽8学习笔记分享_7(Crontab计划任务NTP时间同步服务器) 文章目录 Linux_红帽8学习笔记分享_7(Crontab计划任务NTP时间同步服务器)1. 系统时间1.1查看系统时间1.2设置系统时间 2.周期性计划任务2.1认识周期性任务服务2.2寻找定时文件的配置文件2.3用户定时任务的格式2.4…

行业方案|智能网联汽车数据安全治理框架

近年来,信息技术的快速发展,加快了汽车产业的变革。与此同时,随着智能化、网联化的推进,汽车的数据安全问题也日益凸显。当下,如何保障数据安全,成为影响智能汽车产业健康发展的关键问题。 4月18日&#x…

Linux Ansible创建任务并执行

目录 通过add-hoc执行anbise任务 通过Playbook剧本方式执行任务 Playbook包含的常用对象 Yaml语法 对Yaml格式自动对齐 Playbook语法检测与执行 Playbook任务实施 Playbook特权升级 Playbook常用模块 软件包管理模块 用户管理模块 存储模块管理 文件操作相关模块 …

GPT-3 论文阅读笔记

GPT-3模型出自论文《Language Models are Few-Shot Learners》是OpenAI在2020年5月发布的。 论文摘要翻译:最近的工作表明,通过对大量文本进行预训练,然后对特定任务进行微调(fine-tuning),在许多NLP任务和基准测试上…