使用 pytorch 运行预训练模型的框架

PyTorch 简介:

PyTorch 是一个 Python 程序库,我们可以使用 PyTorch 来构建深度学习项目。

PyTorch 的两个特点:

  1. PyTorch 的核心数据结构是张量,张量是一个多维数组,与 NumPy 数组有许多相似之处。
  2. PyTorch 提供了在专用硬件上执行加速数学操作的特性,这使得神经网络结构设计以及在单机或并行计算资源上训练它们变得很方便。

因此,我们可以将 PyTorch 描述为一个在 Python 中为科学计算提供优化支持的高性能库。

PyTorch 大部分是用 C++ 和 CUDA 编写的,CUDA 是一种来自英伟达的类 C++的语言,可以被编译并在 GPU 上以并行方式运行。

使用 pytorch 运行预训练模型的框架

复制代码
import torch
  1. 定义模型类 1.1 自定义模型类 1.2 从 torchvision 模块加载模型: from torchvision import models

  2. 实例化模型类

    resnet101 = models.resnet101()

  3. 给实例化的模型类加载预训练好的参数 3.1 实例化模型类和加载预训练好的权重同时进行(这种情况可以省略第 2 步)

    resnet101 = models.resnet101(pretrained=True) # pretrained=True 指示函数下载 resnet101 在 ImageNet数据集上训练好的权重

3.2 使用模型的 load_state_dict() 方法将预训练权重加载到 resnet101 中

复制代码
model_path = '......'
model_data = torch.load(model_path)
resnet101.load_state_dict(model_data)

3.3 使用 torch.hub 从 github 加载模型(这种情况可以省略第 1、2 步)

复制代码
from torch import hub
resnet101 = hub.load('pytorch/vision:main', 'resnet101', pretrained=True)  # 第一项是 GitHub 存储库的名称和分支,第二项是入口点函数的名称

以上代码将 pytorch/vision 主分支的快照及其权重默认下载到本地的 C:\Users\username.cache\torch\hub 目录下,然后运行 resnet101 入口点函数返回实例化的模型,参数 pretrained=true 会从 ImageNet 获得预训练权重,并加载到 resnet101 中。

  1. 使用 Python 图像操作模块 Pillow 从本地文件系统加载一幅图像

    from PIL import Image # PIL 指的是 pillow
    img = Image.open(".../xxx.jpg")

  2. 使用 TorchVision 模块提供的 transforms 定义一个对输入图像进行预处理的管道

    from torchvision import transforms
    preprocess = transforms.Compose([transforms.Resize(256), # 将输入图像缩放到 256× 256 个像素
    transforms.ToTensor(), # 转换为一个张量
    ])

  3. 使用预处理管道 preprocess 对图像 img 进行预处理

    img_t = preprocess(img)

  4. 给数据添加一个新的维度:批次维度

    batch_t = torch.unsqueeze(img_t, 0)

  5. 进行推理时,我们需要将神经网络置于 eval 模式

    resnet.eval()

  6. eval 模式设置好之后,进行推理

    out = resnet101(batch_t)
    out

......

本文由mdnice多平台发布

相关推荐
摇滚侠8 分钟前
《Spring Boot 3:高级与架构设计》第 1 章 元编程与元信息 个人理解 1
java·spring boot·笔记·后端
对象存储与RustFS11 分钟前
跨实现迁移 MinIO→RustFS:mc diff 静默返回才是最容易翻车的一步
后端·rust·开源
吃饱了得干活11 分钟前
Java 单点登录实战:一条主线看懂 Session 共享、CAS 与 OAuth2+JWT
java·后端
卷无止境34 分钟前
Jev来了,一个不会说话的AI模型正在改写自动化的规则
人工智能·后端
IT_陈寒40 分钟前
React的useEffect依赖项居然骗了我三年
前端·人工智能·后端
AINative软件工程1 小时前
LLM 应用的 Bulkhead 隔离工程实践:用舰壁模式防止一个功能的过载拖左整个 AI 系统
后端·llm·ai编程
szephyr1 小时前
消息队列入门:RabbitMQ 和 Kafka 到底怎么选,什么时候不该用
后端·架构·kafka·消息队列·rabbitmq
上进小菜猪9 小时前
把 KES 集群交给 Kubernetes 的九十天:一个 DBA 的试用实录
后端
两点王爷10 小时前
PostgreSQL 常用 SQL 语句与 GIS 相关函数详解
数据库·后端
考虑考虑10 小时前
Springboot环境变量占位符语法
spring boot·后端·spring