pytorch使用pytorch进行张量计算自动求导和神经网络构建(代码片段)

阿润菜菜 阿润菜菜     2023-03-23     419

关键词:


本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052


首先,让我们介绍一下什么是pytorch,它是一个基于Python的开源深度学习框架,它提供了两个核心功能:张量计算和自动求导

张量计算

张量计算是指使用多维数组(称为张量)来表示和处理数据,例如标量、向量、矩阵等。pytorch提供了一个torch.Tensor类来创建和操作张量,它支持各种数据类型和设备(CPU或GPU)。我们可以使用torch.tensor()函数来创建一个张量,并指定它的形状、数据类型和是否需要梯度。

例如,我们可以创建一个2x3的浮点型张量,并设置requires_grad=True,表示我们想要跟踪这个张量的所有操作:

import torch
x = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], requires_grad=True)
print(x)

输出结果为:

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

自动求导

自动求导是指利用pytorch的autograd模块来自动计算张量的梯度,即导数。梯度是一个表示函数变化率的向量,它在深度学习中非常重要,因为它可以用来优化模型的参数。当我们对一个张量执行某些操作时,例如加法、乘法、指数等,pytorch会记录这些操作,并构建一个计算图。当我们调用.backward()方法时,pytorch会根据链式法则从后往前遍历这个计算图,并计算每个节点的梯度。我们可以通过.grad属性来访问这些梯度。

例如,我们可以定义一个简单的函数y = x ** 2,并对x = [2, 3]求导:

import torch
x = torch.tensor([2.0, 3.0], requires_grad=True)
y = x ** 2
print(y)
y.backward()
print(x.grad)

输出结果为:

tensor([4., 9.], grad_fn=<PowBackward0>)
tensor([4., 6.])

神经网络的构建

神经网络构建是指使用pytorch提供的nn模块来定义和训练复杂的神经网络模型。nn模块包含了各种预定义的层、损失函数、优化器等组件,可以方便地组合成不同类型的神经网络。我们可以使用nn.Module类来定义自己的神经网络层或模型,并实现forward()方法来定义前向传播逻辑。backward()方法会由autograd自动实现。

例如,我们可以定义一个简单的线性回归模型,并用随机数据进行训练:

import torch
import torch.nn as nn

# 定义线性回归模型 y = wx + b
class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1) # 输入维度为1,输出维度为1

    def forward(self, x):
        y = self.linear(x) # 前向传播逻辑
        return y

# 创建模型实例
model = LinearRegression()
print(model)

# 创建损失函数(均方误差)和优化器(随机梯度下降)
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.

# 生成随机数据
x = torch.randn(100, 1) # 100个随机输入
y = 3 * x + 2 + torch.randn(100, 1) # 对应的输出,加上一些噪声

# 训练模型
epochs = 20 # 迭代次数
for epoch in range(epochs):
    # 前向传播,得到预测值
    y_pred = model(x)
    # 计算损失值
    loss = criterion(y_pred, y)
    # 反向传播,计算梯度
    loss.backward()
    # 更新参数
    optimizer.step()
    # 清零梯度
    optimizer.zero_grad()
    # 打印损失值和参数值
    print(f"Epoch epoch, loss: loss.item():.4f")
    for name, param in model.named_parameters():
        print(name, param.data)

# 测试模型
x_test = torch.tensor([[4.0]]) # 测试输入
y_test = model(x_test) # 预测输出
print(f"Predicted y for x = 4: y_test.item():.4f") 

输出结果为:

Epoch 0, loss: 9.9758
linear.weight tensor([[2.8277]])
linear.bias tensor([0.0145])
Epoch 1, loss: 4.0609
linear.weight tensor([[2.9056]])
linear.bias tensor([0.2308])
...
Epoch 19, loss: 0.9866
linear.weight tensor([[2.9877]])
linear.bias tensor([1.9679])
Predicted y for x = 4: 13.9166 

可以看到,经过训练,模型的参数接近真实值(w=3,b=2),并且能够对新的输入进行预测。

参考:) PyTorch官方网站

pytorch深度学习框架:优雅而简洁的代码实现(代码片段)

 PyTorch是由Facebook发布的深度学习框架,旨在为研究人员和工程师提供快速、灵活和简单的实验平台。与其他框架相比,PyTorch具有简洁的API和灵活的动态计算图,使得构建和训练深度神经网络变得更加优雅和简洁。本... 查看详情

实践·pytorch梯度计算

参考技术Apytorch梯度机制,计算梯度注意事项pytorch,autograd,tensor,自动微分,张量,梯度  在一些优化算法中,常常需要计算函数的梯度,在pytorch可以借助autograd机制来自动计算梯度值。  假设,关于的梯度记... 查看详情

使用 pyTorch 张量沿一个特定维度和 3 维张量进行索引

】使用pyTorch张量沿一个特定维度和3维张量进行索引【英文标题】:IndexingusingpyTorchtensorsalongonespecificdimensionwith3dimensionaltensor【发布时间】:2021-06-1017:47:46【问题描述】:我有2个张量:带有形状(批次、序列、词汇)的A和B的形... 查看详情

pytorch基本介绍

基本介绍PyTorch是一个基于Python的机器学习框架,由Facebook于2016年发布。它提供了一组灵活且高效的工具,可用于构建和训练各种深度学习模型。PyTorch介绍以下是PyTorch的一些基本特点和组件:张量(Tensor)ÿ... 查看详情

如何对两个 PyTorch 量化张量进行矩阵相乘?

】如何对两个PyTorch量化张量进行矩阵相乘?【英文标题】:HowcanImatrix-multiplytwoPyTorchquantizedTensors?【发布时间】:2020-06-0503:09:24【问题描述】:我是张量量化的新手,并尝试做一些简单的事情importtorchx=torch.rand(10,3)y=torch.rand(10,3)x@... 查看详情

pytorch,AttributeError:模块“火炬”没有属性“张量”

】pytorch,AttributeError:模块“火炬”没有属性“张量”【英文标题】:pytorch,AttributeError:module\'torch\'hasnoattribute\'Tensor\'【发布时间】:2018-04-2906:03:47【问题描述】:我在具有CentOSLinux7.3.1611(核心)操作系统的计算机上使用Python3.5... 查看详情

pytorch自动求解梯度(代码片段)

要理解Pytorch求解梯度,首先需要理解Pytorch当中的计算图的概念,在计算图当中每一个Variable都代表的一个节点,每一个节点就可以代表一个神经元,我们只有将变量放入节点当中才可以对节点当中的变量求解梯度,假设我们有... 查看详情

深度学习——基础(基于pytorch代码)(代码片段)

...数管理延后初始化自定义层读写文件GPU预备知识数据操作Pytorch中对数据(tensor张量)的操作类似于Numpy(ndarray),但由于深度学习大都是用GPU进行计算,而Numpy仅支持CPU计算,且Pytorch的张量类支持自动... 查看详情

理解 pytorch 中的雅可比张量梯度

】理解pytorch中的雅可比张量梯度【英文标题】:UnderstandingJacobiantensorgradientsinpytorch【发布时间】:2021-06-0815:33:40【问题描述】:我正在浏览officialpytorchtut,它解释了张量梯度和雅可比乘积如下:PyTorch允许您计算给定输入向量v=(v... 查看详情

pytorch安装教程(最全最详细版)(代码片段)

...08;一)CUDA概述(二)安装二、Anaconda安装三、Pytorch安装(一)GPU版本安装方法一方法二(二)CPU版本安装概述PyTorch是一个开源的深度学习框架,提供了各种张量操作并通过自动求导可以自动进行梯... 查看详情

当目标不是单热时,如何计算 Pytorch 中 2 个张量之间的正确交叉熵?

】当目标不是单热时,如何计算Pytorch中2个张量之间的正确交叉熵?【英文标题】:HowtocalculatecorrectCrossEntropybetween2tensorsinPytorchwhentargetisnotone-hot?【发布时间】:2021-10-0702:06:59【问题描述】:我对Pytorch中交叉熵的计算感到困惑。... 查看详情

pytorch从入门到精通100讲-pytorch张量从概念到应用(代码片段)

PyTorch张量的创建与基本类型0导读在我们不知道什么是深度学习计算框架时,我们可以把PyTorch看做是Python的第三方库,在PyTorch中定义了适用于深度学习的张量Tensor,以及张量的各类计算。就相当于NumPy中定义的Array和对应的科学... 查看详情

在 PyTorch 中使用 module.to() 移动成员张量

】在PyTorch中使用module.to()移动成员张量【英文标题】:Movingmembertensorswithmodule.to()inPyTorch【发布时间】:2019-07-0909:49:12【问题描述】:我正在PyTorch中构建变分自动编码器(VAE),但在编写与设备无关的代码时遇到问题。Autoencoder是nn.... 查看详情

1.pytorch是什么?(代码片段)

这篇博客将介绍PyTorch深度学习库,包括:PyTorch是什么如何安装PyTorch重要的PyTorch功能,包括张量和自动标记PyTorch如何支持GPU为什么PyTorch在研究人员中如此受欢迎PyTorch是否优于Keras/TensorFlow是否应该在项目中使用PyTorch... 查看详情

pytorch 可以优化顺序操作(如张量流图或 JAX 的 jit)吗?

】pytorch可以优化顺序操作(如张量流图或JAX的jit)吗?【英文标题】:Canpytorchoptimizesequentialoperations(likeatensorflowgraphorJAX\'sjit)?【发布时间】:2020-02-2400:55:57【问题描述】:原来tensorflow和pytorch有根本的区别:tensorflow基于计算图... 查看详情

如何在 pytorch 和 tensorflow 中使用张量核心?

】如何在pytorch和tensorflow中使用张量核心?【英文标题】:Howtousetensorcoresinpytorchandtensorflow?【发布时间】:2021-12-2823:30:01【问题描述】:我正在使用带有张量核心的NvidiaRTXGPU,我想确保pytorch/tensorflow正在使用它的张量核心。我在... 查看详情

pytorch框架学习—tensor(张量)详解(代码片段)

PyTorch框架学习—Tensor(张量)详解1Tensor的概念2Tensor与Variable3创建Tensor的方法3.1直接创建Tensor3.2根据数值创建Tensor3.3根据概率创建Tensor4完整代码1Tensor的概念  Tensor中文翻译为张量。张量的意思是一个多维数组,它... 查看详情

PyTorch 新手,使用 Data Loader 加载数据后无法进行预测

】PyTorch新手,使用DataLoader加载数据后无法进行预测【英文标题】:NewtoPyTorch,havingtroublemakingpredictionsoncedataisloadedusingDataLoader【发布时间】:2020-10-0107:42:26【问题描述】:我对PyTorch完全陌生(以前使用过张量流),但我被困在我... 查看详情