深度学习基础之三分钟轻松搞明白tensor到底是个啥

简介: 再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?

再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?


gamwatcher.blog.csdn.net/article/det…


本科生学深度学习,搭建环境,再不入坑就晚了


gamwatcher.blog.csdn.net/article/det…


评论包邮送书了!!!深度学习基础之numpy,小白轻松入门numpy


gamwatcher.blog.csdn.net/article/det…


深度学习基础之matplotlib,一文搞定各个示例,建议收藏以后参考gamwatcher.blog.csdn.net/article/det…


大家好,我是香菜,原创不易,欢迎点赞评论,一起学习


pytorch 和tensorflow 中最重要的概念就是tensor了,tensorflow 这个框架的名字中很直白,就是tensor的流动,所以学习深度学习的第一课就是得搞懂tensor到底是个什么东西了,今天就来学习下,OK,起飞


1.tensor到底是啥 tensor 即“张量”(翻译的真难理解,破概念)。实际上跟numpy数组、向量、矩阵的格式基本一样。但是是专门针对GPU来设计的,可以运行在GPU上来加快计算效率,不要被吓到。


在PyTorch中,张量Tensor是最基础的运算单位,与NumPy中的NDArray类似,张量表示的是一个多维矩阵。不同的是,PyTorch中的Tensor可以运行在GPU上,而NumPy的NDArray只能运行在CPU上。由于Tensor能在GPU上运行,因此大大加快了运算速度。


一句话总结:一个可以运行在gpu上的多维数据而已


x = torch.zeros(5) 调试看下这个东西到底在内存中是什么,都有哪些属性,别说话,看图。

efa79852751842c398cddd00af896b6f~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

2.tensor的创建 tensor 概念再怎么高级也只是一个数据结构而已,一个类,怎么创建这个对象呐,有下面几种方式。


直接创建 pytorch 提供的创建tensor的方式


torch.tensor(data, dtype=None, device=None,requires_grad=False)


data - 可以是list, tuple, numpy array, scalar或其他类型


dtype - 可以返回想要的tensor类型


device - 可以指定返回的设备


requires_grad - 可以指定是否进行记录图的操作,默认为False


快捷方式创建


t1 = torch.FloatTensor([[1,2],[5,6]])


从numpy中获得数据 numpy是开发中常用的库,所以怎么将numpy中的数据给到tensor中,这个pytorch也提供了接口,很方便


torch.from_numpy(ndarry) 注:生成返回的tensor会和ndarry共享数据,任何对tensor的操作都会影响到ndarry,反之亦然


内置的tensor创建方式 torch.empty(size)返回形状为size的空tensor


torch.zeros(size)全部是0的tensor


torch.zeros_like(input)返回跟input的tensor一个size的全零tensor


torch.ones(size)全部是1的tensor


torch.ones_like(input)返回跟input的tensor一个size的全一tensor


torch.arange(start=0, end, step=1)返回一个从start到end的序列,可以只输入一个end参数,就跟python的range()一样了。实际上PyTorch也有range(),但是这个要被废掉了,替换成arange了


torch.full(size, fill_value)这个有时候比较方便,把fill_value这个数字变成size形状的张量


torch.randn(5) 随机一个生成一个tensor


3、tensor转换 tensor数据的转换在开发中也是常用的,看下常用的两种转换方式


tensor 转为numpy
a = torch.ones(5)
print(a)
b = a.numpy()
print(b)
tensor 转为list
data = torch.zeros(3, 3)
data = data.tolist()
print(data)
复制代码


4、张量的运算 维度提升


tensor的broadcasting是不同维度之间进行运算的一种手段,和不同的数据类型进行运算时的原则差不多,比如整型和float 进行运算的时候,将数据往精度更高的数据类型进行提升,tensor的维度扩张也是类似。


方法:


遍历所有的维度,从尾部维度开始,每个对应的维度大小要么相同,要么其中一个是 1,要么其中一个不存在。不存在则扩展当前数据,可以看到下图红框部分,就数据进行了扩展


db96a14dfd08484fa5b4c79954eb0916~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

a = torch.zeros(2, 3)
b = torch.ones(3)
print(a)
print(b)
print(a + b)
复制代码


验证下结果,可以看到最后的结果都是1:

40d9aa58cdd4497ab844eda7c4ae8946~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

总结:和不同数据类型相加时精度提升一个道理,这里是维度的提升


加法

1fb9d129c001439baa8ac9b198c5ee58~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

y = t.rand(2, 3)        # 使用[0,1]均匀分布构建矩阵
z = t.ones(2, 3)        # 2x3 的全 1 矩阵
# 3 中加法操作等价
print(y + z)            ### 加法1
t.add(y, z)             ### 加法2
减法
a = t.randn(2, 1)
b = t.randn(2, 1)
print(a)
### 等价操作
print(a - b)
print(t.sub(a, b))
print(a)        ### sub 后 a 没有变化
复制代码


乘法 矩阵的乘法大学的时候都学过,我们简单复习下,交叉相乘,理解原理就行,因为多维度的矩阵乘法更复杂,还是pytorch提供了支持


c3e6fc18e6cf4a18929103a51492ac18~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

t.mul(input, other, out=None):矩阵乘以一个数


t.matmul(mat, mat, out=None):矩阵相乘


t.mm(mat, mat, out=None):基本上等同于 matmul


a=torch.randn(2,3) b=torch.randn(3,2)


等价操作


print(torch.mm(a,b))        # mat x mat print(torch.matmul(a,b))    # mat x mat


等价操作


print(torch.mul(a,3))       # mat 乘以 一个数 print(a * 3) 其他的一些运算 pytorch还支持更多的运算,这些运算就不一一介绍了,在使用的时候测试一下就知道结果了


t.div(input, other, out=None)#:除法
t.pow(input, other, out=None)#:指数
t.sqrt(input, out=None)#:开方
t.round(input, out=None)#:四舍五入到整数
t.abs(input, out=None)#:绝对值
t.ceil(input, out=None)#:向上取整
t.clamp(input, min, max, out=None)#:把 input 规范在 min 到 max 之间,超出用 min 和 max 代替,可理解为削尖函数
t.argmax(input, dim=None, keepdim=False)#:返回指定维度最大值的索引
复制代码


总结 tensor是深度学习的基础,也是入门的,可以简单的理解为一个多维的数据结构,并且内置了一些特殊运算,你品,你细品,这似乎没什么复杂的,常规操作而已,稳住,不慌,我们能赢,看透了本质就没什么难的了。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
6月前
|
机器学习/深度学习 存储 PyTorch
PyTorch深度学习基础:张量(Tensor)详解
【4月更文挑战第17天】本文详细介绍了PyTorch中的张量,它是构建和操作深度学习数据的核心。张量是多维数组,用于存储和变换数据。PyTorch支持CPU和GPU张量,后者能加速大规模数据处理。创建张量可通过`torch.zeros()`、`torch.rand()`或直接从Python列表转换。张量操作包括数学运算、切片和拼接。在深度学习中,张量用于神经网络模型的构建和训练。理解张量对于掌握PyTorch至关重要。
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【深度学习】Pytorch Tensor 张量
【1月更文挑战第10天】【深度学习】Pytorch Tensor 张量
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【深度学习】Pytorch Tensor 张量
【1月更文挑战第26天】【深度学习】Pytorch Tensor 张量
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch深度学习基础之Tensor对象及其应用的讲解及实战(附源码 简单易懂 包括分段 映射 矩阵乘法 随机数等等)
PyTorch深度学习基础之Tensor对象及其应用的讲解及实战(附源码 简单易懂 包括分段 映射 矩阵乘法 随机数等等)
76 1
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch深度学习基础之Tensor的变换、拼接、拆分讲解及实战(附源码 超详细必看)
PyTorch深度学习基础之Tensor的变换、拼接、拆分讲解及实战(附源码 超详细必看)
118 0
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch深度学习基础之Tensor的索引和切片讲解及实战(附源码 简单易懂)
PyTorch深度学习基础之Tensor的索引和切片讲解及实战(附源码 简单易懂)
208 0
|
机器学习/深度学习 索引
深度学习基础:标量、向量、矩阵、张量
深度学习基础:标量、向量、矩阵、张量
938 0
深度学习基础:标量、向量、矩阵、张量
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习Pytorch框架Tensor张量
深度学习Pytorch框架Tensor张量
73 0
|
机器学习/深度学习 存储 并行计算
深度学习基础——PyTorch简介和Tensor张量详解
PyTorch具有悠久的历史,它的前身 Torch 是用Lua写的机器学习框架,后来受到 Facebook、NVIDIA (著名显卡生产厂商)、Uber 等大公司以及斯坦福大学、卡内基梅隆大学等著名高校的支持。下面,就让我们走进PyTorch的世界。
288 0
深度学习基础——PyTorch简介和Tensor张量详解
|
机器学习/深度学习 存储 PyTorch
【MindSpore深度学习框架】MindSpore中的张量Tensor
【MindSpore深度学习框架】MindSpore中的张量Tensor
479 0
【MindSpore深度学习框架】MindSpore中的张量Tensor