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

当涉及到深度学习框架时,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实现图像识别之数字识别(附详细注释)

    以下是使用PyTorch实现数字识别的完整攻略,包括两个示例说明。 1. 实现简单的数字识别 以下是使用PyTorch实现简单的数字识别的步骤: 导入必要的库 python import torch import torch.nn as nn import torchvision import torchvision.transforms as transf…

    PyTorch 2023年5月15日
    00
  • Pytorch离线安装方法

    由于一些内网环境无法使用pip命令安装python三方库,寻求一种能够离线安装pytorch的方法。 方法 由于是内网,首选使用Anaconda代替Python,这样无需手动配置numpy等额外依赖。 访问pytorch离线下载网址根据系统和CUDA版本选择自己需要的whl文件 一共有两个,pytorch和torchvision,例如win10x64下cud…

    PyTorch 2023年4月8日
    00
  • Python中if __name__ == ‘__main__’作用解析

    在Python中,if __name__ == ‘__main__’是一个常见的代码块,它通常用于判断当前模块是否是主程序入口。在本文中,我们将详细讲解if __name__ == ‘__main__’的作用和用法,并提供两个示例说明。 if __name__ == ‘__main__’的作用 在Python中,每个模块都有一个内置的变量__name__,它…

    PyTorch 2023年5月15日
    00
  • python使用torch随机初始化参数

    在深度学习中,随机初始化参数是非常重要的。本文提供一个完整的攻略,以帮助您了解如何在Python中使用PyTorch随机初始化参数。 方法1:使用torch.nn.init 在PyTorch中,您可以使用torch.nn.init模块来随机初始化参数。torch.nn.init模块提供了多种初始化方法,包括常见的Xavier初始化和Kaiming初始化。您可…

    PyTorch 2023年5月15日
    00
  • 超简单!pytorch入门教程(五):训练和测试CNN

    我们按照超简单!pytorch入门教程(四):准备图片数据集准备好了图片数据以后,就来训练一下识别这10类图片的cnn神经网络吧。 按照超简单!pytorch入门教程(三):构造一个小型CNN构建好一个神经网络,唯一不同的地方就是我们这次训练的是彩色图片,所以第一层卷积层的输入应为3个channel。修改完毕如下: 我们准备了训练集和测试集,并构造了一个CN…

    PyTorch 2023年4月6日
    00
  • 关于PyTorch 自动求导机制详解

    关于PyTorch自动求导机制详解 在PyTorch中,自动求导机制是深度学习中非常重要的一部分。它允许我们自动计算梯度,从而使我们能够更轻松地训练神经网络。在本文中,我们将详细介绍PyTorch的自动求导机制,并提供两个示例说明。 示例1:使用PyTorch自动求导机制计算梯度 以下是一个使用PyTorch自动求导机制计算梯度的示例代码: import t…

    PyTorch 2023年5月16日
    00
  • Pytorch半精度浮点型网络训练问题

    用Pytorch1.0进行半精度浮点型网络训练需要注意下问题: 1、网络要在GPU上跑,模型和输入样本数据都要cuda().half() 2、模型参数转换为half型,不必索引到每层,直接model.cuda().half()即可 3、对于半精度模型,优化算法,Adam我在使用过程中,在某些参数的梯度为0的时候,更新权重后,梯度为零的权重变成了NAN,这非常…

    PyTorch 2023年4月8日
    00
  • Ubuntu新建用户以及安装pytorch

    环境:Ubuntu18,Python3.6 首先登录服务器 ssh username@xx.xx.xx.xxx #登录一个已有的username 新建用户 sudo adduser username sudo usermod -aG sudo username 然后退出 exit 重新登录 ssh username@xx.xx.xx.xxx #这里是新创建的…

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