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

Pytorch与深度学习 #10.PyTorch训练好的模型如何部署到Tensorflow环境中

1. Tensorflow vs Pytorch

在这个AI时代,各大厂商都在主推自家的AI框架,因此知名和不知名的大大小小可能十来种。但是我们选型的时候,一般首先考虑是Google家的Tensorflow呢还是Meta家的Pytorch。

在选择 PyTorch 或 TensorFlow 进行工业级开发时,以下是一些考虑因素:

1.1. PyTorch

  1. 易用性和灵活性

    • PyTorch 的动态计算图使其更易于调试和开发。代码风格类似于 Python,因此对开发者友好。
    • 适合研究和快速原型开发。
  2. 社区和支持

    • PyTorch 拥有活跃的社区和大量的开源项目支持。Facebook 主要推动其发展。
    • 在学术界和研究领域非常受欢迎。
  3. 性能

    • PyTorch 具有优秀的性能,特别是在 GPU 上进行训练和推理。
    • 支持分布式训练。

1.2. TensorFlow

  1. 生产环境和部署

    • TensorFlow 在工业级生产环境中的部署工具更为完善。其 TensorFlow Serving、TensorFlow Lite 和 TensorFlow.js 提供了多种部署选项,涵盖服务器、移动设备和网页。
    • TensorFlow Extended (TFX) 提供了一套完整的生产级机器学习流水线工具。
  2. 社区和支持

    • 由 Google 维护,拥有强大的技术支持和丰富的资源。
    • 拥有广泛的企业使用案例和成功部署经验。
  3. 兼容性和扩展性

    • TensorFlow 2.0 之后引入了更易用的 API,改善了用户体验,同时保留了强大的功能和灵活性。
    • 支持多种编程语言,包括 Python、C++ 和 JavaScript。

1.3. 简单的说

  • PyTorch:适合需要灵活性、易用性以及快速开发原型的项目,特别是在研究和开发阶段。
  • TensorFlow:适合需要稳定性、成熟的生产环境支持和多种部署选项的工业级项目。

如果你的项目需要快速迭代和实验,可以选择 PyTorch。如果你更关注部署和生产环境的稳定性,TensorFlow 可能是更好的选择。

1.4. 但是…

但是,孩子才做选择,成年人都是

在这里插入图片描述

但是,我们不禁又遇到一个问题,怎么即享受Pytorch带来的便利的同时,还能拥有Tensorflow的广泛性。所以这篇文章就是告诉你该怎么做的一个指南。

2. 将Pytorch模型转换成Tensorflow的模型

步骤 1:使用 PyTorch 训练和保存模型

假设我们使用 PyTorch 训练了一个简单的模型,并将其保存为 .pt 文件。

import torch
import torch.nn as nn# 定义一个简单的模型
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = torch.relu(self.fc1(x))x = self.fc2(x)return x# 实例化模型并训练(假设训练代码已完成)
model = SimpleModel()# 保存 PyTorch 模型
torch.save(model.state_dict(), 'simple_model.pth')

步骤 2:将 PyTorch 模型转换为 ONNX 格式

ONNX(Open Neural Network Exchange)是一种开放的中间格式,支持从 PyTorch 导出并在 TensorFlow 中导入。

import torch.onnx# 定义输入张量的大小(例如,MNIST 数据集的输入是 1x28x28)
dummy_input = torch.randn(1, 28 * 28)# 加载模型并导出为 ONNX 格式
model.load_state_dict(torch.load('simple_model.pth'))
model.eval()
torch.onnx.export(model, dummy_input, 'simple_model.onnx', input_names=['input'], output_names=['output'])

步骤 3:将 ONNX 模型转换为 TensorFlow SavedModel 格式

可以使用 onnx-tf 工具将 ONNX 模型转换为 TensorFlow SavedModel 格式。

  1. 安装 onnx-tf

    pip install onnx-tf
    
  2. 使用 onnx-tf 进行转换:

    onnx-tf convert -i simple_model.onnx -o simple_model_saved_model
    

步骤 4:将 TensorFlow SavedModel 转换为 TensorFlow Lite 格式

有了 TensorFlow SavedModel 后,我们可以使用 TensorFlow Lite 转换器将其转换为 .tflite 文件。

import tensorflow as tf# 加载 SavedModel
converter = tf.lite.TFLiteConverter.from_saved_model('simple_model_saved_model')# 可选:进行量化来优化模型大小和速度(例如动态范围量化)
converter.optimizations = [tf.lite.Optimize.DEFAULT]# 转换模型为 TFLite 格式
tflite_model = converter.convert()# 保存 TFLite 模型
with open('simple_model.tflite', 'wb') as f:f.write(tflite_model)

步骤 5:将 TensorFlow Lite 模型部署到目标设备上并运行推理

.tflite 文件复制到目标设备(例如树莓派)上,并使用 TensorFlow Lite 的解释器运行推理。

在树莓派或其他设备上,可以使用 Python 代码加载和运行 TensorFlow Lite 模型:

import numpy as np
import tensorflow as tf# 加载 TFLite 模型
interpreter = tf.lite.Interpreter(model_path='simple_model.tflite')
interpreter.allocate_tensors()# 获取输入和输出张量的信息
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()# 创建一个模拟的输入数据(例如手写数字图像)
input_data = np.random.rand(1, 28 * 28).astype(np.float32)# 填充输入数据
interpreter.set_tensor(input_details[0]['index'], input_data)# 执行推理
interpreter.invoke()# 获取输出结果
output_data = interpreter.get_tensor(output_details[0]['index'])
print("Predicted output:", output_data)

3. 如何在树莓派上运行 Tensorflow Lite 模型

在树莓派上运行 TensorFlow Lite (TFLite) 文件,你需要安装 TensorFlow Lite 运行时。这是一个轻量级的版本,专门为边缘设备优化,适合树莓派等资源受限的环境。以下是如何在树莓派上安装 TensorFlow Lite 运行时的步骤:

3.1. 安装 TensorFlow Lite 运行时

TensorFlow Lite 提供了专门为树莓派编译的二进制文件,可以直接通过 pip 安装。你需要确保树莓派上已经安装了 Python 3(建议使用 Python 3.7 或更高版本)。

  1. 更新系统包:

    sudo apt-get update
    sudo apt-get upgrade
    
  2. 安装 TensorFlow Lite 运行时:

    pip3 install tflite-runtime
    

    这将安装 TensorFlow Lite 运行时的轻量级版本,它只包含运行 TFLite 模型所需的必要组件。

3.2. 测试安装

安装完成后,你可以测试一下是否成功安装了 TensorFlow Lite 运行时。

import tflite_runtime.interpreter as tflite
print("TensorFlow Lite Runtime version:", tflite.__version__)

如果没有报错并打印出版本信息,就说明安装成功。

3.3. 运行 TFLite 模型

下面是一个在树莓派上运行 TFLite 模型的示例代码:

import numpy as np
import tflite_runtime.interpreter as tflite# 加载 TFLite 模型
interpreter = tflite.Interpreter(model_path="your_model.tflite")
interpreter.allocate_tensors()# 获取输入和输出张量的信息
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()# 创建一个模拟输入数据(例如 1x28x28 的 MNIST 图像)
input_shape = input_details[0]['shape']
input_data = np.random.rand(*input_shape).astype(np.float32)# 填充输入数据
interpreter.set_tensor(input_details[0]['index'], input_data)# 执行推理
interpreter.invoke()# 获取输出结果
output_data = interpreter.get_tensor(output_details[0]['index'])
print("Predicted output:", output_data)

http://www.mrgr.cn/news/58222.html

相关文章:

  • Linux等保测评需要用到的命令
  • 【操作系统】零碎知识点(易忘 / 易错)总结回顾
  • C语言 | Leetcode C语言题解之第507题完美数
  • AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件
  • 边缘计算技术的优势与挑战
  • 使用 Git 命令将本地项目上传到 GitLab
  • 如何进行大数据治理
  • APEX高性能双曲面减速器K系列有哪些优势特点
  • 树的概念与结构
  • 如何运用信而泰测试仪实现802.1 QAV协议测试
  • mybatis 多参数查询语句,报错:Available parameters are [arg1, arg0, param1, param2]
  • 【Linux 从基础到进阶】实时性能监控与调优(Prometheus、Grafana)
  • 数组类型应用举例
  • 案例分析-数据库系统
  • 基于Java(SSM框架)+MySQL开发的小型英语学习网站
  • 纷享销客生态大会成都站成功举办:携手精英伙伴,共话CRM新纪元
  • 以翻译 Kubernetes 文档为例,探索 AI 模型 Fine-Tuning 微调
  • 为什么有些编程语言不建议用下划线作为标识符开头?标识符的特殊字符。为什么不指定编译生成文件名, 默认是a.out?函数入口一定是main吗?
  • 创新业态下金融头部机构在 FICC 平台建设上的思考与实践
  • 人工智能技术的应用前景及对生活和工作方式的影响
  • 晨辉考试抽签软件的两种注册方法之二:在线注册
  • WebView渲染异常导致闪退解决方案
  • 开放式耳机推荐千元左右有哪些?开放式耳机推荐品牌
  • 迅为3A6000_7A2000核心主板龙芯全国产处理器龙芯3A5000等龙架构处理器软件兼容
  • 绝绝子工具
  • Java每日面试题(前端Vue拓展)(day20)