【Pytorch】使用pytorch进行张量计算、自动求导和神经网络构建

news/2025/4/2 15:27:49/

在这里插入图片描述
本文参加新星计划人工智能(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,输出维度为1def 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官方网站


http://www.ppmy.cn/news/34272.html

相关文章

网络安全之资产及攻击面管理

“摸清家底,认清风险”做好资产管理是安全运营的第一步。那么什么是资产,资产管理的难点痛点是什么,如何做好资产管理,认清风险。带着这些问题我们来认识一下资产及攻击面管理。 一、资产的定义 《GBT 20984-2007信息安全技术信息安全风险评估规范》中,对于资产的定义为…

主要介绍一下python的部署

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

收音机隐私政策

1. 适用范围 (a) 在您注册本应用帐号时&#xff0c;您根据本应用要求提供的个人注册信息&#xff1b; (b) 在您使用本应用网络服务&#xff0c;或访问本应用平台网页时&#xff0c;本应用自动接收并记录的您的浏览器和计算机上的信息&#xff0c;包括但不限于您的IP地址、浏览器…

三大升级!百度智能云加速文心一言产业化落地

随着文心一言等AI应用的爆火&#xff0c;支撑人工智能所需的算力需求也随之暴涨。为支持文心一言超大规模计算需求&#xff0c;进一步实现文心一言的产业化落地&#xff0c;去年年底开始&#xff0c;百度智能云已经通过三大动作全面升级云服务能力&#xff1a; 2022年12月&…

Redis内存满了怎么办,Redis导致系统内存爆满

一、修改配置文件 Redis长期使用&#xff0c;不设置过期时间&#xff0c;导致内存爆满&#xff0c;可以修改Redis的配置文件redis.conf 文件中&#xff0c;配置参数 maxmemory 的大小。一般的项目maxmemory设置为3~5G即可&#xff0c;也可以根据自己服务器内存大小进行配置。 …

树状数组(区间维护/单点修改)

1&#xff0c;定义 数组数组用于维护区间信息&#xff0c;简洁的几行的代码可以单点操作/区间查询&#xff0c;或者区间操作与单点查询。 虽然功能小于线段树&#xff0c;但是在相同功能的实现上&#xff0c;两者复杂度差不多。线段树 2&#xff0c;实现思路 树状数组有两个…

arcgis使用工具箱获取道路交叉点【新手】

【实现效果】 给定一张路网信息&#xff0c;将所有交叉点找到&#xff0c;每次选定两点之间的道路。 【实现步骤】 打开项目文件&#xff0c;如果是新的项目&#xff0c;还需要导入数据集。 在窗口中&#xff0c;打开目录。目录右上角设置自动隐藏&#xff0c;便于查看。 …

电脑锁屏快捷键是什么?如何快速进行电脑锁屏

案例&#xff1a;如何快速进行电脑锁屏&#xff1f; “想要短暂离开电脑时&#xff0c;不想直接关机或睡眠&#xff0c;但又担心别人看到自己电脑屏幕上的内容。听朋友说电脑有锁屏功能&#xff0c;有小伙伴知道电脑锁屏快捷键是什么吗&#xff1f;如何快速进行电脑锁屏&#…