热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

djangosettings定义的变量不存在_使用Django部署机器学习模型(1)

介绍机器学习(ML)应用的需求正在不断增长。许多资料显示了如何训练ML算法。然而,ML算法分为两个阶段:训练阶段——在这个阶段,基于历史数据训练ML算法

4392ec6014d60c395af8c3da3bdaf8ef.png

介绍

机器学习(ML)应用的需求正在不断增长。许多资料显示了如何训练ML算法。然而,ML算法分为两个阶段:

  • 训练阶段——在这个阶段,基于历史数据训练ML算法,

  • 推理阶段——ML算法被用于计算对未知结果的新数据的预测。

商业利益就处于推理阶段,ML算法会在信息已知之前就提供它。如何为生产系统提供用于推理的ML算法是一个技术挑战。有许多需要满足的要求:

  • ML算法部署自动化,

  • 持续集成,

  • 算法和预测的再现性,

  • 生产中算法的诊断和监控,

  • 管理和法规符合性,

  • 可伸缩性,

  • 用户协作。

ML算法有很多使用方法:

  • 最简单的方法是在本地运行ML算法,对准备好的测试数据进行预测,并与他人共享预测结果。该方法实现简单、快速。然而,它有很多缺点。管理、监控、扩展和协作是很困难的。

  • 第二种类似的方法是在系统代码中硬编码ML算法。这个解决方案更适合于简单的ML算法,比如决策树或线性回归(这些算法很容易独立于编程语言实现)。此解决方案的行为类似于第一种方法——它易于实现,但有许多缺点。

  • 第三个解决方案是通过REST API、RPC或WebSockets使ML算法可用。此方法需要实现一个能处理请求并将其转发给ML算法的服务器。在这种方法中,ML生产系统的所有需求都可以得到满足。

  • 最后一个解决方案是使用商业供应商来部署ML算法——它可以是在云中,也可以是在本地。有时候,这是一个很好的解决方案。当您有一个标准的ML算法时,那么供应商就可以处理它,并且您有钱支付给供应商(它可能有点昂贵)。

本教程提供了有关如何使用REST API构建您的ML系统的代码示例。在本书中,为了构建ML服务,我将使用Python 3.6和Django 2.2.4。这本书是第一部分,涵盖的基础应该足以构建您的ML系统,该系统:

  • 可以处理多个API端点,

  • 每个API端点可以有几个不同版本的ML算法,

  • ML代码和工件(带有ML参数的文件)被存储在代码存储库(git)中,

  • 支持快速部署和持续集成(服务器和ML代码测试),

  • 支持监控和算法诊断(支持A/B测试),

  • 可扩展(与容器一起部署),

  • 具有用户界面。

本教程可以通过多种方式进行扩展,例如:

  • 用Celery运行长时间的批量预测或算法训练任务,

  • 用Celery运行预定的任务,

  • 用于物联网应用程序的WebSocket接口(带有Django通道),

  • 身份验证和用户管理。

目前,本教程不涉及上述主题。我以后会根据读者的反馈来写它们。您可以使用这个表格给我进行反馈。

在我看来,构建ML系统有一个很大的优势——它是根据您的需要定制的。它具有ML系统中所需的所有特性,并且可以根据您的需要调整复杂性。。

本教程是为那些熟悉ML并希望了解如何构建ML web服务的读者准备的。需要基本的Python知识。本教程的完整代码在这里:https://github.com/pplonski/my_ml_service  。

开始

您将在这一章学到什么:

  • 如何设置git存储库,

  • 安装开发环境(我将使用Ubuntu 16.04),

  • 安装所需要的包,

  • 启动Django项目。

设置git存储库

为了建立一个git仓库,我使用了GitHub(它对公共和私有项目都是免费的)。如果您在那里有一个帐户,请访问https://github.com/new  并设置存储库,如图(1)所示。

ffd8edc628f7a6c8ebd9a86fa6461c40.png

图1:在github中设置一个新项目

本教程的完整代码在这里:https://github.com/pplonski/my_ml_service  。

然后进入您的终端并设置存储库:

847935fd993fb6d77e1fb97c9cdf2030.png

在我的例子中,存储库中有两个文件,即LICENSE和README.md。

安装

让我们设置并激活开发环境(我使用的是Ubuntu 16.04)。我将使用virtualenv:

1e04e29411b617027d9e434f1964b0f8.png

您每次在新终端开始项目工作时,都需要激活环境。

我将使用pip3来安装所需的软件包:

0e5160ec60006ddc503baadd32a1e0f9.png

我安装的Django版本是2.2.4。

启动Django项目

我将在backend目录中设置Django项目。Django项目名被设置为server。

ed3a420be11a6df2ceefd6c7c72fcf89.png

您可以使用以下命令来启动您的初始化的服务器:

474748cf372db1b0a919c273b193a2ec.png

当您在您喜欢的web浏览器中输入127.0.0.1:8000时,您应该会看到默认的Django欢迎站点(2)。

6a1055dcb7428f245a014590304c792f.png

图2:Django默认欢迎站点

恭喜您! ! !您已经成功地设置了环境。

>>> 今日签到口令&#xff1a;vb7o <<<

将源文件添加到存储库中

在进入下一章之前&#xff0c;让我们先提交新文件。

bc4943d76cb4b119e8af6155c6847fdc.png

以下文件应该会被添加到您的项目中:

070e5d64af5c4423da32103230714df3.png

在您的目录中&#xff0c;还有其他文件没有被添加到存储库中&#xff0c;因为.gitignore文件中排除了这些文件。

构建ML算法

在这一章您将学到:

  • 如何安装Jupyter notebook&#xff0c;

  • 如何构建两个ML算法&#xff0c;

  • 保存预处理细节和算法。

安装Jupyter notebook

为了构建ML算法&#xff0c;我使用了Jupyter notebook。您可以轻松安装它:

0a864bdb555aa8797aeefa21b2762426.png

要设置Jupyter notebook使用本地virtualenv环境&#xff0c;您可以运行运行:

23c728432ecc5b728c8292fba7a35a40.png

我将创建一个research目录用于存放Jupiter文件。要启动Jupyter notebook &#xff0c;请运行:

bc942f1a274e49762655843887d90b7a.png

启动一个新notebook时&#xff0c;请确保您选择了正确的内核&#xff0c;在我们的示例中是venv(图3)。

045733990ede96aaddf0878295d65620.png

图 3: 启动新的jupyter notebook

训练ML 算法

在构建ML算法之前&#xff0c;我们需要安装所需包:

d1dcae6c3eb6889360363cfc31e70fd4.png

numpy和pandas包用于数据操作。joblib用于ML对象的保存。然而&#xff0c;sklearn包提供了广泛的ML算法。在安装这些包之后&#xff0c;我们需要重新加载Jupyter。

我们代码的第一步是加载包:

bf5feb874c261efc5690f1ee70275f32.png

加载数据

在本教程中&#xff0c;我将使用Adult Income数据集。在这个数据集中&#xff0c;ML将被用来根据人口普查数据预测收入是否超过每年5万美元。我将从我的公共存储库中加载数据&#xff0c;这些数据集适用于ML入门。

加载数据并显示第一行数据的代码(图4):

24347bfc023937aca8511a6522e0e76b.png

03ad425a56917506cc6749a903a64736.png

图4:我们数据集的第一行

X矩阵有32,561行14列。这是我们算法的输入数据&#xff0c;每一行描述一个人。y向量有32,561个值&#xff0c;表示年收入是否超过5万每年。

在开始数据预处理之前&#xff0c;我们将把数据分成训练和测试子集。我们将使用30%的数据进行测试。

df634fc1cb609baf16d8e56768d01588.png

数据预处理

在我们的数据集中&#xff0c;有缺失的值和分类列。对于ML算法训练&#xff0c;我将使用sklearn包中的随机森林(Random Forest)算法。在当前的实现中&#xff0c;它不能处理缺失值和分类列&#xff0c;这就是为什么我们需要应用预处理算法。

为了填充缺失的值&#xff0c;我们将在每一列中使用最频繁的值(当然还有许多其他的填充方法&#xff0c;我选择的只是作为示例)。

8d1bcf7b34c04ccf18237a781dca7d28.png

train_mode值看起来像这样&#xff1a;

aa58aa2dde5c8ded643805bd1c233c49.png

从train_mode中您可以看到&#xff0c;例如在age列中最常见的值是31.0。

让我们把范畴转换成数字。我将使用来自sklearn包的LabelEncoder:

bad4b43dd351efc48ae97bf3dc1dc1ea.png

算法训练

数据已经准备好了&#xff0c;所以我们就可以训练我们的随机森林算法。

08986778e4adc1f2272446c51ed0c187.png

我们还将训练极端随机树(Extra Tree)算法:

d0c53fdb2401869524b71cea8e81a894.png

正如您所看到的&#xff0c;训练算法很简单&#xff0c;只需两行代码—比数据读取和预处理要少得多。现在&#xff0c;让我们保存我们创建的算法。需要注意的重要一点是&#xff0c;ML算法不仅是rf和et变量(带有模型权值)&#xff0c;而且我们还需要保存预处理变量train_mode和encoders。为了保存&#xff0c;我将使用joblib包。

b29515e1204a0a7563e707266b841a55.png

将ML代码和部件添加到存储库中

在继续下一章之前&#xff0c;让我们将我们的notebook和文件添加到存储库中。

1eda55c528643d2188a49ce999d24d57.png

每个带有预处理对象和算法的文件都小于100 MB&#xff0c;这是GitHub的文件限制。对于较大的文件&#xff0c;最好使用单独的版本控制系统&#xff0c;如DVC——然而&#xff0c;这是一个更高级的主题。

Django模型

您已经实现了什么:

  • 您已经初始化了默认的Django项目&#xff0c;

  • 您已经训练了两个ML算法并准备好进行推理。

您将在这一章学到什么:

  • 构建Django模型来在数据库中存储关于ML算法和请求的信息&#xff0c;

  • 使用Django REST框架为ML算法编写REST API。

创建Django 模型

为了创建Django模型&#xff0c;我们需要创建一个新的应用程序:

28cd125a68e3f7f6feb2e7dc2c4969b5.png

使用上述命令&#xff0c;我们创建了endpoints应用程序并将其移动到apps目录。我已经添加了apps目录来保持项目的整洁。

d7d62f2ad91a8b206f29e2d5c3363ea1.png

让我们进入apps/endpoints/models.py文件并定义数据库模型(Django提供对象关系映射层(ORM))。

2942348bccc1cab8d322c096581b2f80.png

06d87203eeffc72fdbc57fe0b7d83ca0.png

我们定义了三个模型:

  • Endpoint——保存关于端点的信息&#xff0c;

  • MLAlgorithm——保存服务中使用的ML算法的信息&#xff0c;

  • MLAlgorithmStatus——保存关于ML算法状态的信息。状态可以随时间变化&#xff0c;例如&#xff0c;我们可以将测试设置为初始状态&#xff0c;然后在测试期间切换到生产状态。

  • MLRequest——保存所有到ML算法的请求的信息。监控ML算法和运行A/B测试需要用到它。

我们需要将我们的应用程序添加到backend/server/server/settings.py中的INSTALLED_APPS&#xff0c;它应该是这样的:

77247ef3a724d5d01d06dd460981c758.png

要将我们的模型应用到数据库&#xff0c;我们需要运行迁移:

baa4da05d75d5c1eff98d9320e02f3be.png

上面的命令将在数据库中创建表。默认情况下&#xff0c;Django使用SQLite作为数据库。对于本教程&#xff0c;我们可以保留这个简单的数据库&#xff0c;对于更高级的项目&#xff0c;您可以将Postgres或MySQL设置为数据库(您可以通过在backend/server/server/settings.py中设置DATABASES变量来配置这一点)。

为模型创建REST API

到目前为止&#xff0c;我们已经定义了数据库模型&#xff0c;但是在运行web服务器时我们不会看到任何新内容。我们需要为我们的对象指定REST API。实现此目的的最简单和最干净的方法是使用Django REST框架(DRF)。要安装DRF&#xff0c;我们需要运行:

85b9f7612fdc95af927b213758a44eb7.png

并将其添加到backend/server/server/settings.py中的INSTALLED_APPS:

3edbc3b558e9b9d4167975209b851dff.png

要在浏览器中看到一些东西&#xff0c;我们需要定义:

  • 序列化器——它们将定义数据库对象如何在请求中进行映射&#xff0c;

  • 视图——我们的模型如何在REST API中被访问&#xff0c;

  • url——为我们的模型定义REST API URL地址。

DRF序列化器

请将serializers.py文件添加到server/apps/endpoints目录:

17ac04e1584423520676c63eed46e0aa.png

0cf43051fd8b3ed49830abeeabad4742.png

序列化器将有助于将数据库对象打包和解包成JSON对象。在Endpoints和MLAlgorithm序列化器中&#xff0c;我们定义了所有只读字段。这是因为&#xff0c;我们将只在服务器端创建和修改对象。对于MLAlgorithmStatus&#xff0c;字段 status、 created_by、 created_at 和 parent_mlalgorithm处于读写模式&#xff0c;我们将使用它们通过REST API来设置算法状态。对于MLRequest序列化器&#xff0c;有一个处于读写模式的feedback字段——我们需要它来向服务器提供关于预测的反馈。

MLAlgorithmSerializer比其他的更复杂。它有一个current_status字段&#xff0c;代表MLAlgorithmStatus的最新状态。

视图

要添加视图&#xff0c;请打开backend/server/endpoints/views.py文件并添加以下代码:

cf6689168f80be7b919de58532ab21ec.png

419ce946eb6e8e742c3bfb243b75852e.png

对于每个模型&#xff0c;我们都创建了一个视图&#xff0c;该视图允许检索单个对象或对象列表。我们将不允许通过REST API创建或修改Endpoints、 MLAlgorithms。处理新ML相关对象创建的代码将位于服务器端&#xff0c;我将在下一章中讨论它。

我们将允许通过REST API创建MLAlgorithmStatus对象。我们不允许编辑ML算法的状态&#xff0c;因为我们想要保留所有的状态历史。

我们允许编辑MLRequest对象&#xff0c;但是只有feedback字段(请查看序列化器定义)。

URL

最后一步是添加URL来访问我们的模型。请在backend/server/apps/endpoints中的urls.py文件中添加以下代码:

1dd352f0edcecdc778aee8af1aa05e4f.png

上面的代码将创建到我们数据库模型的REST API路由器。我们的模型将按照以下URL模式被访问:

76e5da8b08b7c6a272caff8ce3bd139d.png

您可能注意到&#xff0c;我们在API地址中包含了v1。这可能在以后的API版本控制中会需要。

我们需要将端点url添加到服务器的主urls.py文件(文件backend/server/server/urls.py):

58c2c3d2de4d66b49c49f02f074fc294.png

运行服务器

我们添加了很多新东西&#xff0c;让我们检查一下它们是否都可以运行。

请运行服务器:

f2716ab6c6651f2782c97e7feeb203d4.png

并在web浏览器中打开http://127.0.0.1:8000/api/v1/。您应该会看到DRF视图(图5)。

66cae6081028c8c518dd9c3f4b56f185.png

图5:默认的Django REST框架视图

DRF提供了很好的接口&#xff0c;因此您可以单击任何URL并检查其对象(例如在http://127.0.0.1:8000/api/v1/endpoints上)。您应该会看到所有对象的空列表&#xff0c;因为我们还没有添加任何东西。我们将在下一章中添加ML算法和端点。

向存储库添加代码

本章的最后一步是向存储库添加新代码。

4b06b7f887bfd65fcfb2a334a0260a1d.png

将ML算法添加到服务器代码中

到目前为止&#xff0c;您已经完成了:

  • 训练两个ML算法&#xff0c;

  • 使用数据库模型和REST API端点创建了Django服务器&#xff0c;这些端点将表示ML端点、模型和请求。

您将在这一章学到什么:

  • 在服务器中创建ML代码&#xff0c;

  • 写ML算法注册表&#xff0c;

  • 向服务器添加ML算法。

服务器中的ML代码

在第3章中&#xff0c;我们创建了两个ML算法(随机森林和极端随机树)。它们是在Jupyter notebook中实现的。现在&#xff0c;我们将在服务器端编写使用以前训练过的算法的代码。在本章中&#xff0c;我们将只在服务器端包含随机森林算法(为了简单起见)。

我们来在 backend/server/apps目录中创建新目录ml来保存所有ML相关的代码&#xff0c;和income_classifier目录来保存我们的输入分类器。

0a8060508413247897579dfce4df2e2f.png

让我们在income_classifier目录中添加新文件random_forest.py和空文件 __init__.py。

我们将在random_forest.py文件中实现ML算法。

9b06ad68effa0354843712e278773fd9.png

fff18ba255adb188037e019efb741189.png

RandomForestClassifier算法有五个方法:

  • __init__ -加载预处理对象和随机森林对象的构造函数(使用Jupyter notebook创建)&#xff0c;

  • preprocessing - 该方法接受输入的JSON数据&#xff0c;将其转换为Pandas DataFrame并对其应用预处理&#xff0c;

  • predict - 该方法会调用ML对准备的数据进行计算预测&#xff0c;

  • postprocessing - 该方法会对预测值应用后处理,

  • compute_prediction - 该方法结合了 preprocessing、 predict 和 postprocessing&#xff0c;并返回带有响应的 JSON 对象。

要在Django中启用我们的代码&#xff0c;我们需要将ml应用程序添加到backend/server/server/settings.py中的INSTALLED_APPS&#xff1a;

aafc4a6c26eeaea8981a063a02f312e0.png

ML代码测试

让我们编写一个测试用例来检查我们的随机森林算法是否按预期工作。为了进行测试&#xff0c;我将使用来自训练数据中的一行&#xff0c;并检查预测是否正确。

请使用以下代码将空的__init__.py和tests.py两个文件添加到ml目录中&#xff1a;

523722b27e8478d9a143e8e4d0260203.png

以上测试是:

  • 构造一个输入JSON数据对象&#xff0c;

  • 初始化ML算法,

  • 计算ML预测并检查预测结果。

要运行Django测试&#xff0c;请运行以下命令:

1b606dc761dafa69969dd64674cf24cd.png

您应该看到1个测试运行了。

738c9e65182ba2a36b126f4093c9e5e6.png

算法注册表

我们已经准备好并测试了ML代码。我们需要将它与服务器代码连接起来。为此&#xff0c;我将创建ML 注册表对象&#xff0c;它将保存有关可用算法和相应端点的信息。

让我们在backend/server/apps/ml/目录中添加registry.py文件。

77a49ca350a0a1e56d2e0d848f4849f6.png

该注册表通过一个算法id到算法对象映射来保存简单的dict对象。

要检查代码是否按预期工作&#xff0c;我们可以在backend/server/apps/ml/tests.py文件中添加测试用例:

fddda4b91e51c2098716915e7880779f.png

这个简单的测试向注册表添加了一个ML算法。运行测试:

a5322e0274e649b1bc201f4d7a9320ec.png

测试输出:

702477239d36dd305a8779438808652e.png

将ML算法添加到注册表

注册表代码已经准备好了&#xff0c;我们需要在服务器代码中指定一个位置&#xff0c;在服务器启动时将ML算法添加到注册表中。最好的地方是backend/server/server/wsgi.py文件。请在该文件中设置以下代码:

51b5da92d369a8177f393fbe158a54b4.png

使用以下命令启动服务器后:

58b0e6c2c1ce9ef65d489c72dc670935.png

您可以在浏览器中检查端点和ML算法。在URL:http://127.0.0.1:8000/api/v1/endpoints&#xff0c;您可以检查端点(图6)&#xff0c;而在http://127.0.0.1:8000/api/v1/mlalgorithms&#xff0c;您可以检查算法(图7)。

7e5427618088f09528af10a1ab59967e.png

图6:服务中定义的端点列表

c08fb8e4e03fcbedb48d992511f58f80.png

图7:服务中定义的ML算法列表

向存储库添加代码

我们需要向存储库提交新代码。

c0c660e7c11156e0e13dc17d90528a3f.png

接下来是什么?

我们已经将ML算法存储在数据库中&#xff0c;我们可以使用REST API访问关于它的信息&#xff0c;但是如何进行预测呢?这将是下一章的主题。

进行预测

您已经学习了什么:

  • 您已经在Jupyter notebook中创建了两个ML算法&#xff0c;

  • 您已经创建了带有数据库模型和REST API的Django应用程序&#xff0c;

  • 您已经将ML代码添加到服务器代码并创建了一个ML注册表。

您将在这一章学到什么:

  • 您将添加一个视图来处理服务器中的请求并将其转发到ML代码&#xff0c;

  • 您将向视图添加API URL&#xff0c;

  • 您将为预测编写测试。

英文原文&#xff1a;https://www.deploymachinelearning.com/ 
译者&#xff1a;浣熊君( &#xff65;᷄৺&#xff65;᷅ )

bfe59429f8b77c7dc29990d09ba1d9ab.png



推荐阅读
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • C++语言入门:数组的基本知识和应用领域
    本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
author-avatar
幸福天使之宝贝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有