一些基础的操作:

import torch as th

a=th.rand(3,4)  #随机数,维度为3,4的tensor
b=th.rand(4)
print(a)
print(b)
a+b
tensor([[0.3777, 0.4128, 0.6244, 0.7772],
[0.0859, 0.9350, 0.1705, 0.9116],
[0.4136, 0.1211, 0.5960, 0.8962]])
tensor([0.5063, 0.4809, 0.4810, 0.4716])
tensor([[0.8840, 0.8937, 1.1054, 1.2487],
[0.5922, 1.4159, 0.6515, 1.3831],
[0.9200, 0.6020, 1.0770, 1.3678]])
a=th.ones(3,4)*5     #全为1的tensor
b=th.ones(4)
a/b

tensor([[5., 5., 5., 5.],
        [5., 5., 5., 5.],
        [5., 5., 5., 5.]])

a=th.full([2,2],3)     #完全填充tensor
a.pow(2) #几次方

tensor([[9., 9.],
        [9., 9.]])

a.sqrt()           #开根号
tensor([[1.7321, 1.7321],
    [1.7321, 1.7321]])
a=th.exp(th.ones(2,2))   #e的指数

tensor([[2.7183, 2.7183],
        [2.7183, 2.7183]])

th.log(a)          #e的对数

tensor([[1., 1.],
        [1., 1.]])

grad=th.rand(2,3)*15
grad.max() #取最大值
grad.median() #取中位数

tensor(12.9437)

tensor(5.4597)

grad.clamp(0,10)  #截取

tensor([[ 5.4597, 10.0000,  2.1924],
        [ 3.2563, 10.0000, 10.0000]])

import torch
import numpy as np
a= torch.tensor([1., 2., 3.]) #通过list初始化一个tensor
#print(a)
a.shape
b = torch.Tensor(2, 3) #注意是大写Tensor,输入的是维度信息
#print(b)
c = np.array([1., 2., 3.])
c = torch.from_numpy(c) #将numpy类型的数据转换为tensor类型
#print(c)
c.type() #tensor的类型
b.dim() #tensor有几个维度
b.numel() #tensor的元素个数 d=torch.randn(3,2,1)
f = torch.rand_like(d) #和输入的tensor的维度一致的随机tensor
f = torch.randn(3, 3) #0均值,方差为1的随机正态分布
f = torch.normal(mean=torch.full([10], 0), std=torch.arange(1, 0, -0.1))# 返回一个张量,包含从给定参数means,std的离散正态分布中抽取随机数。 均值means是一个张量,包含每个输出元素相关的正态分布的均值。 std是一个张量,包含每个输出元素相关的正态分布的标准差。
f = torch.full([2, 3], 7) #用后面的值填充一个tensor
f = torch.arange(1,10) #得到int的tensor,并且不包含最后一个元素,左闭右开
#f = torch.range(1, 10, 2) #默认的浮点数, 同时左闭右闭
f = torch.randperm(2) #生产n个从1~n随机顺序的整数值
# pytorch 索引和切片
import torch as th a=th.randn(4, 3, 28, 28)
a[0].shape #将a理解为4张图片,每张图片3个通道,每个通道的维度为28*28,a[0]就是取第一个图片
a[0,0].shape #取0图的0通道
a[0,0,2,4] #取0图0通道的2,4位置像素大小 a.shape
a[:2].shape #表示第0,1张图片。 :为开区间的取值范围
a[:2,-1:,:,:].shape #-1表示last N. python中可以正着编号,也可以从后向前编号(负数) a[:,:,::2,::2].shape #::2, 表示间隔为2取值,select by steps a.index_select(2,th.arange(8)).shape #select by specific index 按照索引进行取值,第一个参数为选择维度,后面为选择的索引 x=th.randn(3,4)
mask=x.ge(0.5) #进行mask标记
th.masked_select(x,mask) #选取mask的元素
# pytorch Tensor维度变换
import torch as th\ #1 view /reshape
a=th.rand(4,1,28,28)
a.view(4, 28*28).shape #必须保持合理的逻辑 #2 squeeze (去除掉维度为1的dim) / unsqueeze (在指定位置添加维度)
b=th.randn(1,2,3,5)
b.unsqueeze(0).shape #torch.Size([1, 2, 3, 5])
b.unsqueeze(-1).shape #torch.Size([1, 2, 3, 5, 1]) b.squeeze().shape #torch.Size([2, 3, 5]) ,当然也可以指定削减那个维度 #3 expand / repeat
# Expand: broadcasting 扩展维度,在需要时才扩展数据, 推荐使用
# Repeat: memory copied b=th.rand(1, 32, 1, 1)
b.expand(4, 32, 14, 14).shape #注意,expand, 扩展前后的维度数要一致,并且是1->N 才可以。 2->N 会报错 b=th.rand(1, 32, 1, 1)
b.expand(-1, 32, 14, 12).shape # -1表示该维度不进行扩展 torch.Size([1, 32, 14, 12]) b=th.rand(1, 32, 1, 1)
b.repeat(4, 32, 1, 1).shape #第一个维度拷贝4次, 第二个维度拷贝32次 torch.Size([4, 1024, 1, 1]) #4 .t() 矩阵转置操作, 只能使用于2D tensor
b=th.rand(2,3)
b.t().shape #torch.Size([3, 2]) # transpose(需要转置的维度)
b=th.rand(1,2,3,4)
#b.transpose(1,3).shape #torch.Size([1, 4, 3, 2])
#转置之后的维度恢复要十分注意
a = b.transpose(1,3).contiguous().view(1, 4*3*2).view(1, 4, 3, 2).transpose(1, 3)
# view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。
th.all(th.eq(a, b)) # permute 对原来的维度进行重新排序交换,会打乱内存,需要用contiguous()
b.permute(0,2,3,1).shape #将原来的第2维度,放到1,...
# pytorch  拼接与分割
import torch as th
a1=th.rand(4,3,32,32)
a2=th.rand(5,3,32,32)
th.cat([a1,a2],dim=0).shape #在指定维度dim拼接tensor, 除了要拼接的dim之外其他维度要一致
# torch.Size([9, 3, 32, 32]) a1=th.rand(32,8)
a2=th.rand(32,8)
th.stack([a1,a2],dim=0).shape #在要concat的维度前插入一个维度,表示拼接前后的信息
# torch.Size([2, 32, 8]) #按照长度拆分
a3=th.rand(3,32)
a4=a3.split(1, dim=0) #拆分0度,每一块的len为1
aa,bb=a3.split([2,1],dim=0) #拆分某一维度,拆成指定的维度[2,1]
aa.shape, bb.shape
#(torch.Size([2, 32]), torch.Size([1, 32])) #按照数量拆分
a,b,c=a3.chunk(3,dim=0)
a.shape,b.shape,c.shape
# (torch.Size([1, 32]), torch.Size([1, 32]), torch.Size([1, 32]))
# pytorch  数学运算
import torch as th # 对于 + - * / 建议使用重载的运算符号 # 关于矩阵的乘法运算, 要注意: * : element wise 对应元素相乘 ;@ 或 .matmul : 矩阵相乘
# Torch.matmul @(符号重载)
a=th.rand(2,2)
b=th.rand(2,4) torch.matmul(a, b)
a@b #建议 x=torch.randn(1,10)
w=torch.randn(1,10,requires_grad=True) #习惯是(out, in)
o=torch.sigmoid(x@w.t())
o.shape # 对于多于2D 仅对最后两维进行操作
a=th.rand(4,3,28,64)
b=th.rand(4,3,64,32)
th.matmul(a,b).shape #torch.Size([4, 3, 28, 32])

where 相比于for if循环可以利用GPU高度并行化加速:

import torch
cond=torch.rand(2,2)
print(cond)
a=torch.zeros(2,2)
b=torch.ones(2,2)
torch.where(cond>0.5, a, b)

gather对应的查表收集操作,参数:查找表,需要查找的索引维度,索引。(通过索引将对应的索引的查找表的元素填入)

pytorch 基础内容的更多相关文章

  1. 【新生学习】第一周:深度学习及pytorch基础

    DEADLINE: 2020-07-25 22:00 写在最前面: 本课程的主要思路还是要求大家大量练习 pytorch 代码,在写代码的过程中掌握深度学习的各类算法,希望大家能够坚持练习,相信经度过 ...

  2. IO基础内容(File)

    JavaIO基础内容 IO技术概述 Output 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 Input 把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操 ...

  3. ROS_Kinetic_09 ROS基础内容(四)

    ROS_Kinetic_09 ROS基础内容(四) 参考网址: http://wiki.ros.org/cn/ROS/Tutorials/UsingRosEd http://wiki.ros.org/ ...

  4. ROS_Kinetic_06 ROS基础内容(三)

    ROS_Kinetic_06 ROS基础内容(三) 先插入一段闲话,关于android的碎片化,无非集中于版本过多,型号各异,品牌杂乱等,似乎这是开源软件无法摆脱的宿命,ROS似乎也在这条路上越走越远 ...

  5. ROS_Kinetic_05 ROS基础内容(二)

    ROS_Kinetic_05 ROS基础内容(二) 1. ROS节点node 官网教程:http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingNodes ...

  6. ROS_Kinetic_04 ROS基础内容(一)

    ROS_Kinetic_04 ROS基础内容(一) 在开始基础内容之前,假定您已经完成了ROS kinetic版本的安装, 如果没有请参考ROS kinetic安装说明. 1. 环境变量 在使用ROS ...

  7. 1、js基础内容

    js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...

  8. css基础内容

    css基础内容 CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中,是为了解决内容与表现分离 ...

  9. (数据科学学习手札43)Plotly基础内容介绍

    一.简介 Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图,本文就将以jupyter notebook ...

随机推荐

  1. 最新Mysql大厂面试必会的34问题

    目录 1.mysql的隔离级别 2.MYSQL性能优化 常用5种方式 3.索引详解 1.何为索引,有什么用? 2.索引的优缺点 4.什么情况下需要建索引? 5.什么情况下不建索引? 6.索引的底层数据 ...

  2. 从零开始,开发一个 Web Office 套件(16):拖动控制点,调整编辑器大小

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  3. systemd进程管理工具实战教程

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 1. systemd介绍 systemd是目前Linux系统上主要的系统守护进程管理工具,由于 ...

  4. HMS Core分析服务助您掌握用户分层密码,实现整体收益提升

    随着市场愈发成熟,开发者从平衡收益和风险的角度开始逐步探索混合变现的优势,内购+广告就是目前市场上混合变现的主要方式之一. 对于混合变现模式,您是否有这样的困惑: 如何判断哪些用户更愿意看广告.哪些用 ...

  5. 使用 .net + blazor 做一个 kubernetes 开源文件系统

    背景 据我所知,目前 kubernetes 本身或者其它第三方社区都没提供 kubernetes 的文件系统.也就是说要从 kubernetes 的容器中下载或上传文件,需要先进入容器查看目录结构,然 ...

  6. Linux系统句柄优化

    Linux系统句柄介绍 文件句柄,会随着进程数增加而增加.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024.在生产环境中很容易到达这个值,因此这里就会成为系统的瓶颈. 在Linux ...

  7. RestFul和控制器

    RestFul和控制器 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. 在Spring MVC中 ...

  8. HMS Core使能AI智慧体验,共建创新应用生态

    5月17日,2022年搜狐科技峰会成功举办,峰会汇聚各界大咖,共同探讨AI 技术的深入应用以及行业数字化的发展趋势.华为终端云服务应用生态BU总裁望岳发表题为<使能AI智慧体验,共建创新应用生态 ...

  9. skywalking 搭建链路监控

    一.skywalking简介 官网:https://github.com/apache/skywalking 引用官网的架构:  二.部署OAP和UI 需使用的镜像 apache/skywalking ...

  10. 429. N-ary Tree Level Order Traversal - LeetCode

    Question 429. N-ary Tree Level Order Traversal Solution 题目大意: N叉树,返回每层的值,从上到下,从左到右 思路: 利用队列遍历这个N叉树 J ...