了解机器学习/深度学习常用的框架、工具

news/2024/4/26 23:19:43

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


一、scikit-learn

scikit-learn 的背景和创建者

scikit-learn 是一个为 Python 编程语言设计的自由软件机器学习库。该项目最初由 David Cournapeau 在 Google Summer of Code 项目中启动。2010 年,由法国国家信息与自动化研究所的 Fabian Pedregosa、Gael Varoquaux、Alexandre Gramfort 和 Vincent Michel 领导,该项目于 2010 年 2 月 1 日进行了首次公开发行。

scikit-learn 的基本信息和特性

scikit-learn 提供了多种分类、回归、聚类和降维算法,如多层感知器、支持向量机、随机森林、梯度提升、k-means 聚类、DBSCAN、t-SNE 和 PCA。它旨在与 Python 数值库 NumPy 和科学库 SciPy 协同工作。scikit-learn 的 API 设计简洁易用,既适合初学者入门,也能满足专业人士在实际问题解决中的需求。

scikit-learn 的优缺点

优点:

  • 易于学习和使用:scikit-learn 的 API 设计简单,容易上手。

  • 丰富的算法和工具:提供了大量的经典机器学习算法和工具。

缺点:

  • 不支持深度学习:由于设计目标,scikit-learn 并不支持高级的深度学习任务。

  • 不支持分布式计算,不适合处理超大型数据。

二、PyTorch

PyTorch 的背景和创建者

PyTorch 是一款由 Facebook AI Research (FAIR) 团队于 2017 年 1 月发布的深度学习框架,基于 Torch 并采用 Python 语言重新开发。Torch 本身是一款由纽约大学于 2012 年发布的机器学习框架,使用 Lua 语言作为接口。PyTorch 的创始团队汇聚了包括 Adam Paszke、Sam Gross、Soumith Chintala 等杰出人才。

PyTorch 的基本信息和特性

PyTorch 是一个开源的深度学习框架,提供了丰富的工具和库,为用户构建、训练和部署深度学习模型提供了便利。其核心概念涵盖张量、数据类型、动态图机制、自动求导、优化器选择以及模型的保存和加载等。PyTorch 的设计哲学与 Python 的设计哲学相似,强调易读性和简洁性优于隐式复杂性。由于 PyTorch 使用 Python 语言编写,并作为 Python 的一种扩展,因此更易于学习和使用。

PyTorch 的优缺点

优点:

  • 灵活性高:PyTorch 提供动态图特性,使模型构建更加灵活,便于随时调整模型结构,适合研究性工作。

  • 易于调试:PyTorch 配备全面的调试工具,有助于快速定位和解决问题。

  • 社区活跃:PyTorch 社区十分活跃,用户能够获得及时和准确的帮助。

缺点:

  • 性能相对较低:与 TensorFlow 等静态图框架相比,PyTorch 的训练速度较慢。

  • 生态系统不够成熟:相较于其他机器学习框架,如 TensorFlow,PyTorch 的生态系统尚待完善,缺乏稳定的工具和库。

  • 代码量较大:从数据预处理到模型搭建,再到结果评估,需要用户自行完成,初学者可能会觉得繁琐。但这也带来好处,即使用户更深入地理解整个流程,不像使用封装较好的库(如 Keras)那样 “盲盒” 操作。

三、Tensorflow

TensorFlow 的背景和创建者

TensorFlow 是由 Google Brain 团队开发的深度学习框架。它提供了一种高效且灵活的方式来实现和训练各种深度学习模型。

TensorFlow 的基本信息和特性

TensorFlow 是一款开源的、由 Google Brain 团队开发的深度学习框架,具有高度的灵活性和可扩展性。它支持分布式计算,并能在手机、台式机、服务器和云计算等不同平台和设备上运行。TensorFlow 的核心概念包括张量(Tensor)、计算图(Graph)和会话(Session)。张量是 TensorFlow 的基本数据类型,类似于多维数组。计算图描述了数据和操作之间的连接,将数据从输入引导到输出。会话则是标识并封装运行时环境的对象,可供程序使用。TensorFlow 广泛应用于机器学习、深度学习、自然语言处理、图像识别等多个领域。

TensorFlow 的优缺点

TensorFlow 的优点如下:

  • 广泛的社区支持,提供丰富的文档和教程。

  • 强大的分布式计算支持,适用于大规模模型的训练和推理。

  • 使用张量(多维数组)轻松定义、优化和计算数学表达式。

  • 为深度神经网络和机器学习技术提供良好的编程支持。

  • 对各种数据集具有高扩展性的计算功能。

  • 利用 GPU(图形处理器)进行计算,实现自动化管理,并具有优化内存和数据的独特功能。

然而,TensorFlow 也存在一些缺点:

  • 对于初学者来说,学习曲线可能相对陡峭。

  • 在某些情况下,TensorFlow 的代码结构可能相对繁琐,不易理解。

这些因素可能对初学者构成一定的挑战。

四、Keras 3.0

Keras 3.0 的背景和创建者

Keras 3.0 是由 François Chollet 领导的团队开发的,他也被誉为 “Keras 之父”。经过 5 个月的公开 Beta 测试后,这个版本正式问世。Keras 3.0 是对 Keras 代码库的全新重构,可以在 JAX、TensorFlow 和 PyTorch 上运行,为大型模型的训练和部署提供了全新功能。目前,已有超过 250 万的开发者在使用 Keras 框架。

Keras 3.0 的基本信息和特性

多框架支持:Keras 3.0 支持在 JAX、TensorFlow 和 PyTorch 上运行,包括一百多个层、数十种度量标准、损失函数、优化器和回调函数。它还支持 Keras 的训练和评估循环,以及 Keras 的保存和序列化基础设施。

大规模模型训练和部署:Keras 3.0 提供了全新的大模型训练和部署能力。优化的算法和性能改进使现在能够处理更大规模、更复杂的深度学习模型,而无需担心性能问题。

兼容多种数据管道:Keras 3.0 的 fit()、evaluate() 和 predict() 例程兼容 tf.data.Dataset 对象、PyTorch 的 DataLoader 对象、NumPy 数组和 Pandas 数据框。这意味着,无论您使用哪个后端,都可以轻松地使用来自任何来源的数据。

Keras 3.0 的优缺点

优点:

  • 性能优化:Keras 3.0 能够动态选择为模型提供最佳性能的后端,无需更改代码,确保以最高效率运行。

  • 生态系统可选性:任何 Keras 3.0 模型都可以作为 PyTorch 模块实例化,也可以作为 TensorFlow SavedModel 导出,或作为无状态 JAX 函数实例化。

  • 易用性:Keras 提供了易用性和快速原型设计的能力,降低了编程复杂性,节省了时间成本。

缺点:

  • 运行速度:由于 Keras 是在 TensorFlow 的基础上再次封装的,因此运行速度可能没有 TensorFlow 快。

五、Caffe

Caffe 的背景和创建者

Caffe 是由伯克利视觉和学习中心(Berkeley Vision and Learning Center,简称 BVLC)开发的开源深度学习框架。其主要开发者是贾扬清,他同时也是知名框架 TensorFlow 的核心开发者,之前是阿里副总裁及阿里达摩院系统 AI 实验室负责人。

Caffe 的基本信息和特性

Caffe 是一个高效的深度学习框架,采用 C++ 实现,主要在 GPUs 上运行。它支持多种深度学习模型,并提供丰富的预训练模型供用户使用。Caffe 框架广泛应用于图像识别、语音识别、自然语言处理等众多领域。Caffe 模型的配置文件是以纯文本模式编写的,它使用一种简单的语法格式将模型结构描述为图形结构。配置文件主要包含网络结构、数据层、损失函数、优化器等信息。此外,Caffe 还提供了 Python 和 Matlab 的接口,为用户进行实验和开发提供了便利。

Caffe 的优缺点

优点:

  • 高效性能:Caffe 利用 GPU 加速计算,显著提升训练和推断速度。

  • 精度高:Caffe 支持多种网络结构和训练技巧,助力用户构建高精度深度学习模型。

  • 可扩展性强:Caffe 提供丰富的层和运算符,方便用户扩展新网络结构和功能。

缺点:

  • 可读性差:Caffe 的代码较为复杂,阅读和理解可能具有挑战性,对初学者而言存在门槛。

  • 可调试性不足:相较于其他深度学习框架,Caffe 在调试方面不够友好,错误发现和修复较为困难。

  • 代码量大:与 TensorFlow 等框架相比,Caffe 的代码量较大,可能影响开发效率。

  • Caffe 已不再更新维护。

六、MXNet

MXNet 的背景和创建者

MXNet 的起源可以追溯到卡内基梅隆大学、华盛顿大学等机构的研究项目。它最初是由李沐(Mu Li)等人开发的,旨在提供一个高效、灵活的深度学习框架。随后,它吸引了亚马逊、微软等公司的关注和支持。2015 年,MXNet 被亚马逊选为其 AWS(亚马逊云计算服务)上的首选深度学习框架。此外,MXNet 也是 Apache 软件基金会下的一个顶级项目,这意味着它得到了一个广泛社区的支持和贡献。

MXNet 的基本信息和特性

MXNet 设计之初就考虑到了效率和灵活性,它具有以下几个显著特点:

  • 跨平台和多语言支持:MXNet 可以在多种操作系统上运行,包括 Linux、Windows 和 macOS。同时,它提供了多种编程语言的接口,如 Python、R、Scala 和 C++ 等,使得不同背景的开发者都能使用该框架。

  • 高效的性能:MXNet 通过其高效的计算图优化和内存管理,能够实现快速的数据处理和模型训练速度。此外,它还支持自动并行计算和GPU加速,进一步提升了计算效率。

  • 灵活性:MXNet 提供了声明式编程(Symbolic API)和命令式编程(Imperative API,Gluon)两种风格。Gluon API 使得模型的定义变得更加简单直观,同时保留了底层的灵活性和控制力。

  • 易于部署:MXNet 支持多种设备部署,包括服务器、边缘设备和移动设备。这使得将训练好的模型部署到不同平台变得更加容易。

MXNet 支持超大规模云厂商 AWS 和 Azure。2016 年,亚马逊选择 MXNet 作为 AWS 的深度学习框架,亚马逊首席技术官 Werner Vogels 亲自撰文解释并进行了大力推广。经过多年的发展,MXNet 得到了英特尔、Dato、百度、微软、Wolfram Research 以及卡耐基梅隆大学、MIT、华盛顿大学和香港科技大学等研究机构的支持。但 MXNet 的发展并非一路高歌猛进,在最近几年 MXNet 逐渐走向没落。

MXNet 的优缺点

优点:

  • 强大的分布式性能:MXNet 支持多种分布式训练模式,确保在多 GPU 和多节点资源上的高效利用。

  • 丰富的语言支持:MXNet 支持 Python、C++ 等多种编程语言,为用户提供灵活的开发和使用选择。

  • 灵活且易用:提供了两种编程风格,并且支持多语言接口,适合不同水平的开发者。

  • 广泛的云平台应用:MXNet 在 AWS、Azure 等云平台上得到广泛应用,展示其强大的部署能力。

缺点:

  • 知名度与生态:尽管 MXNet 在技术上具有很多优势,但相比 TensorFlow 和 PyTorch 等框架,在知名度和生态建设方面略显不足。这可能会影响到新用户的选择。

  • 学习曲线:对于初学者来说,尽管 Gluon API 大大降低了入门难度,但要充分掌握 MXNet 的所有功能仍然需要一定时间。

  • 实验效果有差距:部分模型在 MXNet 上可能无法达到 state-of-the-art 的效果。

  • MXNet 已被移至 Apache Attic,原因是这个项目不活跃。

七、PaddlePaddle

PaddlePaddle 的背景和创建者

PaddlePaddle 是由百度公司自主研发的深度学习框架。它以百度多年的深度学习技术研究和业务应用为基础,集核心框架、基础模型库、端到端开发套件、丰富的工具组件于一体,成为中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。

PaddlePaddle 的基本信息和特性

PaddlePaddle 是一个易用、高效、灵活、可扩展的深度学习框架。它在业内率先实现了动静统一的框架设计,兼顾科研和产业需求,在开发便捷的深度学习框架、大规模分布式训练、高性能推理引擎、产业级模型库等技术上处于国际领先水平。此外,PaddlePaddle 还支持多种语言来创建深度学习模型,如 Python、C++ 等。

PaddlePaddle 的优缺点

优点:PaddlePaddle 的优势在于其易用性、本土性和快速业务集成能力。其模型库表现出色,如 PaddleOCR,相较于 OpenMMLab,更具可读性且便于用户自定义。此外,PaddlePaddle 支持多端部署,包括服务器端、移动端等多种异构硬件设备,从而实现高速推理,预测性能显著。

缺点:PaddlePaddle 的一个明显不足在于其文档质量。有用户反映文档质量不佳,且示例代码中的接口文档难以查找。

八、PyCaret

PyCaret 的背景和创建者

PyCaret 由 Moez Ali 开发。其目标是弥合复杂的机器学习算法与数据科学家、分析师及研究人员所期望的易用性之间的鸿沟。作为在 MIT 许可下发布的开源软件,PyCaret 因其开放源代码的性质和广泛的功能而受到欢迎。

PyCaret 的基本信息和特性

PyCaret 是一个开源的、低代码的 Python 机器学习库,能够自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具,可以指数级加速实验周期并提高生产效率。与其他开源机器学习库相比,PyCaret 是一种替代的低代码库,能够用少量代码执行复杂的机器学习任务。PyCaret 本质上是围绕多个机器学习库和框架(如 scikit-learn、XGBoost、LightGBM、CatBoost、spaCy、Optuna、Hyperopt、Ray 等)的 Python 封装器。

PyCaret 的优缺点

PyCaret 的主要优点在于其简洁而高效的 API,通过少量代码即可完成从数据加载到模型部署的整个过程。这种高度集成化的设计使得机器学习流程更加流畅,特别适用于快速原型开发和实验。然而,PyCaret 的高度抽象化可能导致其不适用于需要深度定制或特殊处理的复杂项目。此外,尽管 PyCaret 提供了许多常用的机器学习算法和预处理步骤,但对于一些特定的、非标准的算法或预处理方法,用户可能需要自行实现。

九、部署和推理

在深度学习和机器学习领域,模型的部署和推理是将训练好的模型应用于实际问题中的关键步骤。以下是一些常用的框架和工具:ONNX Runtime、NVIDIA TensorRT、TFLite、Treelite(其他的还有 Core ML、TensorFlow Serving、TorchServe 等)。

1. ONNX Runtime

ONNX Runtime 的背景和创建者

ONNX Runtime 是微软公司开发和维护的深度学习推理框架。它是一个跨平台的机器学习模型加速器,具有灵活的接口,可以集成硬件特定的库。

ONNX Runtime 的基本信息和特性

ONNX Runtime 是一个异构模型运行框架。它可以将原始 ONNX 模型进行硬件无关的图优化,然后获取当前支持的硬件对应的算子库,将模型切分为多个子模型,最后在下发到各个硬件平台上执行。它支持多种运行后端,包括 CPU、GPU、TensorRT、DML 等。ONNX Runtime 可以与 PyTorch、Tensorflow/Keras、TFLite、scikit-learn 和其他框架中的模型一起使用。它支持多平台,包括 Windows(CPU+GPU)、Linux(CPU+GPU)、Mac、iOS、Android。

ONNX Runtime 的优缺点

优点:

  • ONNX Runtime 提供了完整的算子支持,因此只要编译过的模型基本都能成功运行。

  • ONNX Runtime 为 ONNX 模型提供了最原生的支持,用户可以非常便利地用它来运行 ONNX 模型。

  • ONNX Runtime 与多种编程语言兼容,包括 C++、C、Python 和 C# 等。

缺点:

  • 如果模型中包含不支持的算子,将会切换到 CPU 上进行计算,这种数据切换会对性能产生较大影响。

  • 对于一些非常见的数据类型,可能需要提交 PR 以获得支持。

  • 虽然 ONNX Runtime 支持多种硬件平台,但并非所有硬件平台都能得到完全的支持。

总的来说,ONNX Runtime 是一个强大且灵活的深度学习推理框架,能够帮助开发者更便捷地部署和运行 ONNX 模型。然而,它也存在一些局限性,例如对特定硬件平台和数据类型的支持不足,这可能会影响到模型的运行效率和性能。

2. NVIDIA TensorRT

NVIDIA TensorRT 的背景和创建者

NVIDIA TensorRT 是由 NVIDIA 公司开发的高性能深度学习推理加速引擎,基于 CUDA 和 cuDNN。NVIDIA 是一家总部位于美国的全球科技公司,专注于人工智能计算和图形处理。

NVIDIA TensorRT 的基本信息和特性

基本信息:TensorRT 是一个高效的深度学习模型推理软件开发工具包,采用 C++ 开发,并提供 C++ 和 Python 的 API 接口。

特性:TensorRT 支持多种深度学习框架,如 TensorFlow、PyTorch、Caffe、MxNet 等。它能够实现在 GPU 上的低延迟、高吞吐量部署。TensorRT 的优化特点包括:

  • 算子融合(网络层合并)。

  • Kernel 自动选择最合适的算法进行卷积运算。

  • FP32->FP16、INT8、INT4:低精度量化,使模型体积更小、内存占用和延迟更低。

  • 针对不同的硬件,如 P4 卡、V100 卡以及嵌入式设备,TensorRT 都会进行相应的优化,生成优化后的 engine。

NVIDIA TensorRT 的优缺点

优点:TensorRT 能够对训练好的模型进行推理优化,显著提升模型的推理速度。它支持多种深度学习框架,并能在 NVIDIA Kepler™ 一代以后的所有 NVIDIA GPU 上执行网络推理。此外,TensorRT 还具备多流并行推理的功能。

缺点:TensorRT 主要适用于 GPU,若在 CPU 上使用可能会遇到问题。对于某些自定义层或操作,TensorRT 可能不支持,需要通过插件自行实现。此外,使用 TensorRT 可能需要一定的 CUDA 基础。

3. TFLite

TFLite 的背景和创建者

TensorFlow Lite(简称 TFLite)是一个由 Google 开发的开源深度学习框架,专为移动设备、嵌入式设备和物联网设备上的机器学习模型推理而设计。TFLite 是 TensorFlow 的轻量级解决方案,旨在实现快速、高效的机器学习模型部署。TensorFlow 本身是一个广泛使用的深度学习库,支持多种任务,如图像识别、语音处理和自然语言处理等。随着移动和边缘计算的兴起,对于能够在资源受限的设备上运行的轻量级模型需求日益增加,这促使了 TFLite 的诞生。

TFLite 的基本信息和特性

基本信息

  • 轻量化:TFLite 通过模型量化和优化技术减小模型大小,提高执行效率,使其适合在内存和计算能力有限的设备上运行。

  • 跨平台:支持 Android、iOS、Linux 等多个平台,可以在各种移动设备和嵌入式设备上运行。

  • 模型转换:通过 TensorFlow 提供的转换工具,可以将 TensorFlow 模型转换为 TFLite 格式。这包括全模型量化、权重量化等优化措施,进一步减小模型大小并提升运行效率。

特性

  • 量化:支持多种量化策略,包括后训练量化和量化感知训练,有效减少模型大小并加速推理过程。

  • 代理(Delegate):TFLite 支持使用硬件加速代理(如 GPU、NNAPI 等),以利用特定硬件的优势加速模型推理。

  • 灵活性:提供了丰富的预训练模型和工具,方便用户快速部署和测试。

  • 易用性:提供了简洁的 API 和文档,使得开发者可以轻松地将 TFLite 集成到应用中。

TFLite 的优缺点

优点:

  • 高效性:通过模型优化和硬件加速技术,TFLite 能够在资源受限的设备上实现快速推理。

  • 轻量级:经过优化的 TFLite 模型体积小,适合在移动和嵌入式设备上部署。

  • 易于集成:TFLite 提供了简单易用的 API 和丰富的文档资料,使得开发者可以快速将 AI 功能集成到应用中。

  • 社区支持:作为 TensorFlow 的一部分,TFLite 享有强大的社区支持和丰富的学习资源。

缺点:

  • 功能限制:与完整版 TensorFlow 相比,TFLite 的操作支持更少,可能无法直接运行一些复杂模型。

  • 调试困难:由于运行在移动或嵌入式设备上,调试 TFLite 模型可能比在服务器或桌面环境更加困难。

  • 性能依赖硬件:虽然 TFLite 支持硬件加速,但其性能表现高度依赖于特定设备的硬件配置和支持情况。

总体而言,TFLite 是一个强大且灵活的工具,适合于需要在移动或嵌入式设备上部署机器学习模型的场景。尽管存在一些限制和挑战,但其轻量级设计、高效性能和易用性使其成为边缘计算领域中不可或缺的工具之一。

4. Treelite

Treelite 的背景和创建者

Treelite 是一个开源库,旨在优化决策树模型和集成树模型(如随机森林和梯度提升树)的部署。它通过将这些模型转换为高效的 C 代码来实现快速预测,特别是在低延迟或资源受限的环境中。Treelite 背后的主要创意来源于观察到在实际应用中,尽管训练机器学习模型可能需要大量的计算资源,但在部署阶段,尤其是对于决策树模型,可以通过优化来显著减少所需的资源和提高预测速度。

Treelite 是由 DMLC(Distributed Machine Learning Community)团队开发的。DMLC 是一个致力于构建可扩展、高效机器学习算法和框架的开源社区,也是著名的 XGBoost、MXNet 等项目的发源地。其中,陈天奇是这个社区以及 Treelite 项目的主要贡献者之一。陈天奇对于推动机器学习工具和框架的发展做出了巨大贡献,包括但不限于他在 XGBoost 项目上的工作。

Treelite 的基本信息和特性

Treelite 主要用于简化和加速决策树模型(包括但不限于 XGBoost、LightGBM 和 scikit-learn 中训练的模型)的部署过程。它通过将这些模型编译成高效的 C 代码或共享库(如 DLL 或 SO 文件),从而使得在不同环境下部署变得更加高效和灵活。

主要特性包括:

  • 模型编译: Treelite 可以将多种格式的树模型编译成高效的机器码。

  • 支持多种语言和平台: 编译后的模型可以在多种编程语言(如 Python、Java)和平台上使用。

  • 优化预测性能: Treelite 采用多种优化技术(如并行计算、缓存优化等)来提高预测速度。

  • 易于集成: 编译后的模型可以轻松地集成到现有的应用程序中,无需依赖原始训练框架。

Treelite 的优缺点分析

优点:

  • 提高预测速度: 通过将模型转换为优化过的 C 代码,Treelite 能够显著提高预测速度,尤其是在资源受限或要求低延迟的场景中。

  • 降低部署难度: Treelite 使得将训练好的模型部署到不同平台变得更加简单,无需担心原始训练框架的依赖。

  • 广泛兼容性: 支持从多个流行的机器学习框架导入模型,包括 XGBoost、LightGBM 和 scikit-learn。

缺点:

  • 学习曲线: 对于初学者来说,理解如何有效地使用 Treelite 可能需要一定时间,尤其是对于那些不熟悉模型编译和优化技术的用户。

  • 更新频率: 作为一个开源项目,Treelite 的更新和新功能添加可能不如商业软件那样频繁,这可能会影响到使用最新机器学习框架版本训练出来的模型。

  • 特定场景使用: 尽管 Treelite 在提高决策树模型预测速度方面非常有效,但它主要针对的是树模型。对于非树形结构的模型,比如深度神经网络,Treelite 就不适用。

总体而言,Treelite 是一个强大且专注于树模型快速部署的工具。对于需要在资源受限环境中快速执行大量预测任务的应用场景来说,它提供了一种有效且易于实施的解决方案。

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

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

相关文章

JavaScript 权威指南第七版(GPT 重译)(一)

前言 本书涵盖了 JavaScript 语言以及 Web 浏览器和 Node 实现的 JavaScript API。我为一些具有先前编程经验的读者编写了这本书,他们想要学习 JavaScript,也为已经使用 JavaScript 的程序员编写了这本书,但希望将他们的理解提升到一个新的水…

LeetCode - 股票平滑下跌阶段的数目(分组循环)

2110. 股票平滑下跌阶段的数目 当数组中的数字满足这个prices[i] 1 prices[i - 1]条件之后&#xff0c;就是平滑下降的阶段&#xff0c;也就是将数组中连续的数字进行一个分组。每次计算一个分组即可。 class Solution { public:long long getDescentPeriods(vector<int&…

2024.3.21 QT

QT登录界面设计&#xff1a; //头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nu…

包子凑数(蓝桥杯,闫氏DP分析法)

题目描述&#xff1a; 小明几乎每天早晨都会在一家包子铺吃早餐。 他发现这家包子铺有 N 种蒸笼&#xff0c;其中第 i 种蒸笼恰好能放 Ai 个包子。 每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买 X 个包子&#xff0c;卖包子的大叔就会迅速选出若干笼…

Linux系统使用Docker部署Portainer结合内网穿透实现远程管理容器和镜像

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

verilog设计-CDC:单bit脉冲快时钟域到慢时钟域

一、前言 当单bit信号由快时钟域传递给慢时钟域时&#xff0c;快时钟域的异步信号最小可为快时钟信号的一个时钟周期脉冲&#xff0c;快时钟域的单时钟周期脉冲长度小于慢时钟域的时钟周期&#xff0c;很有可能该脉冲信号在慢时钟域的两个时钟上升沿之间&#xff0c;导致该脉冲…