pytorch——数据操作

简介: pytorch——数据操作

一、数据初始化

1.torch.arange()

用来构建一个行向量,参数=元素个数,从0开始的自然数排列,默认float型。一个新定义的张量(tensor)都会存储在主存中,在CPU中计算。

例子:

x = torch.arange(12)

输出:

tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

2.x.shape

获取tensor结构

例子:

x.shape

输出:

torch.Size([12])

3.x.numel()

获取trensor中的元素个数

输出:

12

4.x.reshape()

改变x的形状,但不改变里面的值

例子:

x = x.reshape(3, 4)

输出:

tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

已知tensor原本结构和长宽任一,另一参数设为-1也可。

例如,x.reshape(3, 4), 可以设为 x.reshape(-1, 4) or x.reshape(3, -1).

5.torch.zeros()、torch.ones()

将tensor初始化为0或1

例子:

torch.zeros(2, 3, 4)
torch.ones((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.]]])
tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]],
        [[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]])

6.torch.randn()

根据正态分布和标准差随机初始化

例子:

torch.randn(3, 4)

输出:

tensor([[ 0.9207, -0.6144,  1.2993,  0.5726],
        [-1.5666, -0.0836,  1.8288,  0.8677],
        [ 0.5672, -1.2084, -1.5252, -1.9457]])

7.torch.tensor()

可利用list给tensor自定义初始化

例子:

torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])

输出:

tensor([[2, 1, 4, 3],
        [1, 2, 3, 4],
        [4, 3, 2, 1]])

二、运算

1.加减乘除幂次方

例子:

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y  # The ** operator is exponentiation
Copy to clipboard

输出:

(tensor([ 3.,  4.,  6., 10.]),
 tensor([-1.,  0.,  2.,  6.]),
 tensor([ 2.,  4.,  8., 16.]),
 tensor([0.5000, 1.0000, 2.0000, 4.0000]),
 tensor([ 1.,  4., 16., 64.]))

一元指数运算:

torch.exp(x)

输出:

tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])

2.按照给定的行(axis=0)或列(axis=1),连接tensor

例子:

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

输出:

(tensor([[ 0.,  1.,  2.,  3.],
         [ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.],
         [ 2.,  1.,  4.,  3.],
         [ 1.,  2.,  3.,  4.],
         [ 4.,  3.,  2.,  1.]]),
 tensor([[ 0.,  1.,  2.,  3.,  2.,  1.,  4.,  3.],
         [ 4.,  5.,  6.,  7.,  1.,  2.,  3.,  4.],
         [ 8.,  9., 10., 11.,  4.,  3.,  2.,  1.]]))

3.逻辑运算

tensor对应位置进行运算,相等为1不等为0

例子:

x == y

输出:

tensor([[False,  True, False,  True],
        [False, False, False, False],
        [False, False, False, False]])

4.tensor元素相加

例子:

x.sum()

输出:

tensor(66.)

三、广播

对于相同形状的tensor运算只需对应位置计算,对不同形状的tensor,需扩展行或列使得tensor结构相同再进行计算。

例子:

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a, b

两个tensor行列都不同

(tensor([[0],
         [1],
         [2]]),
 tensor([[0, 1]]))

做加法:

a + b

输出:

tensor([[0, 1],
        [1, 2],
        [2, 3]])

四、索引和切片

索引从0开始,范围大小包括第一个元素但不包括最后一个。也可以用负索引。

例子:

x[-1], x[1:3]

输出:

(tensor([ 8.,  9., 10., 11.]),
 tensor([[ 4.,  5.,  6.,  7.],
         [ 8.,  9., 10., 11.]]))

即-1代表输出最后一个,[1:3]代表输出索引为1-3但不包括3。

还可以根据索引更改元素。

例子:

x[1, 2] = 9
x

输出:

tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  9.,  7.],
        [ 8.,  9., 10., 11.]])

改了第2行第3列的元素。

如果要为tensor中多个元素同时更改数值,用切片方式给对应索引换值。

例子:

x[0:2, :] = 12
x

输出:

tensor([[12., 12., 12., 12.],
        [12., 12., 12., 12.],
        [ 8.,  9., 10., 11.]])

给第1行和第2行的每列元素换值。

五、节省内存

在进行运算时,会给计算结果分配新的内存,可以通过Python自带的id函数:如果两个实例的ID一致,那么它们所对应的内存地址相同;反之则不同。

before = id(y)
y = y + x
id(y) == before

输出:

False

如果想指定结果到特定内存,可以使用前面介绍的索引来进行替换操作。

例子:

z = torch.zeros_like(y)
print('id(z):', id(z))
z[:] = x + y
print('id(z):', id(z))

输出:

id(z): 140144689613552
id(z): 140144689613552

实际上,上例中还是为X + Y开了临时内存来存储计算结果,再复制到Z对应的内存。如果想避免这个临时内存开销,可以直接将运算结果放回x。

例子:

before = id(x)
x += y
id(x) == before

输出:

True

六、转换为其他的python对象

例子:

a = x.numpy()
b = torch.tensor(a)
type(a), type(b)

输出:

(numpy.ndarray, torch.Tensor)

将tensor转换为数值,用item()

例子:

a = torch.tensor([3.5])
a, a.item(), float(a), int(a)

输出:

(tensor([3.5000]), 3.5, 3.5, 3)

如有不对,请帮忙指正!!!

相关文章
|
7月前
|
存储 PyTorch 算法框架/工具
PyTorch 中的 Tensor:属性、数据生成和基本操作
PyTorch 中的 Tensor:属性、数据生成和基本操作
248 0
|
机器学习/深度学习 数据采集 PyTorch
使用自定义 PyTorch 运算符优化深度学习数据输入管道
使用自定义 PyTorch 运算符优化深度学习数据输入管道
79 0
|
7月前
|
数据采集 PyTorch 算法框架/工具
PyTorch基础之数据模块Dataset、DataLoader用法详解(附源码)
PyTorch基础之数据模块Dataset、DataLoader用法详解(附源码)
1115 0
|
PyTorch 算法框架/工具 索引
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
738 0
Pytorch学习笔记(2):数据读取机制(DataLoader与Dataset)
|
3月前
|
数据挖掘 PyTorch TensorFlow
|
7月前
|
机器学习/深度学习 数据采集 PyTorch
pytorch中的数据索引
pytorch中的数据索引
66 0
|
3月前
|
机器学习/深度学习 数据挖掘 TensorFlow
从数据小白到AI专家:Python数据分析与TensorFlow/PyTorch深度学习的蜕变之路
【9月更文挑战第10天】从数据新手成长为AI专家,需先掌握Python基础语法,并学会使用NumPy和Pandas进行数据分析。接着,通过Matplotlib和Seaborn实现数据可视化,最后利用TensorFlow或PyTorch探索深度学习。这一过程涉及从数据清洗、可视化到构建神经网络的多个步骤,每一步都需不断实践与学习。借助Python的强大功能及各类库的支持,你能逐步解锁数据的深层价值。
76 0
|
5月前
|
数据挖掘 PyTorch TensorFlow
Python数据分析新纪元:TensorFlow与PyTorch双剑合璧,深度挖掘数据价值
【7月更文挑战第30天】随着大数据时代的发展,数据分析变得至关重要,深度学习作为其前沿技术,正推动数据分析进入新阶段。本文介绍如何结合使用TensorFlow和PyTorch两大深度学习框架,最大化数据价值。
120 8
|
5月前
|
机器学习/深度学习 数据挖掘 TensorFlow
|
5月前
|
机器学习/深度学习 PyTorch TensorFlow
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。

热门文章

最新文章