Tensor:Pytorch神经网络界的Numpy(一)

简介: Tensor:Pytorch神经网络界的Numpy(一)

Tensor


Tensor,它可以是0维、一维以及多维的数组,你可以将它看作为神经网络界的Numpy,它与Numpy相似,二者可以共享内存,且之间的转换非常方便。


但它们也不相同,最大的区别就是Numpy会把ndarray放在CPU中进行加速运算,而由Torch产生的Tensor会放在GPU中进行加速运算。


对于Tensor,从接口划分,我们大致可分为2类:


1.torch.function:如torch.sum、torch.add等。

2.tensor.function:如tensor.view、tensor.add等。


而从是否修改自身来划分,会分为如下2类:


1.不修改自身数据,如x.add(y),x的数据不变,返回一个新的Tensor。

2.修改自身数据,如x.add_(y),运算结果存在x中,x被修改。


简单的理解就是方法名带不带下划线的问题。


现在,我们来实现2个数组对应位置相加,看看其效果就近如何:

import torch
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
print(x + y)
print(x.add(y))
print(x)
print(x.add_(y))
print(x)


运行之后,效果如下:

下面,我们来正式讲解Tensor的使用方式。


创建Tensor

与Numpy一样,创建Tensor也有很多的方法,可以自身的函数进行生成,也可以通过列表或者ndarray进行转换,同样也可以指定维度等。具体方法如下表(数组即张量):

函数 意义
Tensor(*size) 直接从参数构造,支持list,Numpy数组
eye(row,column) 创建指定行列的二维Tensor
linspace(start,end,steps) 从start到end,均匀切分成steps份
logspace(start,end,steps) 从10^start到10^and,均分成steps份
rand/randn(*size) 生成[0,1)均匀分布/标准正态分布的数据
ones(*size) 生成指定shape全为1的张量
zeros(*size) 生成指定shape全为0的张量
ones_like(t) 返回与t的shape相同的张量,且元素全为1
zeros_like(t) 返回与t的shape相同的张量,且元素全为0
arange(start,end,step) 在区间[start,end)上,以间隔step生成一个序列张量
from_Numpy(ndarray) 从ndarray创建一个Tensor

这里需要注意Tensor有大写的方法也有小写的方法,具体效果我们先来看看代码:

import torch
t1 = torch.tensor(1)
t2 = torch.Tensor(1)
print("值{0},类型{1}".format(t1, t1.type()))
print("值{0},类型{1}".format(t2, t2.type()))


运行之后,效果如下:



可以看到,tensor与Tensor生成的值的类型就不同,而且t2(Tensor)返回一个大小为1的张量,而t1(tensor)返回的就是1这个值。


其他示例如下:

import torch
import numpy as np
t1 = torch.zeros(1, 2)
print(t1)
t2 = torch.arange(4)
print(t2)
t3 = torch.linspace(10, 5, 6)
print(t3)
nd = np.array([1, 2, 3, 4])
t4 = torch.from_numpy(nd)
print(t4)


其他例子基本与上面基本差不多,这里不在赘述。



修改Tensor维度

同样的与Numpy一样,Tensor一样有维度的修改函数,具体的方法如下表所示:

函数 意义
size() 返回张量的shape,即维度
numel(input) 计算张量的元素个数
view(*shape) 修改张量的shape,但View返回的对象与源张量共享内存,修改一个,另一个也被修改。Reshape将生成新的张量,而不要求源张量是连续的,View(-1)展平数组
resize 类似与view,但在size超出时,会重新分配内存空间
item 若张量为单元素,则返回Python的标量
unsqueeze 在指定的维度增加一个“1”
squeeze 在指定的维度压缩一个“1”

示例代码如下所示:

import torch
t1 = torch.Tensor([[1, 2]])
print(t1)
print(t1.size())
print(t1.dim())
print(t1.view(2, 1))
print(t1.view(-1))
print(torch.unsqueeze(t1, 0))
print(t1.numel())


运行之后,效果如下:

相关文章
|
5天前
|
存储 PyTorch 算法框架/工具
PyTorch 中的 Tensor:属性、数据生成和基本操作
PyTorch 中的 Tensor:属性、数据生成和基本操作
23 0
|
5天前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
362 1
|
3天前
|
机器学习/深度学习 JSON PyTorch
图神经网络入门示例:使用PyTorch Geometric 进行节点分类
本文介绍了如何使用PyTorch处理同构图数据进行节点分类。首先,数据集来自Facebook Large Page-Page Network,包含22,470个页面,分为四类,具有不同大小的特征向量。为训练神经网络,需创建PyTorch Data对象,涉及读取CSV和JSON文件,处理不一致的特征向量大小并进行归一化。接着,加载边数据以构建图。通过`Data`对象创建同构图,之后数据被分为70%训练集和30%测试集。训练了两种模型:MLP和GCN。GCN在测试集上实现了80%的准确率,优于MLP的46%,展示了利用图信息的优势。
10 1
|
3天前
|
机器学习/深度学习 PyTorch 算法框架/工具
神经网络基本概念以及Pytorch实现,多线程编程面试题
神经网络基本概念以及Pytorch实现,多线程编程面试题
|
5天前
|
机器学习/深度学习 数据采集 PyTorch
构建你的第一个PyTorch神经网络模型
【4月更文挑战第17天】本文介绍了如何使用PyTorch构建和训练第一个神经网络模型。首先,准备数据集,如MNIST。接着,自定义神经网络模型`SimpleNet`,包含两个全连接层和ReLU激活函数。然后,定义交叉熵损失函数和SGD优化器。训练模型涉及多次迭代,计算损失、反向传播和参数更新。最后,测试模型性能,计算测试集上的准确率。这是一个基础的深度学习入门示例,为进一步探索复杂项目打下基础。
|
5天前
|
机器学习/深度学习 存储 PyTorch
PyTorch深度学习基础:张量(Tensor)详解
【4月更文挑战第17天】本文详细介绍了PyTorch中的张量,它是构建和操作深度学习数据的核心。张量是多维数组,用于存储和变换数据。PyTorch支持CPU和GPU张量,后者能加速大规模数据处理。创建张量可通过`torch.zeros()`、`torch.rand()`或直接从Python列表转换。张量操作包括数学运算、切片和拼接。在深度学习中,张量用于神经网络模型的构建和训练。理解张量对于掌握PyTorch至关重要。
|
5天前
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
19 1
|
5天前
|
机器学习/深度学习 PyTorch 算法框架/工具
Python中用PyTorch机器学习神经网络分类预测银行客户流失模型
Python中用PyTorch机器学习神经网络分类预测银行客户流失模型
|
5天前
|
机器学习/深度学习 数据可视化 PyTorch
时空图神经网络ST-GNN的概念以及Pytorch实现
本文介绍了图神经网络(GNN)在处理各种领域中相互关联的图数据时的作用,如分子结构和社交网络。GNN与序列模型(如RNN)结合形成的时空图神经网络(ST-GNN)能捕捉时间和空间依赖性。文章通过图示和代码示例解释了GNN和ST-GNN的基本原理,展示了如何将GNN应用于股票市场的数据,尽管不推荐将其用于实际的股市预测。提供的PyTorch实现展示了如何将时间序列数据转换为图结构并训练ST-GNN模型。
31 1
|
5天前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
116 2