跟着AI学AI_09 PyTorch 简介

news2024/10/6 21:10:38

在这里插入图片描述

PyTorch 简介

PyTorch 是一个开源的深度学习框架,由 Facebook 的人工智能研究团队(FAIR)开发。它提供了灵活且高效的张量计算功能,并支持动态计算图。PyTorch 的易用性和灵活性使其成为深度学习研究和生产应用中广泛使用的工具。

主要特点
  1. 动态计算图

    • PyTorch 使用动态计算图(Dynamic Computation Graph),也称为定义即运行(Define-by-Run)模式。这种方式允许在模型运行时改变计算图结构,提供了很大的灵活性,尤其适用于调试和开发复杂模型。
  2. 强大的张量计算

    • PyTorch 提供类似于 NumPy 的张量操作,但可以在 GPU 上高效运行,极大地提高了计算速度。
  3. 自动求导

    • PyTorch 内置的自动求导(Autograd)机制,可以自动计算张量的梯度,方便进行反向传播。
  4. 模块化和可扩展性

    • PyTorch 提供了丰富的模块和类库,如 torch.nntorch.optimtorch.utils.data 等,便于构建和训练神经网络模型。
  5. 社区和生态系统

    • PyTorch 拥有活跃的开发者社区和丰富的第三方库支持,如 torchvision(用于计算机视觉)、torchaudio(用于音频处理)等。
PyTorch 的基本概念和组件
  1. 张量(Tensor)

    • PyTorch 的核心数据结构是张量,与 NumPy 数组类似,但可以在 GPU 上进行计算。
    import torch
    
    # 创建一个张量
    x = torch.tensor([[1, 2], [3, 4]])
    print(x)
    
    # 在 GPU 上创建张量
    if torch.cuda.is_available():
        x = x.to('cuda')
        print(x)
    
  2. 自动求导(Autograd)

    • PyTorch 的自动求导引擎可以轻松实现反向传播。
    # 创建一个需要求导的张量
    x = torch.tensor(2.0, requires_grad=True)
    y = x**2 + 3*x + 5
    
    # 计算梯度
    y.backward()
    print(x.grad)  # 输出 dy/dx
    
  3. 神经网络模块(torch.nn)

    • PyTorch 提供了构建神经网络的基础模块。
    import torch.nn as nn
    
    # 定义一个简单的神经网络
    class SimpleNN(nn.Module):
        def __init__(self):
            super(SimpleNN, self).__init__()
            self.fc = nn.Linear(10, 1)
    
        def forward(self, x):
            return self.fc(x)
    
    model = SimpleNN()
    
  4. 优化器(torch.optim)

    • PyTorch 提供了多种优化算法,如 SGD、Adam 等。
    optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
    
    # 在训练循环中使用优化器
    for epoch in range(100):
        optimizer.zero_grad()  # 清零梯度
        output = model(input)  # 前向传播
        loss = loss_fn(output, target)  # 计算损失
        loss.backward()  # 反向传播
        optimizer.step()  # 更新参数
    
  5. 数据加载(torch.utils.data)

    • PyTorch 提供了灵活的数据加载和预处理工具。
    from torch.utils.data import DataLoader, Dataset
    
    class CustomDataset(Dataset):
        def __init__(self, data, labels):
            self.data = data
            self.labels = labels
    
        def __len__(self):
            return len(self.data)
    
        def __getitem__(self, idx):
            return self.data[idx], self.labels[idx]
    
    dataset = CustomDataset(data, labels)
    dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
    
示例代码

以下是一个简单的完整示例,包括数据准备、模型定义、训练和评估:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# 生成一些随机数据
x_data = torch.randn(100, 10)
y_data = torch.randn(100, 1)

# 创建数据集和数据加载器
dataset = TensorDataset(x_data, y_data)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

# 定义一个简单的神经网络
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc = nn.Linear(10, 1)

    def forward(self, x):
        return self.fc(x)

model = SimpleNN()

# 定义损失函数和优化器
loss_fn = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练模型
for epoch in range(100):
    for x_batch, y_batch in dataloader:
        optimizer.zero_grad()
        output = model(x_batch)
        loss = loss_fn(output, y_batch)
        loss.backward()
        optimizer.step()

# 评估模型
with torch.no_grad():
    output = model(x_data)
    loss = loss_fn(output, y_data)
    print(f'Final loss: {loss.item()}')

总结

PyTorch 是一个强大且灵活的深度学习框架,特别适合研究和快速原型设计。它的动态计算图、自动求导和丰富的工具库使其成为深度学习领域的重要工具。通过学习和使用 PyTorch,你可以更高效地构建、训练和部署复杂的深度学习模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1815793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell条件测试和if语句

“C:\Users\Jessica\Desktop\6.12.assets\image-20240612094159578.png”# shell条件测试和if语句 一、条件测试 1、$? 返回码 判断命令或者脚本是否执行成功(最近的一条) 0 true 为真就是成功 成立 非0 false 失败或者异常 2、test命令 可以进行…

python实现高斯(Gauss)迭代自动计算

实现高斯(Gauss)迭代自动计算 输入系数矩阵mx、值矩阵mr、迭代次数n,即可得到答案。本人在原博主的代码基础上优化了数据输出形式,原文链接:python实现高斯(Gauss)迭代法_python中gausspp-CSDN博客 运算结果如下图&am…

小程序必看:https证书强制使用攻略

为了提升网络安全性和用户数据保护,自2017年1月1日起,微信小程序要求所有的网络请求必须通过HTTPS协议进行。这意味着小程序在与服务器进行数据交互时,必须使用HTTPS加密连接,以确保数据传输的安全性。这样做可以防止数据在传输过…

基于java的英文翻译字典

基于java的英文翻译字典,附有源代码,源数据库初始化文件 源码地址 dict_demo: 提取一段英文对话中的英文词汇,输出为英文单词字典形式 解析json字条 private void readFile(String pathname) {long start System.currentTimeMillis(); //…

金石传拓非遗技艺端午专场活动之精彩瞬间

6月10日端午节下午,由致公党润州区基层委二支部举办的“凝心铸魂强根基,端午追远贺盛世”金石传拓体验活动在镇江万达广场隆重举行。近30名党员及其家属参加了本次活动,活动由润州区二支部主委吴娉主持。 端午节,又称端阳节&#…

181.二叉树:验证二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

【机器学习】GANs网络在图像和视频技术中的应用前景

📝个人主页:哈__ 期待您的关注 目录 1. 🔥引言 背景介绍 研究意义 2. 🎈GANs的基本概念和工作原理 生成对抗网络简介 工作原理 3. 🤖GANs在图像生成中的应用 图像超分辨率 工作原理 图像去噪 工作原理 图…

【附带源码】机械臂MoveIt2极简教程(五)、第二个demo - rviz可视化

系列文章目录 【附带源码】机械臂MoveIt2极简教程(一)、moveit2安装 【附带源码】机械臂MoveIt2极简教程(二)、move_group交互 【附带源码】机械臂MoveIt2极简教程(三)、URDF/SRDF介绍 【附带源码】机械臂MoveIt2极简教程(四)、第一个入门demo 【附带源码】机械臂Move…

森林(fsc)认证的主要目的是什么?

森林认证(Forest Certification)的目的主要是为了确保森林的可持续经营,同时保护生态环境、生物多样性和社区权益。以下是森林认证的主要目的: 促进可持续森林管理: 森林认证鼓励采用可持续的森林管理方法&#xff0c…

(CVPR,2024)Adversarial Prompt Tuning:只需一个提示词就足以提升预训练视觉-语言模型的对抗性鲁棒性

文章目录 相关资料摘要引言对抗性鲁棒性的文本提示CLIP回顾 方法提示参数化提示优化 实验 相关资料 论文:[2403.01849] One Prompt Word is Enough to Boost Adversarial Robustness for Pre-trained Vision-Language Models (arxiv.org) 代码:TreeLLi…

私生子女是否拥有平等的继承权

私生子女,是否拥有平等的继承权?在当今社会,随着人们思想观念的不断开放和变化,家庭结构也日益多样化。其中,私生子女的存在成为了一个不可回避的话题。那么,私生子女是否应该享有与婚生子女同等的继承权呢…

解读surging 的内存过高的原因

前言 对于.NET开发人员来讲,一个程序占用内存过高,是极其糟糕,是一款不合格的程序软件,.NET开发人员也不会去使用服务器垃圾收集器(ServerGarbageCollection),而是选用工作站垃圾收集器,而是对于一款低内存的程序更能给…

【丝滑的LangChain】我用python问gpt认不认识小范大人,它告诉我认识个der~

前言 嗨,大家好!我是海鸽。 《庆余年2》刚刚完结,热度不减,我忍不住好奇:我们的AI伙伴GPT,是否也对剧中那位机智过人的小范大人有所耳闻? 最近我们尝试了LangChain的调用,体验了一…

单目标应用:基于人工原生动物优化器APO的微电网优化(MATLAB代码)

一、微电网模型介绍 微电网多目标优化调度模型简介_vmgpqv-CSDN博客 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、人工原生动物优化算法求解微电网 2.1算法简介 人工原生动物优化器&am…

NewStarCTF_RE(week1,2)

[NewStarCTF 2023 公开赛道]easy_RE ida 可能会把 一个数组或字符串拆开,可以通过计算地址,知道是一起的 也有的会藏在汇编窗口 Segments IDA的Segments窗口 :shiftf7 https://www.cnblogs.com/sch01ar/p/9477697.html ida 各种窗口也是需要…

C++ 10 之 引用

c10引用.cpp #include <iostream>using namespace std;int main() {// 引用的语法&#xff1a;类型 &别名 原名// int a 10;// int &b a; // 此时a,b指向同一块内存// cout << "a: " << a << endl;// cout << "b: &…

安装sqlserver2022 express

1、下载 SQL Server 下载 | Microsoft 双击sql2022-ssei-expr 2、安装 下载完成以后&#xff0c;将会出现以下对话框 &#xff1a; 点击【全新SQL Server独立安装或向现有安全添加功能】 下一步&#xff0c;下一步&#xff1a; 下一步&#xff1a; 下一步&#xff0c;这里我…

学习笔记——路由网络基础——路由优先级(preference)

1、路由优先级(preference) 路由优先级(preference)代表路由的优先程度。当路由器从多种不同的途径获知到达同一个目的网段的路由(这些路由的目的网络地址及网络掩码均相同)时&#xff0c;路由器会比较这些路由的优先级&#xff0c;优选优先级值最小的路由。 路由来源的优先…

【星海随笔】云解决方案学习日志篇(一) ELK,kibana,Logstash安装

心路历程 本来想最近再研究研究DPDK的。但是自己做一个东西很多时候没有回报。因为自己的低学历问题&#xff0c;类似工作的面试都没有。所以很多东西学了很快就忘了&#xff0c;没有地方可以用。 今天看到了一个大佬,除了发型外,很多想法还是很共鸣的。 Shay Banon 决定开始跟…

2024年6月11日 (周二) 叶子游戏新闻

万能嗅探: 实测 网页打开 某视频号、某音、某红薯、某站&#xff0c;可以做到无水印的视频和封面下载功能哦&#xff0c;具体玩法大家自行发挥吧。 WPS免登录一键修改器: 去除烦人的登录且能正常使用 日本一首部游戏《拼图世界》上架Steam 30年PS名作日本游戏厂商日本一的首部品…