pytorch基础学习笔记

2023-11-06

import torch
import numpy as np

def describe(x):
    print("Type:{}".format(x.type()))
    print("Shape/size:{}".format(x.shape))
    print("Values:\n{}".format(x))

创建张量tensor

# 用torch.Tensor创建一个张量
describe(torch.Tensor(2, 3))
describe(torch.tensor(2))
describe(torch.tensor([2, 3, 4]))# Tensor输入的是形状也可是具体的list,tensor输入的是具体的值
# 创建一个随机初始化张量
describe(torch.rand(2, 3))
describe(torch.randn(2, 3))
# 通过fill_()填充方式创建一个张量
describe(torch.zeros(2, 3))
x = torch.ones(2, 3)
describe(x)
x.fill_(5)# 填了是几就是几,与他之前的值无关
describe(x)
# 从列表中创建和初始化张量
x = torch.Tensor([[1, 2, 3],
                 [4, 5, 6]])
describe(x)
# 从numpy创建并初始化一个张量 
npy = np.random.rand(2, 3)
describe(torch.from_numpy(npy))

张量的类型和大小

# 张量的属性
x = torch.FloatTensor([[1, 2, 3],
                 [4, 5, 6]])
describe(x)
x = x.long()
describe(x)
x = torch.tensor([[1, 2, 3],
                 [4, 5, 6]], dtype=torch.int64)
describe(x)
x = x.float()
describe(x)

张量的操作

# 张量操作:添加
x = torch.randn(2, 3)
describe(x)
describe(torch.add(x, x))
describe(x + x)
# 维度张量操作
x = torch.arange(6)
describe(x)
x = x.view(2, 3)
y = x.view(2, -1)
describe(x)
describe(y)
describe(torch.sum(x, dim=0))
describe(torch.sum(x, dim=1))
describe(torch.transpose(x, 0, 1))

索引、切片、连接

# 切片以及索引一个张量
x = torch.arange(6).view(2, 3)
describe(x)
describe(x[:1, :2])
describe(x[0, 1])
# 复杂索引:张量的非连续索引
describe(x)
indices = torch.LongTensor([0, 2])
describe(indices)
describe(torch.index_select(x, dim=1, index=indices))# 取x的【0号列,2号列】
describe(x)
indices = torch.LongTensor([0, 0])
describe(indices)
describe(torch.index_select(x, dim=0, index=indices))# 取x的【0号行,0号行】
describe(torch.index_select(x, dim=1, index=indices))# 取x的【0号列,0号列】
row_indices = torch.arange(2).long()
col_indices = torch.LongTensor([0, 1])
describe(x[row_indices, col_indices])# x[[0, 1], [0, 1]] 取x的【0号行0号列,1号行1号列】
# 连接张量
x = torch.arange(6).view(2, 3)
describe(x)
describe(torch.cat([x, x], dim=0))# 行拼接
describe(torch.cat([x, x], dim=1))# 列拼接
describe(torch.stack([x, x]))# 升维度拼接
# 张量线性代数:乘法
x1 = torch.arange(6).view(2, 3).float()
describe(x1)
x2 = torch.ones(3, 2)
x2[:, 1] += 1 # x2的所有行的1号列加1
describe(x2)
describe(torch.mm(x1, x2))

张量和计算图

# 创建张量并计算梯度
x = torch.ones(2, 2, requires_grad=True)
describe(x)
print(x.grad is None)
y = (x + 2) * (x + 5) + 3
describe(y)
print(x.grad is None)
z = y.mean()
describe(z)
z.backward()
print(x.grad is None)

CUDA张量

# 在GPU上分配张量,需安装pytroch的GPU版本
print(torch.cuda.is_available())# 检查GPU是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 检索设备名称
print(device)
x = torch.rand(3, 3).to(device)# 实例化所有未来的张量并将其移动到目标设备
describe(x)
# 讲CUDA张量与CPU绑定张量混合
y = torch.rand(3, 3)
x + y # x是在gpu设备上,y是在cpu设备上,所以计算中断
# 要确保CUDA对象和非CUDA对象在同一设备上才可计算
cpu_device = torch.device("cpu")
y = y.to(cpu_device)
x = x.to(cpu_device)
x + y

升降维操作

# 随机创建一个二维张量,然后在第0维插入1个维度
a = torch.rand(2,2)
describe(a)
a = a.unsqueeze(0)
describe(a)
# 去掉你刚刚加到张量的额外维度
a = a.squeeze(0)
describe(a)
# 在区间[3, 7]中创建一个形状为5*3的随机张量
a = torch.rand(5, 3) * (7 - 3) + 3
describe(a)
# 创建一个具有正态分布(mean=0, std=1)值的张量
a = torch.randn(3,3)
describe(a)
a = a.normal_()
describe(a)
# 找到torch.Tensor([1, 1, 1, 0, 1])中所有非零元素的索引
a = torch.Tensor([1,1,1,0,1])
print(torch.nonzero(a))
# 创建一个大小为(3,1)的随机张量,水平扩展4个副本
a = torch.rand(3, 1)
describe(a)
a.expand(3, 4)
# 返回两个3维矩阵的乘积(a=torch.rand(3,4,5), b=torch.rand(3,5,4))
a = torch.rand(3, 4, 5)
b = torch.rand(3, 5, 4)
torch.bmm(a, b)
# 返回一个3维矩阵和一个2维矩阵的乘积(a=torch.rand(3,4,5), b=torch.rand(5,4))
a = torch.rand(3, 4, 5)
b = torch.rand(5, 4)
torch.bmm(a, b.unsqueeze(0).expand(a.size(0), *b.size()))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytorch基础学习笔记 的相关文章

随机推荐

  • SpringBoot slf4j的yaml日志配置不生效

    Spring boot工程中使用slf4j日志框架 发现日志配置总是不生效 我的yaml配置如下 logging level 全局日志级别 root info 具体到某个类的日志级别 打印所有访问请求日志 com xyz filter We
  • specialization of template.... in different namespace的解决

    代码来自DTL文档index htm struct Example tablename columnname int exampleInt DB EXAMPLE INT VALUE string exampleStr DB EXAMPLE
  • 理论总结

    作业1 2 1 Python程序是区分大小写的 2 解释程序对高级语言编写的程序是一边翻译 一边执行的 下次执行同样的程序时 还必须重新翻译 3 Python是一种用途广泛 解释型 面向对象的程序设计语言 4 程序设计语言包括机器语言 汇编
  • Into Clause VS Let Clause

    1 Into Clause 用来将select join 或者group的结果存储到一个临时变量中 目的 在之后的查询中需要使用此结果 例如 var developersGroupedByLanguage from d in develop
  • 面了一个测试工程师,明显感觉他背了很多面试题...

    最近有朋友去字节面试 面试前后进行了20天左右 包含4轮电话面试 1轮笔试 1轮主管视频面试 1轮hr视频面试 据他所说 80 的人都会栽在第一轮面试 要不是他面试前做足准备 估计都坚持不完后面几轮面试 其实 第一轮的电话面试除了一些常规的
  • LRU缓存淘汰算法

    概念理解 1 LRU是Least Recently Used的缩写 即最近最少使用页面置换算法 是为虚拟页式存储管理服务的 2 操作系统课程里有学过 在内存不够的场景下 淘汰就内容的策略 淘汰掉最不经常使用 LRU原理 可以用一个特殊的栈来
  • CentOS 7安装Gnome GUI 图形界面

    http www centoscn com image text config 2015 0528 5552 html
  • jwt在线解密工具分享

    前言 之前调用一个第三方api的时候 看到需要在Authorization填写bearer token 英文不好 看成了熊 bear 心里很疑惑 实际上 bearer 指的是持票人 Bearer Token用于授权访问资源 任何Bearer
  • splunk之获取数据(Ingesting Data)

    Ingesting Data 下载数据地址 http splk it f1data use uname in the Username field and 5p1unkbcup for the Password field
  • GDB调试命令详解

    GDB是什么 调试程序 程序中出现的语法错误可以借助编译器解决 但逻辑错误则只能靠自己解决 实际场景中解决逻辑错误最高效的方法 就是借助调试工具对程序进行调试 所谓调试 Debug 就是让代码一步一步慢慢执行 跟踪程序的运行过程 比如 可以
  • Vue如何实现反向代理(配置proxy)

    Vue如何实现反向代理 那问题来了 反向代理是什么 反向代理 Reverse Proxy 实际运行方式是指以代理服务器来接受internet上的连接请求 然后将请求转发给内部网络上的服务器 并将从服务器上得到的结果返回给internet上请
  • Mysql的B+树高度计算

    问题 假设B 树的高度是2 一行数据的记录大小是1K 主键ID是int类型 问 该B 树存放的总记录数 知识点 Mysql的默认存储引擎是Innodb Innodb的最小存储单位是页 一页大小等于16K B 树的叶子节点存放数据 内部节点存
  • 黑马 Spring_day01

    Spring day01 今日目标 掌握Spring相关概念 完成IOC DI的入门案例编写 掌握IOC的相关配置与使用 掌握DI的相关配置与使用 1 课程介绍 对于一门新技术 我们需要从为什么要学 学什么以及怎么学这三个方向入手来学习 那
  • 计算机提示d3dcompiler43.dll缺失怎么修复,多个解决方法分享

    在游戏玩家中 遇到游戏提示找不到 d3dcompiler43 dll 文件的情况并不罕见 这使得许多玩家在启动游戏时感到困扰 因为这意味着他们可能无法正常运行游戏 那么 d3dcompiler43 dll 文件到底是什么呢 为什么游戏会提示
  • 数据库实现学生管理系统

    1 QT将数据库分为三个层次 1 gt 数据库驱动层 QSqlDriver QSqlDriverCreator QSqlDriverCreatorBase QSqlDriverPlugin 2 gt sql接口层 QSqlDatabase
  • 在剪贴板上有大量信息,是否保留其内容, 以便此后粘贴到其他程序中? VBA 对策

    在剪贴板上有大量信息 是否保留其内容 以便此后粘贴到其他程序中 对策a 是文件关闭前 随便复制一个空单元格就可以了 对策b Application DisplayAlerts False 关闭任何提醒 但复制的信息将仍旧保存在剪贴板中 对策
  • Qt数据库编程

    Qt数据库编程 版本说明 版本 作者 日期 备注 0 1 loon 2018 10 25 初稿 目录 文章目录 Qt数据库编程 版本说明 目录 一 需求和目的 二 使用说明 1 Qt 5 6 0的数据库操作类 2 Driver Layer
  • 堆栈指针SP

    1 什么是堆栈指针 在51系列单片机里 堆栈指针sp在片内RAM128B中开辟栈区 并随时跟踪栈顶地址 它是按 先进后出 的原则存取数据 开机复位后 单片机栈底地址为07H 主要用来保存临时数据 局部变量和中断 调用子程序程序的返回地址 堆
  • java的传值调用什么_Java的传值调用

    本文非引战或diss 只是说出自己的理解 欢迎摆正心态观看或探讨 引子 之所以写这篇文章是因为前些天写了一篇 Java中真的只有值传递么 探讨了网上关于Java只有值传递的说法 当时写这篇文章的缘由是因为之前看的文章讲解的Java只有值传递
  • pytorch基础学习笔记

    import torch import numpy as np def describe x print Type format x type print Shape size format x shape print Values n f