当前位置: 首页 > news >正文

PyTorch初探:基本函数与案例实践

正文

        在熟悉了PyTorch的安装和环境配置后,接下来让我们深入了解PyTorch的基本函数,并通过一个简单的案例来实践这些知识。

1. 基本函数

        PyTorch的核心是张量(Tensor),它类似于多维数组,但可以在GPU上运行以加速计算。张量上的操作是构建神经网络层的基础。

 


    以下是PyTorch中一些常用的张量操作函数:

  • torch.tensor(): 创建一个新的张量。
  • torch.ones()torch.zeros(): 创建全1或全0的张量。
  • torch.randn(): 创建一个具有随机数的张量,这些随机数服从均值为0和标准差为1的正态分布(标准正态分布)。
  • torch.matmul(): 执行矩阵乘法。
  • torch.sum(): 计算张量中所有元素的和。


         此外,PyTorch还提供了自动求导机制,这是训练神经网络的关键。通过设置张量的requires_grad属性为True,PyTorch会跟踪对该张量执行的所有操作,以便后续计算梯度。

2. 案例实践:线性回归

        为了演示PyTorch的基本用法,我们将实现一个简单的线性回归模型。线性回归是一种预测模型,其中输出是输入的线性组合。

步骤如下:

  • 导入必要的库

import torch  
import torch.nn as nn  
import torch.optim as optim
  • 准备数据

这里我们使用简单的人工数据来演示。

# 输入数据  
x_data = torch.tensor([[1.0], [2.0], [3.0]])  
# 输出数据  
y_data = torch.tensor([[2.0], [4.0], [6.0]])
  • 定义模型

线性回归模型可以表示为y = wx + b,其中w是权重,b是偏置。

class LinearRegressionModel(nn.Module):  def __init__(self):  super(LinearRegressionModel, self).__init__()  self.linear = nn.Linear(1, 1)  # 输入和输出都是1维的  def forward(self, x):  y_pred = self.linear(x)  return y_pred  model = LinearRegressionModel()
  • 定义损失函数和优化器

criterion = nn.MSELoss()  # 均方误差损失  
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降
  • 训练模型

# 训练周期  
epochs = 100  for epoch in range(epochs):  # 前向传播  outputs = model(x_data)  loss = criterion(outputs, y_data)  # 反向传播和优化  optimizer.zero_grad()  loss.backward()  optimizer.step()  # 打印损失  if (epoch+1) % 10 == 0:  print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item()}')  # 测试模型  
with torch.no_grad():  prediction = model(torch.tensor([[4.0]]))  print(f'Prediction after training: {4.0} => {prediction.item()}')

  • 总结       

  • 在这个简单的案例中,我们展示了如何使用PyTorch构建、训练和测试一个基本的线性回归模型。通过这个过程,你应该对PyTorch的基本函数和工作流程有了更深刻的理解在实际应用中,你可能会处理更复杂的模型和数据集,但基本的原理和操作是相似的。 

相关文章:

  • HCIP之MPLS实验
  • TensorFlow2实战-系列教程4:数据增强:keras工具包/Data Augmentation
  • HTML — 区块元素
  • 嵌入式Linux系统下的智能家居能源管理系统的设计与实现
  • NIO-Selector详解
  • Java 基于SpringBoot+Vue的母婴商城系统,附源码,文档
  • React Hooks大全—useRef
  • Kafka-服务端-GroupCoordinator
  • 武忠祥2025高等数学,基础阶段的百度网盘+视频及PDF
  • 通讯录项目(终)
  • 学习了解 Vue3 的 nextTick() 方法
  • python使用activemq库ActiveMQClient类的连接activemq并订阅、发送和接收消息
  • Git 对文件名大小写不敏感的问题解决方案
  • opencv#33 边缘检测
  • 暴力破解
  • $translatePartialLoader加载失败及解决方式
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 0x05 Python数据分析,Anaconda八斩刀
  • Angular 4.x 动态创建组件
  • CSS 三角实现
  • HTTP--网络协议分层,http历史(二)
  • HTTP中GET与POST的区别 99%的错误认识
  • js递归,无限分级树形折叠菜单
  • mysql 5.6 原生Online DDL解析
  • ng6--错误信息小结(持续更新)
  • spring security oauth2 password授权模式
  • SpriteKit 技巧之添加背景图片
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Web标准制定过程
  • 编写符合Python风格的对象
  • 初识 beanstalkd
  • 从tcpdump抓包看TCP/IP协议
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 番外篇1:在Windows环境下安装JDK
  • 飞驰在Mesos的涡轮引擎上
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端技术周刊 2019-02-11 Serverless
  • 数组的操作
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #Lua:Lua调用C++生成的DLL库
  • #每天一道面试题# 什么是MySQL的回表查询
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (poj1.2.1)1970(筛选法模拟)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)正点原子I.MX6ULL u-boot移植
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100