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

海口网站运营托管费用做网站首页ps中得多大

海口网站运营托管费用,做网站首页ps中得多大,wordpress phpstudy,厦门微网站建设一、概述深度学习模型能够在各种生产场景中发挥重要的作用,而深度学习模型往往在Python环境下完成训练,因而训练好的模型如何在生产环境下实现稳定可靠的部署,便是一个重要内容。C开发平台广泛存在于各种复杂的生产环境,随着业务效…

一、概述

  深度学习模型能够在各种生产场景中发挥重要的作用,而深度学习模型往往在Python环境下完成训练,因而训练好的模型如何在生产环境下实现稳定可靠的部署,便是一个重要内容。C++开发平台广泛存在于各种复杂的生产环境,随着业务效能需求的不断提高,充分运用深度学习技术的优势显得尤为重要。本文介绍如何实现将深度学习模型部署在C++平台上。

二、步骤

  s1. Python环境中安装深度学习框架(如PyTorch、TensorFlow等);

  s2. P ython环境中设计并训练深度学习模型;

  s3. 将训练好的模型保存为.onnx格式的模型文件;

  s4. C++环境中安装Microsoft.ML.OnnxRuntime程序包;
(Visual Studio 2022中可通过项目->管理NuGet程序包完成快捷安装)

  s5. C++环境中加载模型文件,完成功能开发。

三、示例

  在Python环境下设计并训练一个关于手写数字识别的卷积神经网络(CNN)模型,将模型导出为ONNX格式的文件,然后在C++环境下完成对模型的部署和推理。

1. Python训练和导出

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.functional import F# 定义简单的CNN模型
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(1, 16, kernel_size=3, stride=1, padding=1)self.pool = nn.MaxPool2d(2, 2)self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1)self.fc1 = nn.Linear(32 * 7 * 7, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = self.pool(F.relu(self.conv1(x)))x = self.pool(F.relu(self.conv2(x)))x = x.view(-1, 32 * 7 * 7)x = F.relu(self.fc1(x))x = self.fc2(x)return x# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])# 加载训练数据
train_dataset = datasets.MNIST('data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)# 初始化模型、损失函数和优化器
model = SimpleCNN()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
def train(model, train_loader, criterion, optimizer, epochs=5):model.train()for epoch in range(epochs):running_loss = 0.0for batch_idx, (data, target) in enumerate(train_loader):optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()running_loss += loss.item()print(f'Epoch {epoch+1}, Loss: {running_loss/len(train_loader)}')# 训练模型
train(model, train_loader, criterion, optimizer)# 导出为ONNX格式
dummy_input = torch.randn(1, 1, 28, 28)
torch.onnx.export(model,dummy_input,"mnist_model.onnx",export_params=True,opset_version=11,do_constant_folding=True,input_names=['input'],output_names=['output'],dynamic_axes={'input': {0: 'batch_size'}, 'output': {0: 'batch_size'}}
)print("模型已成功导出为mnist_model.onnx")

在这里插入图片描述

2. C++ 部署和推理

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include <onnxruntime_cxx_api.h>int main() {// 初始化环境Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "MNIST");Ort::SessionOptions session_options;session_options.SetIntraOpNumThreads(1);session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL);// 加载模型std::wstring model_path = L"mnist_model.onnx";Ort::Session session(env, model_path.c_str(), session_options);// 准备输入std::vector<int64_t> input_shape = { 1, 1, 28, 28 };size_t input_tensor_size = 28 * 28;std::vector<float> input_tensor_values(input_tensor_size);// 读取测试图片cv::Mat test_image = cv::imread("test.jpg", cv::IMREAD_GRAYSCALE);         // 将Mat数据复制到vector中for (int i = 0; i < test_image.rows; ++i) {for (int j = 0; j < test_image.cols; ++j) {input_tensor_values[i * test_image.cols + j] = static_cast<float>(test_image.at<uchar>(i, j)); // 注意:uchar是unsigned char的缩写,表示无符号字符,通常用于存储灰度值}}// 创建输入张量auto memory_info = Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault);Ort::Value input_tensor = Ort::Value::CreateTensor<float>(memory_info, input_tensor_values.data(), input_tensor_size, input_shape.data(), 4);// 设置输入输出名称std::vector<const char*> input_names;std::vector<const char*> output_names;input_names.push_back(session.GetInputNameAllocated(0, Ort::AllocatorWithDefaultOptions()).get());output_names.push_back(session.GetOutputNameAllocated(0, Ort::AllocatorWithDefaultOptions()).get());// 运行推理auto output_tensors = session.Run(Ort::RunOptions{ nullptr },input_names.data(),&input_tensor,1,output_names.data(),1);// 获取输出结果float* output = output_tensors[0].GetTensorMutableData<float>();std::vector<float> results(output, output + 10);// 找到预测的数字int predicted_digit = 0;float max_probability = results[0];for (int i = 1; i < 10; i++) {if (results[i] > max_probability) {max_probability = results[i];predicted_digit = i;}}std::cout << "预测结果: " << predicted_digit << std::endl;std::cout << "置信度分布:" << std::endl;for (int i = 0; i < 10; i++) {std::cout << "数字 " << i << ": " << results[i] << std::endl;}return 0;
}

测试图片:
在这里插入图片描述

程序运行:
在这里插入图片描述



End.


文章转载自:

http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://00000000.csgwd.cn
http://www.dtcms.com/wzjs/618897.html

相关文章:

  • 电商网站开发技术与维护沃尔玛网上商城中国
  • 宁波网站开发公司怎么样适合大学生做的兼职网站
  • 网站开发公司会计新出的网络游戏排行榜
  • 空间购买网站南平建设集团有限公司网站
  • 关键词是什么百度关键词优化是什么意思
  • 做的好的国外网站营销网站建站企业
  • 长春网站建设团队云南网站开发建设
  • 为什么要建设医院网站用ps制作网页教程
  • 网站域名注册多少钱网站建设登录
  • 网站建设属于IT建设一个网站花多少钱
  • 如何让百度收录自己的网站一站式做网站企业
  • 网站目录权限设置如何做网站推广获客
  • 如何做网站软件阜城县网站建设报价
  • 网站建设谈判网站开发考什么证
  • 网站国际网络备案号网联科技网站建设
  • 响应式网站建设系统前端和后端哪个难
  • 潍坊信息网网站建设做体育赛事网站公司
  • 重庆网网站建设公司免费的个人简历模板 简约
  • 三好街做网站公司海南网站建设
  • 个人做动漫资源网站有哪些天津建设工程招标信息网官网
  • 百度信誉任何在网站展示网站后端开发流程
  • 网站备案免费的吗什么行业需要做网站和推广
  • 温州市永嘉上塘建设局网站什么是网络营销的综合性工具
  • 太原站扩建后的规模滕州网站建设哪家好
  • 响应网站建设东莞网络营销网络培训学校
  • 四川广汇建设有限公司网站涿鹿做网站wl17581
  • 建网站投放广告赚钱网站上传后
  • 怎么做网站加盟濮阳网警
  • 做餐饮公司网站友链购买
  • wap网站开发汕头澄海玩具厂