PyTorch入门笔记:张量Tensors

本文介绍了如何在PyTorch中创建、操作张量,如通过数据、numpy数组和已有张量创建,以及张量的基本属性、运算、索引切片和与numpy的交互。特别提到在AI开发中,numpy与tensor的转换常见且重要。
摘要由CSDN通过智能技术生成

这是我在pytorch官网下,入门pytorch的入门笔记。

适合已经装好了pytorch,但还不会使用的朋友。

张量tensors

张量是一种特殊的数据结构,和数组、矩阵非常相似。

在pytorch中,使用张量对模型的输入和输出以及模型的参数进行编码。

张量与numpy的ndarray是类似的。

首先需要导入库:

import torch
import numpy as np

初始化张量

通过数据创建张量

输入:

data=[[1,2],[3,4]]
x_data=torch.tensor(data)
print(x_data)

输出结果:

tensor([[1, 2],
        [3, 4]])
通过numpy数组创建张量

我觉得,这个对我来说会比较常用

输入:

np_array=np.array(data)
x_np=torch.from_numpy(np_array)
print(x_np)

输出结果:

tensor([[1, 2],
        [3, 4]], dtype=torch.int32)
通过另一个张量创建张量

输入:

x_ones = torch.ones_like(x_data) 
# retains the properties of x_data
print(f"Ones Tensor: \n {x_ones} \n")

x_rand = torch.rand_like(x_data, dtype=torch.float) 
# overrides the datatype of x_data
print(f"Random Tensor: \n {x_rand} \n")

输出结果:

Ones Tensor: 
 tensor([[1, 1],
        [1, 1]]) 

Random Tensor: 
 tensor([[0.7708, 0.7000],
        [0.1971, 0.9383]]) 
使用随机数或常数值

输入:

shape=(2,3,)
rand_tensor=torch.rand(shape)
ones_tensor=torch.ones(shape)
zeros_tensor=torch.zeros(shape)
print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")

可以看出,和numpy的api还挺像的。

shape用来确定张量的维数。

输出:

Random Tensor: 
 tensor([[0.1455, 0.9689, 0.1498],
        [0.0559, 0.1572, 0.5336]]) 

Ones Tensor: 
 tensor([[1., 1., 1.],
        [1., 1., 1.]]) 

Zeros Tensor: 
 tensor([[0., 0., 0.],
        [0., 0., 0.]])

张量的属性

张量属性描述了它们的形状、数据类型以及存储它们的设备。

输入:

tensor=torch.rand(3,4)
print(tensor)
print(tensor.shape)
print(tensor.dtype)
print(tensor.device)

输出:

tensor([[0.0196, 0.2932, 0.2158, 0.3143],
        [0.6371, 0.8258, 0.9822, 0.4676],
        [0.5914, 0.5520, 0.8491, 1.0000]])
torch.Size([3, 4])
torch.float32
cpu

张量运算

https://pytorch.org/docs/stable/torch.html描述了100多种张量运算,包括线性代数、矩阵操作(转置、索引、切片)等。这里只介绍最基础的,运算部分可以根据需要去官网直接查。

这些操作中的每一个都可以在GPU上运行,在数据量比较大,计算比较简单的情况下,速度通常可以高过CPU。

默认情况下,张量是在CPU上创建的。我们需要使用.to方式显式地将张量移到GPU(在检查GPU可用性之后)。

可以通过这种方式把张量移到GPU。

if torch.cuda.is_available():
    tensor=tensor.to("cuda")
类似numpy的索引和切片

输入:

tensor=torch.rand((4,4))
print(tensor)
print(tensor[0,2])
# first row
print(tensor[0])
# first column
print(tensor[:,0])
tensor[:,1]=0
print(tensor)

输出:

tensor([[0.0400, 0.3824, 0.3405, 0.3085],
        [0.2176, 0.2908, 0.5853, 0.0284],
        [0.1771, 0.7635, 0.9736, 0.1119],
        [0.9058, 0.8726, 0.0410, 0.7673]])
tensor(0.3405)
tensor([0.0400, 0.3824, 0.3405, 0.3085])
tensor([0.0400, 0.2176, 0.1771, 0.9058])
tensor([[0.0400, 0.0000, 0.3405, 0.3085],
        [0.2176, 0.0000, 0.5853, 0.0284],
        [0.1771, 0.0000, 0.9736, 0.1119],
        [0.9058, 0.0000, 0.0410, 0.7673]])

也可以用torch.cat沿给定维度连接一系列张量。

输入:

tensor=torch.rand((3,2))
print(tensor)
t1=torch.cat([tensor,tensor,tensor],dim=0)
print(t1)
t1=torch.cat([tensor,tensor,tensor],dim=1)
print(t1)

输出:

tensor([[0.5197, 0.0784],
        [0.1234, 0.7435],
        [0.6404, 0.0392]])
tensor([[0.5197, 0.0784],
        [0.1234, 0.7435],
        [0.6404, 0.0392],
        [0.5197, 0.0784],
        [0.1234, 0.7435],
        [0.6404, 0.0392],
        [0.5197, 0.0784],
        [0.1234, 0.7435],
        [0.6404, 0.0392]])
tensor([[0.5197, 0.0784, 0.5197, 0.0784, 0.5197, 0.0784],
        [0.1234, 0.7435, 0.1234, 0.7435, 0.1234, 0.7435],
        [0.6404, 0.0392, 0.6404, 0.0392, 0.6404, 0.0392]])

连接numpy与tensor

numpy是每一个接触AI的人都会接触到的库,所以numpy与tensor的转换应该也很常用。

tensor到numpy数组

输入:

t=torch.ones(5)
print(t)
# 核心代码只有这一个:
n=t.numpy()
print(n)

输出:

tensor([1., 1., 1., 1., 1.])
[1. 1. 1. 1. 1.]
numpy数组到tensor

可以直接用torch.from_numpy

输入:

n=np.ones(5)
t=torch.from_numpy(n)
print(n)
n+=2
print(n)
print(t)

输出:

[1. 1. 1. 1. 1.]
[3. 3. 3. 3. 3.]
tensor([3., 3., 3., 3., 3.], dtype=torch.float64)

需要注意的是,即使已经把numpy转到tensor了,numpy数组有变化,tensor也会跟着变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值