pytorch教程之Tensor的值及操作使用学习

yizhihongxing

当涉及到深度学习框架时,PyTorch是一个非常流行的选择。在PyTorch中,Tensor是一个非常重要的概念,它是一个多维数组,可以用于存储和操作数据。在本教程中,我们将学习如何使用PyTorch中的Tensor,包括如何创建、访问和操作Tensor。

创建Tensor

在PyTorch中,我们可以使用torch.Tensor()函数来创建一个Tensor。例如,我们可以使用以下代码创建一个2x3的Tensor:

import torch

x = torch.Tensor([[1, 2, 3], [4, 5, 6]])
print(x)

输出:

tensor([[1., 2., 3.],
        [4., 5., 6.]])

我们还可以使用其他函数来创建Tensor,例如:

  • torch.zeros():创建一个全为0的Tensor
  • torch.ones():创建一个全为1的Tensor
  • torch.rand():创建一个随机初始化的Tensor

例如,我们可以使用以下代码创建一个3x3的全为0的Tensor:

import torch

x = torch.zeros(3, 3)
print(x)

输出:

tensor([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]])

访问Tensor

我们可以使用索引来访问Tensor中的元素。例如,我们可以使用以下代码访问Tensor中的第一个元素:

import torch

x = torch.Tensor([[1, 2, 3], [4, 5, 6]])
print(x[0][0])

输出:

tensor(1.)

我们还可以使用切片来访问Tensor中的子集。例如,我们可以使用以下代码访问Tensor中的第一行:

import torch

x = torch.Tensor([[1, 2, 3], [4, 5, 6]])
print(x[0, :])

输出:

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

操作Tensor

在PyTorch中,我们可以使用各种函数来操作Tensor。例如,我们可以使用以下代码将两个Tensor相加:

import torch

x = torch.Tensor([[1, 2, 3], [4, 5, 6]])
y = torch.Tensor([[7, 8, 9], [10, 11, 12]])
z = x + y
print(z)

输出:

tensor([[ 8., 10., 12.],
        [14., 16., 18.]])

我们还可以使用其他函数来操作Tensor,例如:

  • torch.sum():计算Tensor中所有元素的和
  • torch.mean():计算Tensor中所有元素的平均值
  • torch.max():计算Tensor中所有元素的最大值
  • torch.min():计算Tensor中所有元素的最小值

例如,我们可以使用以下代码计算Tensor中所有元素的和:

import torch

x = torch.Tensor([[1, 2, 3], [4, 5, 6]])
print(torch.sum(x))

输出:

tensor(21.)

示例1:使用Tensor进行线性回归

在这个示例中,我们将使用Tensor来实现一个简单的线性回归模型。我们将使用以下公式来拟合一个线性函数:

y = 2x + 1

我们将使用随机生成的数据来训练模型,并使用梯度下降算法来更新模型参数。

import torch

# 生成随机数据
x = torch.randn(100, 1) * 10
y = x * 2 + 1 + torch.randn(100, 1)

# 定义模型
w = torch.randn(1, 1, requires_grad=True)
b = torch.randn(1, 1, requires_grad=True)

# 定义损失函数和优化器
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD([w, b], lr=0.01)

# 进行模型训练
for epoch in range(1000):
    # 前向传播
    y_pred = x.mm(w) + b

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

    # 反向传播
    loss.backward()

    # 更新模型参数
    optimizer.step()
    optimizer.zero_grad()

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

# 打印最终模型参数
print('w: {:.4f}, b: {:.4f}'.format(w.item(), b.item()))

在这个示例中,我们首先生成了100个随机数据点,并使用这些数据点来训练模型。然后,我们定义了一个包含一个权重和一个偏置的线性模型。我们使用均方误差损失函数和随机梯度下降优化器来训练模型。最后,我们打印了最终的模型参数。

示例2:使用Tensor进行卷积操作

在这个示例中,我们将使用Tensor来实现一个简单的卷积操作。我们将使用一个3x3的卷积核来对一个5x5的图像进行卷积操作。

import torch

# 定义输入图像和卷积核
x = torch.Tensor([[1, 2, 3, 4, 5],
                  [6, 7, 8, 9, 10],
                  [11, 12, 13, 14, 15],
                  [16, 17, 18, 19, 20],
                  [21, 22, 23, 24, 25]])
k = torch.Tensor([[1, 0, -1],
                  [2, 0, -2],
                  [1, 0, -1]])

# 定义卷积操作
def conv2d(x, k):
    h, w = k.size()
    y = torch.zeros(x.size()[0]-h+1, x.size()[1]-w+1)
    for i in range(y.size()[0]):
        for j in range(y.size()[1]):
            y[i][j] = torch.sum(x[i:i+h, j:j+w] * k)
    return y

# 进行卷积操作
y = conv2d(x, k)

# 打印卷积结果
print(y)

在这个示例中,我们首先定义了一个5x5的输入图像和一个3x3的卷积核。然后,我们定义了一个卷积操作函数,该函数使用循环来计算卷积结果。最后,我们使用输入图像和卷积核来进行卷积操作,并打印卷积结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch教程之Tensor的值及操作使用学习 - Python技术站

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

相关文章

  • Pytorch关于Dataset 的数据处理

    PyTorch关于Dataset的数据处理 在PyTorch中,Dataset是一个抽象类,用于表示数据集。它提供了一种统一的方式来处理数据,使得我们可以轻松地加载和处理数据。在本文中,我们将详细介绍如何使用PyTorch中的Dataset类来处理数据,并提供两个示例来说明其用法。 1. 创建自定义Dataset 要创建自定义Dataset,需要继承PyTo…

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

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

    2023年4月8日
    00
  • [pytorch]动态调整学习率

    问题描述 在深度学习的过程中,会需要有调节学习率的需求,一种方式是直接通过手动的方式进行调节,即每次都保存一个checkpoint,但这种方式的缺点是需要盯着训练过程,会很浪费时间。因此需要设定自动更新学习率的方法,让模型自适应地调整学习率。 解决思路 通过epoch来动态调整,比如每10次学习率为原来的0.1 实现示例: def adjust_learni…

    PyTorch 2023年4月8日
    00
  • pytorch实现vgg19 训练自定义分类图片

    1、vgg19模型——pytorch 版本= 1.1.0  实现  # coding:utf-8 import torch.nn as nn import torch class vgg19_Net(nn.Module): def __init__(self,in_img_rgb=3,in_img_size=64,out_class=1000,in_fc_s…

    2023年4月8日
    00
  • python保存图片的四个常用方法

    在Python中,保存图片是一个常见的操作。本文将介绍四种常用的保存图片的方法,并提供两个示例说明。 方法1:使用Pillow库 Pillow是Python中一个常用的图像处理库,可以使用它来保存图片。以下是使用Pillow库保存图片的示例代码: from PIL import Image # 打开图片 img = Image.open(‘image.jpg…

    PyTorch 2023年5月15日
    00
  • 深入浅析Pytorch中stack()方法

    stack()方法是PyTorch中的一个张量拼接方法,它可以将多个张量沿着新的维度进行拼接。本文将深入浅析stack()方法的使用方法和注意事项,并提供两个示例说明。 1. stack()方法的使用方法 stack()方法的使用方法如下: torch.stack(sequence, dim=0, out=None) 其中,sequence是一个张量序列,d…

    PyTorch 2023年5月15日
    00
  • Pytorch入门之VAE

    关于自编码器的原理见另一篇博客 : 编码器AE & VAE 这里谈谈对于变分自编码器(Variational auto-encoder)即VAE的实现。   1. 稀疏编码 首先介绍一下“稀疏编码”这一概念。        早期学者在黑白风景照片中可以提取到许多16*16像素的图像碎片。而这些图像碎片几乎都可由64种正交的边组合得到。而且组合出一张碎…

    2023年4月8日
    00
  • pytorch 模型的train模式与eval模式实例

    PyTorch模型的train模式与eval模式实例 在本文中,我们将介绍PyTorch模型的train模式和eval模式,并提供两个示例来说明如何在这两种模式下使用模型。 train模式 在train模式下,模型会计算梯度并更新权重。以下是在train模式下训练模型的示例: import torch import torch.nn as nn import…

    PyTorch 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部