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

深度学习-Python调用ONNX模型

目录

ONNX模型使用流程

获取ONNX模型方法

使用ONNX模型

手动编写ONNX模型

Python调用ONNX模型

常见错误

错误raise ValueError...:

错误:Load model model.onnx failed

错误:'CUDAExecutionProvider' is not in available provider

错误:ONNXRuntimeError

错误:'CUDAExecutionProvider' is not in available provider


ONNX模型使用流程

ONNX(Open Neural Network Exchange)是一种开放的、跨平台的深度学习模型格式和编译器,可以帮助用户在不同的深度学习框架中转换和部署模型。下面介绍ONNX如何使用的流程:

  1. 导出模型:在训练好深度学习模型后,通过ONNX的支持的框架,比如PyTorch、TensorFlow等将模型导出为ONNX格式。

  2. 加载模型:使用ONNX的支持库,比如ONNX Runtime,加载ONNX文件格式的模型。

  3. 部署模型:通过ONNX Runtime在不同的硬件设备上运行模型,支持常见的CPU、GPU、FPGA等。

  4. 进行推理:将输入数据加载到模型中,进行推理或分类任务,输出结果。

ONNX还有其他的特点,比如具有可扩展性、良好的跨平台支持、对多种硬件设备的支持等。因此,ONNX是一种强大的深度学习模型转换和部署工具,可以大大加速深度学习模型的开发和部署过程。

获取ONNX模型方法

获取ONNX模型有以下几种方法:

        1. 使用ONNX标准工具导出已有的深度学习模型

许多深度学习框架都支持直接导出ONNX格式的模型,如PyTorch、TensorFlow、Keras等。可参考相应框架的文档,使用ONNX标准工具将模型导出为ONNX格式。

        2. 使用第三方工具转换

也可以使用一些第三方工具将已有的模型进行转换,例如mmcv中的convert_to_onnx.py工具。

        3. 手动编写ONNX模型

如果没有原始模型或无法导出,则需要手动编写ONNX模型。ONNX模型由计算图和模型参数组成。计算图用于定义模型结构和计算流程,可以使用ONNX工具或第三方工具进行编写,也可以手动编写。模型参数用于定义模型权重,可以使用Python脚本或其他工具进行生成或导入。

总之,获取ONNX模型的方法取决于具体情况,不同场景下合适的方法也会有所不同。

使用ONNX模型

手动编写ONNX模型

手动编写ONNX模型需要了解ONNX模型的结构和语法,以及具体深度学习框架的计算图结构和权重参数格式。

以下是一个手动编写的简单ONNX模型例子,用于对一维张量进行线性变换和ReLU激活:

import onnx
import numpy as np
from onnx import numpy_helper
from onnx import helper# 定义输入张量
input_tensor = helper.make_tensor_value_info('input', onnx.TensorProto.FLOAT, [1, 10])# 定义权重张量
weight = np.random.rand(10, 5).astype(np.float32)
weight_initializer = numpy_helper.from_array(weight, 'weight')# 定义偏置张量
bias = np.random.rand(5).astype(np.float32)
bias_initializer = numpy_helper.from_array(bias, 'bias')# 定义节点1:矩阵乘法
matmul_node = helper.make_node('MatMul',inputs=['input', 'weight'],outputs=['matmul_output']
)# 定义节点2:加法
add_node = helper.make_node('Add',inputs=['matmul_output', 'bias'],outputs=['add_output']
)# 定义节点3:ReLU激活
relu_node = helper.make_node('Relu',inputs=['add_output'],outputs=['output']
)# 定义计算图
graph_def = helper.make_graph([matmul_node, add_node, relu_node],'test-model',[input_tensor],[helper.make_tensor_value_info('output', onnx.TensorProto.FLOAT, [1, 5])],initializer=[weight_initializer, bias_initializer]
)# 定义模型
model_def = helper.make_model(graph_def,producer_name='my-model',opset_imports=[helper.make_opsetid('', 12)]
)# 保存模型
onnx.save(model_def, 'test-model.onnx')

此例中,通过手动定义输入张量、权重张量、偏置张量和节点(矩阵乘法、加法、ReLU激活)构建了一个简单的计算图,并通过ONNX工具生成了ONNX格式的模型文件test-model.onnx。可以使用ONNX工具或特定框架工具加载此模型进行推理。

Python调用ONNX模型

下面以使用Python调用ONNX模型为例子,具体步骤如下:

  1. 安装ONNX Runtime库
  2. 加载ONNX模型
  3. 准备输入数据
  4. 进行推理
import onnxruntime
import numpy as np
import onnxruntime as ortmodel_path = 'test-model.onnx'providers = ['CPUExecutionProvider']
ort_session = ort.InferenceSession(model_path, providers=providers)# ort_session = onnxruntime.InferenceSession('test-model.onnx', providers=['CPUExecutionProvider', 'CUDAExecutionProvider'])batch_size = 1
input_size = 10  # set input size to 10input_data = np.random.rand(batch_size, input_size).astype(np.float32)
input_data = input_data.reshape(batch_size, input_size)  # reshape input_data to (batch_size, 10)# batch_size = 1
# input_size = 784  # assuming you have a model that takes 784 inputs
#
# input_data = np.random.rand(batch_size, input_size).astype(np.float32)output = ort_session.run(None, {'input': input_data})[0]print(output)

执行结果:

[[2.5079055 3.4431007 2.5739892 2.332235  1.9329181]]

在这个例子中,我们使用Python调用ONNX Runtime库来加载ONNX模型,并使用随机生成的输入数据进行推理。在ONNX模型的输入中,我们以字典的形式传递输入数据。推理的结果是一个输出数组,这是由ONNX模型定义的。

这就是Python调用深度学习模型ONNX的基本步骤,可以根据具体的模型和任务,在此基础上进行调整和扩展。

常见错误

错误raise ValueError...

  raise ValueError(
ValueError: This ORT build has ['AzureExecutionProvider', 'CPUExecutionProvider'] enabled. Since ORT 1.9, you are required to explicitly set the providers parameter when instantiating InferenceSession. For example, onnxruntime.InferenceSession(..., providers=['AzureExecutionProvider', 'CPUExecutionProvider'], ...)解决方法

该错误是由于在ORT 1.9版本中,调用InferenceSession时必须显式地设置providers参数来指定要使用的执行提供程序,否则会引发此错误。

要解决此错误,您需要在调用InferenceSession时设置providers参数。例如,如果您要使用CPUExecutionProvider和CUDAExecutionProvider,请按以下方式调用InferenceSession:

import onnxruntimesession = onnxruntime.InferenceSession('model.onnx', providers=['CPUExecutionProvider', 'CUDAExecutionProvider'])

在这里,我们将providers参数设置为包含CPUExecutionProvider和CUDAExecutionProvider的列表。根据您的需求,您可以选择其他ExecutionProvider。

请注意,如果您在调用InferenceSession时不设置providers参数,将会发生上述错误,即使您在构建模型时已经定义了ExecutionProvider。

错误:Load model model.onnx failed

onnxruntime.capi.onnxruntime_pybind11_state.NoSuchFile: [ONNXRuntimeError] : 3 : NO_SUCHFILE : Load model from model.onnx failed:Load model model.onnx failed. File doesn't exist

该错误提示 ONNXRuntimeError:3:NO_SUCHFILE,是由于onnxruntime无法在指定路径中找到模型文件model.onnx,因此无法加载模型。

要解决此错误,您需要检查以下几点:

  1. 检查您提供的文件路径是否正确。

    请确保您提供的文件路径是正确的,并且包含文件名和后缀名,例如'model.onnx'。

  2. 检查文件名是否正确。

    请确保文件名拼写正确,并且大小写正确。

  3. 检查文件是否存在。

    请确保指定路径中包含该文件。您可以通过在Python中运行以下代码进行检查:

    import os.pathmodel_path = 'model.onnx'
    exists = os.path.isfile(model_path)
    if not exists:print('Model file not found:', model_path)
    

  4. 检查文件路径是否有权限访问。

    如果您使用的是Windows,则可能需要以管理员身份运行命令提示符或PyCharm。如果您使用的是Linux或macOS,则需要检查文件路径是否有正确的权限。

通过以上步骤排查未能加载模型的原因,并进行相应的修正即可解决此错误。

错误:'CUDAExecutionProvider' is not in available provider

UserWarning: Specified provider 'CUDAExecutionProvider' is not in available provider names.Available providers: 'AzureExecutionProvider, CPUExecutionProvider'warnings.warn(
Traceback (most recent call last):File "D:\code\AutoTest\common\onnx\testOnnx.py", line 13, in <module>input_data = np.random.rand(batch_size, input_size).astype(np.float32)^^^^^^^^^^
NameError: name 'batch_size' is not defined 
解决方法

此错误具有两个独立的部分:

  1. UserWarning:Specified provider 'CUDAExecutionProvider' is not in available provider names。

    这意味着您正在尝试使用CUDAExecutionProvider,但是您的环境中可能没有安装或可用CUDAExecutionProvider。您可以尝试更改提供程序使用CPUExecutionProvider或AzureExecutionProvider。

    在您的代码中,您可以这样设置提供程序:

    import onnxruntime as rtproviders = ['CPUExecutionProvider']  # or ['AzureExecutionProvider']
    session = rt.InferenceSession('model.onnx', providers)
    

  2. NameError:name 'batch_size' is not defined。

    这意味着您在代码中使用了“batch_size”变量,但是在代码的上下文中未定义该变量。请确保您已经定义了batch_size变量并赋予其正确的值。

    例如,您可以在代码中设置batch_size变量,如下所示:

    import numpy as npbatch_size = 1
    input_size = 784  # assuming you have a model that takes 784 inputsinput_data = np.random.rand(batch_size, input_size).astype(np.float32)
    

通过以上步骤排查未定义变量和可用提供程序的问题,并进行相应的修正即可解决此错误。

错误:ONNXRuntimeError

 in runreturn self._sess.run(output_names, input_feed, run_options)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
onnxruntime.capi.onnxruntime_pybind11_state.InvalidArgument: [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: input for the following indicesindex: 1 Got: 784 Expected: 10Please fix either the inputs or the model. 
解决方法

此错误涉及到两个问题:

  1. UserWarning: Specified provider 'CUDAExecutionProvider' is not in available provider names。 Available providers: 'AzureExecutionProvider, CPUExecutionProvider'。

这个问题在前一个错误中已经解释过了。请参考之前的解决方法。

  1. InvalidArgument: [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: input for the following indices index: 1 Got: 784 Expected: 10 Please fix either the inputs or the model。

这个错误意味着您提供的输入张量形状不正确,或者模型中期望的输入形状与提供的输入形状不匹配。

在您给出的代码中,您正在尝试将一个形状为(batch_size, 784)的输入张量提供给模型,但是模型期望输入张量的形状为(batch_size, 10)。 您需要更改输入张量的形状,以便它符合模型的输入形状。

例如,如果您的模型期望的输入形状是(batch_size, 10),您可以将示例代码中的input_size变量设置为10。 然后您可以在生成随机输入数据时,将生成的随机数重塑为(batch_size, 10)形状的张量。

具体而言,您可以在代码中添加以下行,将input_size变量设置为10,并将input_data变量重塑为(batch_size, 10)张量:

import numpy as npbatch_size = 1
input_size = 10  # set input size to 10input_data = np.random.rand(batch_size, input_size).astype(np.float32)
input_data = input_data.reshape(batch_size, input_size)  # reshape input_data to (batch_size, 10)

这样,您就可以使用正确形状的输入张量来运行模型,避免了此错误。

错误:'CUDAExecutionProvider' is not in available provider

UserWarning: Specified provider 'CUDAExecutionProvider' is not in available provider names.Available providers: 'AzureExecutionProvider, CPUExecutionProvider'warnings.warn( 
解决方法

这个警告通常意味着您指定了一个不存在的执行提供程序。在使用onnxruntime.InferenceSession()创建会话对象时,您可以指定要使用的执行提供程序列表。如果指定的执行提供程序不在可用提供程序列表中,则会出现上述警告。

如何解决这个问题取决于您的目标。如果您确信指定的执行提供程序可用,则可以无视警告。否则,可以从可用的提供程序列表中选择一个或多个提供程序,并在创建会话时将其作为提供程序参数传递。例如:

import onnxruntime as ortproviders = ['CPUExecutionProvider']
ort_session = ort.InferenceSession(model_path, providers=providers)

在这个示例中,我们将CPUExecutionProvider作为提供程序传递给onnxruntime.InferenceSession()。如果这个提供程序在可用的提供程序列表中,则不会出现警告。

相关文章:

深度学习-Python调用ONNX模型

目录 ONNX模型使用流程 获取ONNX模型方法 使用ONNX模型 手动编写ONNX模型 Python调用ONNX模型 常见错误 错误raise ValueError...&#xff1a; 错误&#xff1a;Load model model.onnx failed 错误&#xff1a;CUDAExecutionProvider is not in available provider 错…...

[2023.09.24]: 今天差点又交白卷

今天周日&#xff0c;搞定了家里装修的一件事情&#xff0c;周末的事特别多&#xff0c;总算在10点的时候&#xff0c;解决了昨天那个输入焦点设置失败的问题。 在探索Rust编写基于web_sys的WebAssembly编辑器&#xff1a;挑战输入光标定位的实践中&#xff0c;我们总结了设置光…...

css,环形

思路&#xff1a; 1.先利用conic-gradient属性画一个圆&#xff0c;然后再叠加 效果图 <template><div class"ring"><div class"content"><slot></slot></div></div> </template> <script> import …...

php食堂点餐系统hsg5815ABA2程序-计算机毕业设计源码+数据库+lw文档+系统+部署

php食堂点餐系统hsg5815ABA2程序-(毕业设计毕设项目源代码课程设计程序设计指导xz2023) php食堂点餐系统hsg5815ABA2程序-计算机毕业设计源码数据库lw文档系统部署...

Vite打包时使用plugin解决浏览器兼容问题

一、安装Vite插件 在终端输入如下命令&#xff1a; npm add -D vitejs/plugin-legacy 二、配置config文件 在项目目录下创建vite.config.js文件夹&#xff0c;配置如下代码&#xff1a; import { defineConfig } from "vite"; import legacy from "vitejs/pl…...

java Excel 自用开发模板

下载导出 import com.hpay.admin.api.vo.Message; import com.hpay.admin.dubbo.IConfigDubboService; import com.hpay.admin.dubbo.IFileExportLogDubboService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.poi.hss…...

34.CSS魔线图标的悬停效果

效果 源码 index.html <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Icon Fill Hover Effects</title> <link rel="stylesheet" h…...

Django — 会话

目录 一、Cookie1、介绍2、作用3、工作原理4、结构5、用途6、设置7、获取 二、Session1、介绍2、作用3、工作原理3、类型4、用途5、设置6、获取7、清空信息 三、Cookie 和 Session 的区别1、存储位置2、安全性3、数据大小4、跨页面共享5、生命周期6、实现机制7、适用场景 四、P…...

SpringBoot集成easypoi实现execl导出

<!--easypoi依赖&#xff0c;excel导入导出--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version></dependency>通过Exce注解设置标头名字和单…...

第9章 【MySQL】InnoDB的表空间

表空间 是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为 表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个 页 的池子&#xff0c;当我…...

工作、生活常用免费api接口大全

手机号码归属地&#xff1a;提供三大运营商的手机号码归属地查询。全国快递物流查询&#xff1a;1.提供包括申通、顺丰、圆通、韵达、中通、汇通等600快递公司在内的快递物流单号查询。2.与官网实时同步更新。3.自动识别快递公司。IP归属地-IPv4区县级&#xff1a;根据IP地址查…...

寻找单身狗

在一个数组中仅出现一次&#xff0c;其他数均出现两次&#xff0c;这个出现一次的数就被称为“单身狗“。 一.一个单身狗 我们知道异或运算操作符 ^ &#xff0c;它的特点是对应二进制位相同为 0&#xff0c;相异为 1。 由此我们容易知道两个相同的数,进行异或运算得到的结果…...

【pytest】 allure 生成报告

1. 下载地址 官方文档; Allure Framework 参考文档&#xff1a; 最全的PytestAllure使用教程&#xff0c;建议收藏 - 知乎 https://github.com/allure-framework 1.2安装Python依赖 windows&#xff1a;pip install allure-pytest 2. 脚本 用例 import pytest class …...

动态链接库搜索顺序

动态链接库搜索顺序 同一动态链接库 (DLL) 的多个版本通常存在于操作系统 (OS) 内的不同文件系统位置。 可以通过指定完整路径来控制从中加载任何给定 DLL 的特定位置。 但是&#xff0c;如果不使用该方法&#xff0c;则系统会在加载时搜索 DLL&#xff0c;如本主题中所述。 DL…...

【CAN、LIN通信的区分】

CAN和LIN是两种不同的通信协议&#xff0c;用于不同的应用场景。CAN&#xff08;Controller Area Network&#xff09;是一种高速、可靠、多节点的串行通信协议&#xff0c;主要用于汽车电子领域的高速数据传输和控制&#xff1b;而LIN&#xff08;Local Interconnect Network&…...

Redis环境配置

【Redis解压即可】链接&#xff1a;https://pan.baidu.com/s/1y4xVLF8-8PI8qrczbxde9w?pwd0122 提取码&#xff1a;0122 【Redis桌面工具】 链接&#xff1a;https://pan.baidu.com/s/1IlsUy9sMfh95dQPeeM_1Qg?pwd0122 提取码&#xff1a;0122 Redis安装步骤 1.先打开Redis…...

UG NX二次开发(C++)-采用std::vector对体对象的质心进行排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、体对象质心结构体的构造3、采用NXOpen获取part中的所有体对象4、通过遍历体对象集合来实现std::vector<MyBody>的赋值5、对结构体排序6、调用的完整源代码7、生成dll并测试一、pan…...

一点思考|关于「引领性研究」的一点感悟

前言&#xff1a;调研过这么多方向之后&#xff0c;对研究方向的产生与发展具备了一些自己的感悟&#xff0c;尤其是在AI安全领域。私认为&#xff0c;所谓有价值、有意义的研究&#xff0c;就是指在现实社会中能够产生波澜、为国家和社会产生一定效益的研究。 举例来说&#x…...

什么是HTTP/2?它与HTTP/1.1相比有什么改进?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTTP/2 简介⭐ 主要的改进和特点⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端…...

IDEA

快捷键 好用的快捷键&#xff0c;可以使写代码变得更加便捷~ IntelliJ IDEA具有许多有用的快捷键&#xff0c;这些快捷键可以帮助开发人员更快速、高效地编写和管理代码。以下是一些常用的IntelliJ IDEA快捷键&#xff0c;这些快捷键在Java开发中特别有用&#xff1a; 基本编辑…...

NSS [HXPCTF 2021]includer‘s revenge

NSS [HXPCTF 2021]includer’s revenge 题目描述&#xff1a;Just sitting here and waiting for PHP 8.1 (lolphp). 题目源码&#xff1a;&#xff08;index.php&#xff09; <?php ($_GET[action] ?? read ) read ? readfile($_GET[file] ?? index.php) : inclu…...

《动手学深度学习 Pytorch版》 7.1 深度卷积神经网络(AlexNet)

7.1.1 学习表征 深度卷积神经网络的突破出现在2012年。突破可归因于以下两个关键因素&#xff1a; 缺少的成分&#xff1a;数据 数据集紧缺的情况在 2010 年前后兴起的大数据浪潮中得到改善。ImageNet 挑战赛中&#xff0c;ImageNet数据集由斯坦福大学教授李飞飞小组的研究人…...

C++ - 双指针_盛水最多的容器

盛水最多的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的…...

分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测

分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预…...

分享一个java+springboot+vue校园电动车租赁系统(源码、调试、开题、lw)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…...

高性能计算环境下的深度学习异构集群建设与优化实践

★深度学习&#xff1b;模式识别&#xff1b;图像处理&#xff1b;人工智能建模&#xff1b;人工智能&#xff1b;深度学习算法&#xff1b;强化学习&#xff1b;神经网络&#xff1b;卷积神经网络&#xff1b;人工神经网络&#xff1b;VIBE算法&#xff1b;控制系统仿真&#…...

Laravel框架 - Facade门面

1 、官方文档给出的定义 “Facades 为应用的 服务容器 提供了一个「静态」 接口。Laravel 自带了很多 Facades&#xff0c;可以访问绝大部分功能。Laravel Facades 实际是服务容器中底层类的 「静态代理」 &#xff0c;相对于传统静态方法&#xff0c;在使用时能够提供更加灵活…...

算法通关村第16关【青铜】| 滑动窗口思想

1. 滑动窗口的基本思想 一句话概括就是两个快慢指针维护的一个会移动的区间 固定大小窗口&#xff1a;求哪个窗口元素最大、最小、平均值、和最大、和最小 可变大小窗口&#xff1a;求一个序列里最大、最小窗口是什么 2. 两个入门题 &#xff08;1&#xff09;子数组最大平…...

CentOS安装openjdk和elasticsearch

CentOS安装openjdk 文章目录 CentOS安装openjdk一、yum1.1search1.2安装openjdk 二、elasticsearch的启动和关闭2.1启动2.2关闭2.3添加服务 一、yum 1.1search yum search java | grep jdk1.2安装openjdk [roottest ~]# yum install java-1.8.0-openjdk -y 查看openjdk版本 …...

【新版】系统架构设计师 - 案例分析 - 信息安全

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 案例分析 - 信息安全安全架构安全模型分类BLP模型Biba模型Chinese Wall模型 信息安全整体架构设计WPDRRC模型各模型安全防范功能 网络安全体系架构设计开放系统互联安全体系结构安全服务与安全机制…...

长沙php网站建设/网站访问量

...

做外汇门户网站/英文站友情链接去哪里查

Shell获取当前主机ip地址&#xff1a;1.方法一使用ifconfig 并指定接口&#xff1a;ifconfig eth0|grep "inet addr:"|awk -F":" {print $2}|awk {print $1}2.方法二使用ip addr命令ip addr | grep state UP -A2 | tail -n1 | awk {print $2} | cut -f1 -d…...

永康网站建设的公司/40个免费网站推广平台

c对象的存储空间 1. 非静态成员 2. 静态成员变量 静态成员变量不占对象的内存空间 3. 成员函数 成员函数不占内存空间 4. 析构函数 5. 类中有虚析构函数 6. 继承空类和多重继承空类存储空间的计算 posted 2019-04-26 14:07 douzujun 阅读(...) 评论(...) 编辑 收藏...

腾讯云建设一个网站要多少钱/东莞百度搜索优化

Day -? 居然还能报上thupc&#xff0c;我在队里唯一的作用大约是cfrating稍微高点方便过审。另外两位是lz和xyy。 Day -2 我夫人生日&#xff01; Day -1 lz和xyy的家长都来了带我飞。住在去年thusc住的宾馆。晚上开黑打cometoj&#xff0c;好像又有小裙子了。 Day 0 早上九点…...

北京高端网站建设宣传/网络营销推广专家

处理器不能直接解释一个程序集。程序集采用的是另一种语言&#xff0c;即公共中间语言&#xff08;Common Intermediate Language&#xff0c; CIL&#xff09;&#xff0c;或者简称为中间语言&#xff08;IL&#xff09;。 注意&#xff1a;CIL的另一种说法是MSIL&#xff0c;…...

济南网站建设百家号/优化大师最新版下载

文章目录一、实验设计1、滤波前的准备2、函数设计二、实验过程三、结果分析一、实验设计 实验前的准备&#xff1a;傅里叶变换及反变换 opencv示例解读。 1、滤波前的准备 进行傅里叶逆变换需要知道原复数的实部和虚部&#xff0c;但是傅里叶变换后的图像显示的是幅度谱&…...