草庐IT

0825torch基础入门操作

不玩游戏的小菜鸡 2023-04-21 原文

目录

一、常用操作

1.1:torch库函数

1.2 torch类对象方法

1.3 torch类对象属性

1.4:tensor间的运算

1.5 类对象元素的获取(切片)

1.6:转为numpy对象

二、注意事项

1:关于ndarray对象切片

2、关于numpy和pytorch中,sum()方法的使用

3、矩阵乘法

4、深度学习中常用范数

5、切片问题

三、其他


一、常用操作


python中的“nadrray类”和“tensor类”都是线性代数中数组的体现。

常用库函数、类对象方法、类对象属性、类对象之间运算、类对象元素的获取(切片)

1.1:torch库函数

                     pytorch库                         numpy库
torch.tensor() 

np.array()
torch.ones()    np.ones()
torch.zeros()    np.zeros()
torch.arange()    np.arange()
torch.randn()    np.random.rand()
torch.exp()    np.exp()
注:都是一些常用的函数,可指定dtype,例如dtype=torch.float32,深度学习中常用float32类型数据

1.2 torch类对象方法

 假设x是一个tensor对象,常用方法有: x.reshape()    x.numel() (计算X中元素的个数)          len(x)输出第一个轴的维度       x.mean()     x.sum()    x.T

1.3 torch类对象属性

 x.shape()    

x.dim()

x.size()

1.4:tensor间的运算

加(+)、减(-)、乘(X)、除(÷)、是否相等(=;!=)、点积torch.dot(),  torch.mv(),  torch.mm()

 点乘

>>> a = torch.ones(3,4)
>>> a
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])
>>> b = torch.Tensor([1,2,3]).reshape((3,1))
>>> b
tensor([[1.],
        [2.],
        [3.]])
>>> torch.mul(a, b)
tensor([[1., 1., 1., 1.],
        [2., 2., 2., 2.],
        [3., 3., 3., 3.]])

矩阵乘

torch.mm和torch.matmul两个函数都是用来计算矩阵相乘。mm是处理二维矩阵,超过二维将报错;matmul是处理高维。

# 二维乘二维
>>> a = torch.ones(3,4)
>>> b = torch.ones(4,2)
>>> torch.mm(a, b)
tensor([[4., 4.],
        [4., 4.],
        [4., 4.]])
# 二维乘三维
>>> a = torch.ones(3,4)
>>> b = torch.ones(5,4,2)
>>> torch.matmul(a, b).shape
torch.Size([5, 3, 2])
# 三维乘三维
>>> a = torch.ones(5,4,2)
>>> b = torch.ones(5,2,3)
>>> torch.matmul(a, b).shape
torch.Size([5, 4, 3])

线性代数

函数功能
trace对角线元素之和(矩阵的迹)
diag对角线元素
triu/tril矩阵的上三角/下三角,可指定偏移量
mm/bmm矩阵乘法,batch的矩阵乘法
addmm/addmm/addmv/addr矩阵运算
t转置
dot/cross内积/外积
inverse求逆矩阵
svd奇异值分解

1.5 类对象元素的获取(切片)

切片(用方括号)x[  ]

1.6:转为numpy对象

x.numpy()

总结:深度学习存储和操作数据的主要接口是张量。它提供了各种功能,包括基本数学运算、广播、索引、切片、内存节省和转换其他Python对象。

二、注意事项


1:关于ndarray对象切片

import numpy as np
num = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(num)
print(num[[0, 1], [0, 1]])
结果:

[[1 2 3]
 [4 5 6]
 [7 8 9]]
 
[1 5]
numpy中的切片方式有些奇怪,num[[0, 1], [0, 1]]表示第一行第一列以及第二行第二列两个元素所组成的数组。

2、关于numpy和pytorch中,sum()方法的使用

求和:x.sum(axis=0),含义:沿0轴汇总以生成输出向量。非汇总求和方法:可指定参数 keepdims=True

若沿k轴汇总,则丢失k轴的维数

A.cumsum()函数,汇总函数,此函数不会沿任何轴汇总输入张量。

num.sum(axis=0)
结果:

array([12, 15, 18])


3、矩阵乘法

[两个矩阵的按元素乘法称为 哈达玛积(Hadamard product)(数学符号 ⊙)]

torch.dot()

要点:python和matlab不同,python中 * 的意思是矩阵按元素进行乘法,而matlab中则表示矩阵乘法

torch.mv() 矩阵与向量相乘    torch.mm()  矩阵与矩阵相乘   

4、深度学习中常用范数

其中,在 L2 范数中常常省略下标 2,也就是说,∥x∥ 等同于 ∥x∥2,方法:torch.norm(x)

深度学习常用范数,如L2范 L1范数、数和弗罗贝尼乌斯范数。

5、切片问题

matlab:start:step:end

python:start:end:step

三、其他


1、pd.get_dummies(独热编码处理)

思想:将pandas中的数据通过torch.tensor(DataFrame.values())转化为张量

2、导数、梯度、自动求导

梯度和导数的关系?

梯度:函数f(x)相对于x的梯度是一个包含n个偏导数的向量。

导数又分为全导数和偏导数,只有正负,没有方向。

3、概率论基础知识

fair_probs = torch.ones([6]) / 6
counts = multinomial.Multinomial(1000, fair_probs).sample()#模拟掷1000次骰子
Bayes 定理 (Bayes’ theorem)。它如下所示。通过构造,我们有乘法规则, P(A,B)=P(B∣A)P(A)。根据对称性,这也适用于 P(A,B)=P(A∣B)P(B)。假设 P(B)>0, 求解其中一个条件变量,我们得到

有关0825torch基础入门操作的更多相关文章

  1. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  2. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  5. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  6. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  7. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  8. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  9. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  10. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

随机推荐