动手学深度学习(一)预备知识

目录

一、数据操作

1. N维数组样例 

2. 访问元素

3. 基础函数

(1) 创建一个行向量

(2)通过张量的shape属性来访问张量的形状和元素总数

(3)reshape()函数

(4)创建全0、全1、其他常量或从特定分布中随机采样的数字组成的张量

(5)标准运算(张量间的标准运算,都是按元素运算)

(6)拼接函数cat

(7)求和函数sum

(8)矩阵的转置

(9)复制张量

(10)点积,矩阵-向量积和矩阵乘法

(11)范数

4.广播机制

5.转化为Numpy张量


课程推荐:跟李沐学AI的个人空间-跟李沐学AI个人主页-哔哩哔哩视频

一、数据操作

1. N维数组样例 

(1)0-d 标量

1.0

(2)1-d 向量

[1.0, 2.7, 3.4]

(3)2-d 矩阵

[[1.0, 2.7, 3.4][5.0, 0.2, 4.6][4.3, 8.5, 0.2]]

(4)3-d RGB图片(CxHxW)

[[[1.0,2.7,3.4][5.0,0.2,4.6][4.3,8.5,0.2]][[3.2, 5.7, 3.4][5.4, 6.2, 3.2][4.1, 3.5, 6.2]]]

(5)4-d 一个RGB图片批量(BxCxHxW)

(6)5-d 一个视频批量(TxBxCxHxW)

2. 访问元素

切片规则:[start : end : step]

start : 起始索引,从0开始,-1表示结束。
end:结束索引,不包含。
step:步长,即范围内每次取值的间隔;步长为正时,从左向右取值。步长为负时,反向取值。

(1)访问一个元素

[1, 2]

>>> x = torch.arange(1, 17).reshape(4, 4)
>>> x[1, 2]
tensor(7)

(2)访问一行

[1,:]

>>> x[1,:]
tensor([5, 6, 7, 8])

(3)访问一列

 [:,1]

>>> x[:,1]
tensor([ 2,  6, 10, 14])

(4)子区域

[1:3,1:]

>>> x[1:3,1:]
tensor([[ 6,  7,  8],[10, 11, 12]])

[::3,::2]

>>> x[::3,::2]
tensor([[ 1,  3],[13, 15]])

3. 基础函数

(1) 创建一个行向量

x = torch.arange(12)
x  #tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

(2)通过张量的shape属性来访问张量的形状和元素总数

x.shape # torch.Size([12])
x.size() # torch.Size([12])

(3)reshape()函数

改变一个张量的形状 。

X = x.reshape(3,4)
X
# tensor([[ 0,  1,  2,  3],
#         [ 4,  5,  6,  7],
#         [ 8,  9, 10, 11]])

(4)创建全0、全1、其他常量或从特定分布中随机采样的数字组成的张量

全0: 第一个参数为张量的shape。

torch.zeros((2,3,4))
# tensor([[[0., 0., 0., 0.],
#          [0., 0., 0., 0.],
#          [0., 0., 0., 0.]],#         [[0., 0., 0., 0.],
#          [0., 0., 0., 0.],
#          [0., 0., 0., 0.]]])

全1

torch.ones((1,3,4))
# tensor([[[1., 1., 1., 1.],
#          [1., 1., 1., 1.],
#          [1., 1., 1., 1.]]])

其他常量(指定值)

torch.tensor([[1,2],[2,1]])
# tensor([[1, 2],
#         [2, 1]])

(5)标准运算(张量间的标准运算,都是按元素运算)

x = torch.tensor([1.0, 2, 3, 4])
y = torch.tensor([5, 6, 7, 8])
x+y,x-y,x*y,x/y,x**y 
# (tensor([ 6.,  8., 10., 12.]), tensor([-4., -4., -4., -4.]), tensor([ 5., 12., 21., 32.]), tensor([0.2000, 0.3333, 0.4286, 0.5000]), tensor([1.0000e+00, 6.4000e+01, 2.1870e+03, 6.5536e+04]))

比较运算符,按位比较

x == y
# tensor([False, False, False, False])

 * 按位相乘,称为哈达玛乘(数学符号\odot)。

>>> A = torch.arange(9).reshape(3,3)
>>> A
tensor([[0, 1, 2],[3, 4, 5],[6, 7, 8]])
>>> B = torch.arange(9,18).reshape(3,3)
>>> B
tensor([[ 9, 10, 11],[12, 13, 14],[15, 16, 17]])
>>> A * B
tensor([[  0,  10,  22],[ 36,  52,  70],[ 90, 112, 136]])

(6)拼接函数cat

torch.cat(inputs, dim=?)

  • inputs : 待连接的张量序列,可以是任意相同Tensor类型的python 序列
  • dim : 选择的扩维, 必须在0len(inputs[0])之间,沿着此维连接张量序列。

dim=0,表示按第0维方向拼接,即按行方向拼接;dim=1,表示按第0维方向拼接,即按列方向拼接;dim=3…… 

y = torch.tensor(([[4, 1],[3, 5]]))
x = torch.arange(4, dtype=torch.float32).reshape(2, 2)
torch.cat((x, y), dim=0)
# tensor([[0., 1.],
#         [2., 3.],
#         [4., 1.],
#         [3., 5.]])torch.cat((x, y), dim=1)
# tensor([[0., 1., 4., 1.],
#         [2., 3., 3., 5.]])

(7)求和函数sum

参数1,axis:指定求和维度,张量按该维度求和,并将该维度消去。

如,张量形状为[2, 5, 4],axis=0时,求和后,张量形状为[5, 4]。

参数2,keepdims:默认为False,是否保留axis要消去的维度。keepdims=True时,将要消去的维度长度置为1。

如,张量形状为[2, 5, 4],axis=0,keepdims=True时,求和后,张量形状为[1,5, 4]。

1)张量中的所有元素求和:

x = torch.tensor([1.0, 2, 3, 4])
x.sum()
# tensor(10.)

2)按行(第0维)求和:

>>> A = torch.arange(9).reshape(3,3)
>>> A
tensor([[0, 1, 2],[3, 4, 5],[6, 7, 8]])>>> A.sum(axis=0)
tensor([ 9, 12, 15])

3)按列(第1维)求和: 

>>> A.sum(axis=1)
tensor([ 3, 12, 21])

2维求和,3维……

4)keepdims(保留维度)

按某一维度求和时,保留该维度,该维度长度置为1。

>>> A
tensor([[0, 1, 2],[3, 4, 5],[6, 7, 8]])>>> A.sum(axis=1).size()
torch.Size([3])>>> A.sum(axis=1,keepdims=True).size()
torch.Size([3, 1])>>> A.sum(axis=1,keepdims=True)
tensor([[ 3],[12],[21]])
# 按列求均值
>>> A/A.sum(axis=1,keepdims=True)
tensor([[0.0000, 0.3333, 0.6667],[0.2500, 0.3333, 0.4167],[0.2857, 0.3333, 0.3810]])

5)指定多维度求和

A.sum(axis=[n, m]),按n和m维度求和,求和结果中其他维度不变,将n,m维度消去。

>>> A = torch.arange(8).reshape(2,2,2)
>>> A
tensor([[[0, 1],[2, 3]],[[4, 5],[6, 7]]])# 保留第1维度
>>> A.sum(axis=[0,2]).size()
torch.Size([2])# 使用keepdims保留要消去的维度,将维度长度置为1
>>> A.sum(axis=[0,2],keepdims=True).size()
torch.Size([1, 2, 1])# 输出
>>> A.sum(axis=[0,2])
tensor([10, 18])

(8)矩阵的转置

>>> import torch
>>> B = torch.tensor(([1,2,3],[4,5,6],[7,8,9]))
>>> B
tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
>>> B.T
tensor([[1, 4, 7],[2, 5, 8],[3, 6, 9]])

(9)复制张量

“=”,复制之后的两个张量共用一个内存地址。

>>> A = B
>>> id(B)
1950198475976
>>> id(A)
1950198475976
>>> B[0]=10
>>> B
tensor([10,  2,  3,  4,  5,  6,  7,  8,  9])
>>> A
tensor([10,  2,  3,  4,  5,  6,  7,  8,  9])

clone(),重新分配内存地址。

>>> A=B.clone()
>>> id(A)
1950198519512
>>> id(B)
1950198475976

(10)点积,矩阵-向量积和矩阵乘法

向量点积—dot函数(1维):

>>> A = torch.arange(4)
>>> A
tensor([0, 1, 2, 3])
>>> B
tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])
>>> B = torch.arange(4, 8)
>>> B
tensor([4, 5, 6, 7])
>>> torch.dot(A, B)
tensor(38)

矩阵点积2维):

按位相乘求和。

>>> A = torch.arange(9).reshape(3,3)
>>> B = torch.arange(9,18).reshape(3,3)>>> torch.sum(A * B)
tensor(528)

矩阵-向量积(mv函数)

>>> B = torch.arange(9,18).reshape(3,3)
>>> C = torch.arange(3)>>> torch.mv(B, C)
tensor([32, 41, 50])

矩阵乘法(mm函数)

>>> torch.mm(A, B)
tensor([[ 42,  45,  48],[150, 162, 174],[258, 279, 300]])

(11)范数

L1范数:

向量元素的绝对值之和。

>>> u = torch.tensor([3.0, -4.0])
>>> torch.abs(u).sum()
tensor(7.)

L2范数:

向量元素平方和的平方根。

>>> u = torch.tensor([3.0, -4.0])
>>> torch.norm(u)
tensor(5.)

弗罗贝尼乌斯-范数(F-范数)

矩阵元素的平方和的平方根。

>>> torch.norm(torch.ones(4, 9))
tensor(6.)

4.广播机制

1.通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状。

2.对于生成的数组执行按元素操作。

y = torch.arange(12).reshape(3,2,2)
y
# tensor([[[ 0,  1],
#          [ 2,  3]],
#
#         [[ 4,  5],
#          [ 6,  7]],#         [[ 8,  9],
#          [10, 11]]])x = torch.tensor([[1,2],[3,4]])
x# tensor([[1, 2],
#         [3, 4]])x + y# tensor([[[ 1,  3],
#          [ 3,  5]],#         [[ 5,  7],
#          [ 7,  9]],#         [[ 9, 11],
#          [11, 13]]])

5.转化为Numpy张量

A = x.numpy()
type(A)
# <class 'numpy.ndarray'>

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

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

相关文章

在springboot项目中使用策略工厂模式

在springboot项目中使用策略工厂模式 策略接口类 package cn.test.ext;public interface ITestStrategy {void execTestMethod(); }策略实现类 package cn.test.ext.beanlife;import cn.test.ext.ITestStrategy; import cn.test.ext.MyStrategyFactory; import lombok.exter…

【Spring】Spring之推断构造方法源码解析

Spring的Bean生命周期中&#xff0c;需要通过构造方法来实例化对象&#xff0c;如果构造方法由多个或者手动指定构造方法&#xff0c;该如何选择用来实例化Bean的构造方法呢。 构造方法选择 一个构造方法时&#xff1a;如果只有一个无参的构造方法&#xff0c;那么实例化就只…

CorelDraw怎么做立体字效果?CorelDraw制作漂亮的3d立体字教程

1、打开软件CorelDRAW 2019&#xff0c;用文本工具写上我们所需要的大标题。建议字体选用比较粗的适合做标题的字体。 2、给字填充颜色&#xff0c;此时填充的颜色就是以后立体字正面的颜色。我填充了红色&#xff0c;并加上了灰色的描边。 3、选中文本&#xff0c;单击界面左侧…

java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

&#xfeff; Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&am…

Metric3D:Towards Zero-shot Metric 3D Prediction from A Single Image

参考代码&#xff1a;Metric3D 介绍 在如MiDas、LeReS这些文章中对于来源不同的深度数据集使用归一化深度作为学习目标&#xff0c;则在网络学习的过程中就天然失去了对真实深度和物体尺寸的度量能力。而这篇文章比较明确地指出了影响深度估计尺度变化大的因素就是焦距 f f f…

驱动开发-按键中断

编写LED灯的驱动&#xff0c;使用GPIO子系统&#xff0c;里面添加按键的中断处理 1.应用程序发送指令控制LED亮灭 2.按键1 按下&#xff0c;led1电位反转 按键2按下&#xff0c;led2电位反转 按键3 按下&#xff0c;led3电位反转 功能函数 #include<stdlib.h> #inclu…

本地shell无法连接ubuntu,解决办法?

1.启动ssh服务&#xff1b; sudo /etc/init.d/ssh start若重启ssh服务后&#xff0c;还是连接不上&#xff0c;继续第2步&#xff1b; 2.修改SSH配置文件 /etc/ssh/sshd_config 默认是不允许root远程登录的&#xff0c;可以再配置文件开启。 sudo vi /etc/ssh/sshd_config找…

TypeC拓展设计方案|TypeC转HDMI设计方案|CS5261/CS5265芯片设计参数对比

集睿智远CS5261/CS5265都可以用于设计TypeC转HDMI方案&#xff0c;低成本TypeC扩展坞设计方案&#xff0c;而两者也有些差异&#xff1a;1.CS5261支持DP1.4输入&#xff0c;一个HDMI1.4输出&#xff0c;即HDMI输出为4K30HZ ;CS5265DP1.4到HDMI2.0转换芯片&#xff0c;即HDMI输出…

ansible安装lnmp(集中式)

文章目录 一、安装nginx二、安装mysql三、安装php测试&#xff1a; 一、安装nginx - name: the nginx playhosts: webserversremote_user: roottasks:- name: stop firewalld #关闭防火墙service: namefirewalld statestopped enabledno- name: selinux stopc…

pytorch+GPU跑模型时 nvrtc: error: failed to open nvrtc-builtins64_117.dll

1.先检查自己cuda版本&#xff1a; print(torch.version.cuda) #查看cuda版本 print(torch.cuda.is_available()) # 查看cuda是否可用 print(torch.cuda.device_count()) # 查看可行的cuda数目如果版本高于11建议先降版本&#xff0c;然后再试下。 2.重新安装nvrtc-builtin…

CGAL-2D和3D线性几何内核-点和向量-内核扩展

文章目录 1.介绍1.1.鲁棒性 2.内核表示2.1.通过参数化实现泛型2.2.笛卡尔核2.3.同质核2.4.命名约定2.5.内核作为trait类2.6.选择内核和预定义内核 3.几何内核3.1.点与向量3.2.内核对象3.3.方位和相对位置 4.谓语和结构4.1.谓词4.2.结构4.3.交集和变量返回类型4.4.例子4.5.建构性…

“深入探究Spring Boot的核心特性与原理“

标题&#xff1a;深入探究Spring Boot的核心特性与原理 摘要&#xff1a;本文将深入探究Spring Boot的核心特性与原理&#xff0c;包括自动配置、起步依赖和嵌入式容器等方面。通过详细解释每个特性的原理和工作方式&#xff0c;并提供示例代码&#xff0c;帮助读者更好地理解…

Python元编程-装饰器介绍、使用

目录 一、Python元编程装饰器介绍 二、装饰器使用 1. 实现认证和授权功能 2.实现缓存功能 3.实现日志输出功能 三、附录 1. logging.basicConfig介绍 2. 精确到毫秒&#xff0c;打印时间 方法一&#xff1a;使用datetime 方法二&#xff1a;使用time 一、Python元编程…

gin 框架中的 gin.Context

〇、前言 Context 是 gin 中最重要的部分。 例如&#xff0c;它允许我们在中间件之间传递变量、管理流程、验证请求的 JSON 并呈现 JSON 响应。 Context 中封装了原生的 Go HTTP 请求和响应对象&#xff0c;同时还提供了一些方法&#xff0c;用于获取请求和响应的信息、设置响…

【Linux】Docker consul 容器服务更新与发现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Docker consul 容器服务更新与发现 服务注册与发现consul 概述consul 部署consul服务器registrator服务器 consul-templateconsul 多节点 服务注册与发现 服务注册与发现是微…

什么是Java中的NIO(New IO)?

首先&#xff0c;NIO是什么&#xff1f;NIO全称是Java NIO&#xff08;New IO&#xff09;&#xff0c;它是一种新的I/O模型&#xff0c;相对于传统的I/O模型&#xff0c;NIO具有更高的性能和更低的延迟。在NIO中&#xff0c;我们使用通道&#xff08;Channels&#xff09;和缓…

Redis支持的数据持久化方法有哪些?它们之间有什么区别?

Redis支持两种数据持久化方法&#xff0c;分别是RDB&#xff08;快照&#xff09;和AOF&#xff08;日志&#xff09;&#xff1a; RDB&#xff08;Redis DataBase&#xff09;持久化&#xff1a;RDB是将内存中的数据定期保存到磁盘上的二进制文件。当某个条件满足时&#xff0…

matlab程序中文乱码

不同版本的matlab共存在GBK&#xff08;即&#xff0c;ANSI&#xff09;和UTF-8两种编码方式&#xff0c;因此可能会出现乱码问题。 第一步&#xff1a;在matlab的命令行窗口输入指令&#xff0c;查看当前编码方式 feature(locale) 第二步&#xff1a;用Notepad打开文件&…

chrome 插件开发

参考&#xff1a; https://www.cnblogs.com/amboke/p/16718855.html 设计和实现一个 Chrome 插件提升登录效率_若川的技术博客_51CTO博客 最新版 V3 chrome 插件开发~ demo 坑 - 掘金 官方文档&#xff1a;https://developer.chrome.com/docs/extensions/

【实战】 九、深入React 状态管理与Redux机制(二) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十七)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…