pytorch使用-tensor的基本操作解读

yizhihongxing

在PyTorch中,tensor是深度学习任务中的基本数据类型。tensor可以看作是一个多维数组,可以进行各种数学运算和操作。本文将介绍tensor的基本操作,包括创建tensor、索引和切片、数学运算和转换等,并提供两个示例。

创建tensor

在PyTorch中,我们可以使用torch.tensor()函数来创建tensor。示例代码如下:

import torch

# 创建一个1维的tensor
x = torch.tensor([1, 2, 3, 4, 5])
print(x)

# 创建一个2维的tensor
y = torch.tensor([[1, 2, 3], [4, 5, 6]])
print(y)

# 创建一个3维的tensor
z = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(z)

在上述代码中,我们分别创建了一个1维、2维和3维的tensor。可以看到,tensor的维度由传入的数据的维度决定。

索引和切片

在PyTorch中,我们可以使用索引和切片来访问tensor中的元素。示例代码如下:

import torch

# 创建一个2维的tensor
x = torch.tensor([[1, 2, 3], [4, 5, 6]])

# 访问第一个元素
print(x[0, 0])

# 访问第一行
print(x[0, :])

# 访问第一列
print(x[:, 0])

# 访问第一行第二列和第二行第三列
print(x[[0, 1], [1, 2]])

# 切片操作
print(x[:, 1:])

在上述代码中,我们使用索引和切片来访问tensor中的元素。可以看到,索引和切片操作与Python中的列表和数组操作类似。

数学运算

在PyTorch中,我们可以对tensor进行各种数学运算。示例代码如下:

import torch

# 创建两个2维的tensor
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
y = torch.tensor([[7, 8, 9], [10, 11, 12]])

# 加法运算
print(x + y)

# 减法运算
print(x - y)

# 乘法运算
print(x * y)

# 矩阵乘法运算
print(torch.matmul(x, y.T))

# 平均值运算
print(torch.mean(x))

# 标准差运算
print(torch.std(x))

在上述代码中,我们对两个tensor进行了加法、减法、乘法、矩阵乘法、平均值和标准差等运算。可以看到,PyTorch提供了丰富的数学运算函数,可以方便地进行各种数学运算。

转换操作

在PyTorch中,我们可以使用tensor的转换函数来进行类型转换、形状转换和维度转换等操作。示例代码如下:

import torch

# 创建一个2维的tensor
x = torch.tensor([[1, 2, 3], [4, 5, 6]])

# 类型转换
x = x.float()
print(x.dtype)

# 形状转换
x = x.view(3, 2)
print(x.shape)

# 维度转换
x = x.unsqueeze(0)
print(x.shape)

# 维度转换
x = x.squeeze(0)
print(x.shape)

在上述代码中,我们对tensor进行了类型转换、形状转换和维度转换等操作。可以看到,PyTorch提供了丰富的转换函数,可以方便地进行各种转换操作。

示例一:使用tensor实现线性回归

我们可以使用tensor来实现线性回归。示例代码如下:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt

# 创建数据集
x = np.random.rand(100, 1)
y = 2 * x + 1 + np.random.randn(100, 1) * 0.1

# 转换为tensor
x = torch.from_numpy(x).float()
y = torch.from_numpy(y).float()

# 定义模型
model = nn.Linear(1, 1)

# 定义损失函数
criterion = nn.MSELoss()

# 定义优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(1000):
    # 前向传播
    y_pred = model(x)

    # 计算损失
    loss = criterion(y_pred, y)

    # 反向传播
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    # 打印损失
    if epoch % 100 == 0:
        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, 1000, loss.item()))

# 绘制结果
plt.scatter(x.numpy(), y.numpy())
plt.plot(x.numpy(), y_pred.detach().numpy(), 'r')
plt.show()

在上述代码中,我们使用tensor来实现线性回归。首先,我们创建了一个数据集,并将其转换为tensor。然后,我们定义了一个线性回归模型、一个均方误差损失函数和一个随机梯度下降优化器。最后,我们训练模型并绘制结果。

示例二:使用tensor实现卷积神经网络

我们可以使用tensor来实现卷积神经网络。示例代码如下:

import torch
import torch.nn as nn
import torch.nn.functional as F

# 定义卷积神经网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# 创建一个随机输入
x = torch.randn(1, 3, 32, 32)

# 创建一个卷积神经网络
net = Net()

# 前向传播
y = net(x)

# 打印输出
print(y)

在上述代码中,我们使用tensor来实现卷积神经网络。首先,我们定义了一个卷积神经网络模型。然后,我们创建了一个随机输入,并将其输入到卷积神经网络中进行前向传播。最后,我们打印输出结果。

总结

本文介绍了tensor的基本操作,包括创建tensor、索引和切片、数学运算和转换等。tensor是PyTorch中的基本数据类型,可以方便地进行各种数学运算和操作。使用tensor可以方便地实现各种深度学习任务,如线性回归和卷积神经网络等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch使用-tensor的基本操作解读 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 了解Pytorch|Get Started with PyTorch

    一个开源的机器学习框架,加速了从研究原型到生产部署的路径。!pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple import torch import numpy as np Basics 就像Tensorflow一样,我们也将继续在PyTorch中玩转Tensors。 从数据(列表)中…

    2023年4月8日
    00
  • PyTorch Dataset与DataLoader使用超详细讲解

    在PyTorch中,Dataset和DataLoader是两个非常重要的类,它们可以帮助我们有效地加载和处理数据。在本文中,我们将详细介绍如何使用Dataset和DataLoader来加载和处理数据。 Dataset Dataset是一个抽象类,它定义了如何加载和处理数据。我们可以通过继承Dataset类来创建自己的数据集。下面是一个示例代码: import…

    PyTorch 2023年5月15日
    00
  • pytorch分类模型绘制混淆矩阵以及可视化详解

    以下是关于“pytorch分类模型绘制混淆矩阵以及可视化详解”的完整攻略,其中包含两个示例说明。 示例1:绘制混淆矩阵 步骤1:导入必要的库 在绘制混淆矩阵之前,我们需要导入一些必要的库,包括numpy、matplotlib和sklearn。 import numpy as np import matplotlib.pyplot as plt from sk…

    PyTorch 2023年5月16日
    00
  • PyTorch余弦学习率衰减

    今天用到了PyTorch里的CosineAnnealingLR,也就是用余弦函数进行学习率的衰减。 下面讲讲定义CosineAnnealingLR这个类的对象时输入的几个参数是什么,代码示例就不放了。 正文 torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last…

    2023年4月8日
    00
  • pytorch: tensor类型的构建与相互转换实例

    在PyTorch中,tensor是最基本的数据类型,它可以表示任意维度的数组。本文将介绍如何构建tensor类型的数据,并演示如何进行tensor类型之间的相互转换。 构建tensor类型的数据 我们可以使用torch.Tensor()函数来构建tensor类型的数据。下面是一个示例代码: import torch # 构建一个形状为(2, 3)的tenso…

    PyTorch 2023年5月15日
    00
  • PyTorch入门基础

    什么是 PyTorch ? PyTorch是一个python库,它主要提供了两个高级功能: GPU加速的张量计算 构建在反向自动求导系统上的深度神经网络 1. 定义数据 一般定义数据使用torch.Tensor ,可以定义多种类型, tensor的意思是张量,是数字各种形式的总称 import torch # 可以是一个数 x = torch.tensor(…

    2023年4月8日
    00
  • wgan pytorch,pyvision, py-faster-rcnn等的安装使用

    因为最近在读gan的相关工作,wgan的工作不得不赞。于是直接去跑了一下wgan的代码。 原作者的wgan是在lsun上测试的,而且是基于pytorch和pyvision的,于是要装,但是由于我们一直用的是python 2.7,所以无法从WGAN的页面上跳到pytorch的官方页面下载安装,需要安装github上的版本,这个是不需要python3.5的。重新…

    PyTorch 2023年4月8日
    00
  • 姿态估计openpose_pytorch_code浅析(待补充)

    接上文,经过了openpose的原理简单的解析,这一节我们主要进行code的解析。 CODE解析我们主要参考的代码是https://github.com/tensorboy/pytorch_Realtime_Multi-Person_Pose_Estimation,代码写的很好,我们主要看的是demo/picture_demo.py首先我们看下效果,作图表示…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部