TowardsDataScience 博客中文翻译 2020(一百七十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

在 PyTorch 中构建一个超级简单的 GAN

原文:https://towardsdatascience.com/build-a-super-simple-gan-in-pytorch-54ba349920e4?source=collection_archive---------1-----------------------

GANs 看起来很可怕,但是它的思想和基本实现非常简单,就像 50 行代码一样简单。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

美国农业部果树水彩画集上接受训练的甘的植物学绘画。

介绍

生成敌对网络(GANs)是一个模型框架,其中两个模型一起训练:一个学习从与训练集相同的分布中生成合成数据,另一个学习从生成的数据中区分真实数据。当我第一次了解它们的时候,我记得当时对如何构建联合训练有点不知所措。我还没有看到专注于构建一个简单的 GAN 的教程,所以我将在这里尝试这样做。没有图像生成,没有花哨的油炸 conv 网。我们将训练一个能够学习用大约 50 行 Python 代码生成偶数的模型。这个项目的所有代码都可以在 github 库这里找到。

什么是甘?

GANs 由两个训练一致的模型组成。第一个模型是生成器,它接收一些随机输入,并试图输出一些看起来像我们的训练数据的东西。第二个模型是鉴别器,它接收训练数据和生成的数据,并试图将假生成的数据与真实的训练数据区分开。这个框架的有趣之处在于,这些模型是一起训练的。随着鉴别器在识别假图像方面变得更好,这种学习被传递给生成器,并且生成器在生成假图像方面变得更好。用一个比喻来说,生产者对于鉴别者就像伪造者对于 FBI 调查员一样。一个试图伪造数据,另一个试图区分伪造和真实交易。

这个框架在过去几年里产生了大量超级有趣的结果,从把马翻译成斑马,到制作深度赝品,再到想象全新的图像。在本教程中,我们不会做任何有趣的事情,但这应该给你所有的背景知识,你需要从零开始,成功地实现自己的 GAN:)。让我们开始吧。

问题定义

假设我们有一个 0 到 128 之间所有偶数的数据集。这是一个更大的数据分布的子集,整数,具有一些特定的属性,就像人脸是所有生物图像的子集一样。我们的生成器将接受相同范围内的整数形式的随机噪声,并学习只产生偶数。

在进入实际模型之前,让我们先建立数据集。我们将把每个整数表示为无符号的 7 位二进制表示。所以数字 56 是 0111000。我们这样做是因为:

  1. 将二进制向量传递给机器学习算法是非常自然的,在这种情况下,是神经网络。
  2. 通过查看最低位,很容易看出模型是否生成偶数。如果是 1,数字是奇数,如果是 0,数字是偶数。

首先,让我们写一个函数,将任意正整数转换成二进制形式的列表。

将正整数转换为二进制列表

有了这个,我们就可以创建一个函数,它会动态地为我们生成随机的训练数据。

生成 GAN 训练数据的功能。

这个函数将产生两个输出,第一个是一个列表,表示这个数据是偶数,来自我们的真实分布。第二个输出是二进制列表形式的随机偶数。这就是我们开始构建和训练模型所需的全部内容!

构建生成器和鉴别器

发电机

构建生成器和鉴别器非常简单!让我们从发电机开始。我们需要一些能够映射随机七位二进制输入到七位二进制输入是偶数。这里最简单的可能是一个七层神经元。

发电机架构

如果我们要构建一个 GAN 来处理一些更复杂的事情,比如图像,我们可能会使用从正态分布中生成的随机噪声来训练它,并逐渐对它进行上采样和整形,直到它与我们试图复制的数据大小相同。由于我们的示例非常简单,所以具有逻辑(sigmoid)激活的单个线性层应该足以将 7 个位置的 1 和 0 映射到其他 7 个位置的 1 和 0。

鉴别器

鉴别器不比发生器复杂。这里我们需要一个模型来接受一个七位数的二进制输入和输出,无论它是否来自我们的真实数据分布(是偶数)或不是(是奇数或不是数字)。为了实现这一点,我们使用具有逻辑激活(Sigmoid)的单神经元模型(逻辑回归)。

就这样,我们已经建立了两个模型,我们将一起训练。现在是甘训练中最棘手的部分。我们需要将这些模型连接起来,以正确传播梯度。

训练模型

训练 gan 一开始看起来有点混乱,因为我们需要用每一点输入来更新两个模型,并且我们需要小心我们是如何做的。因此,为了分解它,我们在每个训练步骤向我们的模型传递两批数据。一批是随机噪声,这将导致生成器创建一些生成的数据,第二批仅由来自真实分布的数据组成。在整个培训描述中,我将引用下面最终培训代码要点中的行号,而不是 Github 存储库。

最终培训代码

训练发电机

让我们从训练发电机开始。这包括:

  1. 制造随机噪音。(第 27 行)
  2. 通过将噪声传递给生成器来生成新的“假”数据(第 28 行)
  3. 从鉴别器获得对“假”数据的预测(第 38 行)
  4. 使用标签计算鉴频器输出的损失,就好像数据是“真实的”而不是假的。(第 39 行)
  5. 仅通过生成器反向传播错误。(第 40–41 行)

请注意,在第四步中,我们如何使用真标签而不是假标签来计算损失。这是因为我们正在训练发电机。发生器应该试图欺骗鉴别器,因此当鉴别器出错并说产生的输出是真实的(预测 1)时,梯度应该小,当鉴别器正确动作并预测产生输出(预测 0)时,梯度应该大。这就是为什么我们在这一步只通过生成器传播梯度,因为我们颠倒了标签。如果我们像这样训练整个模型,要么生成器会学到错误的东西,要么鉴别器会。

训练鉴别器

现在是时候更新我们的鉴别器中的权重了。我们分几步完成:

  1. 传入一批来自真实数据集中的数据,这些数据带有一个全 1 标签的向量。(第 44–46 行)
  2. 将我们生成的数据传入鉴别器,带有分离的权重和零标签。(第 49–50 行)
  3. 平均第一步和第二步的损失。(第 51 行)
  4. 通过鉴别器反向传播梯度。(第 52–53 行)

鉴别器正在努力学习区分真实数据和“假”生成的数据。训练鉴别器时的标签需要代表这一点,即当我们的数据来自真实数据集时为 1,当它由我们的生成器生成时为 0。我们在上面的步骤(1)和(2)中传递这两个批次,然后平均这两个批次的损耗。重要的是要注意,当传入生成的数据时,我们希望分离梯度。我们这样做是因为我们不是在训练生成器,我们只是在关注鉴别器。一旦所有这些都完成了,我们只在鉴别器中反向传播梯度,我们就完成了。

包扎

就是这样!我们已经建立了完整的 GAN。在训练循环中,每一步都进行梯度归零,这样我们就可以开始了。如果我们在不同的训练步骤中查看生成器的输出,我们可以看到它收敛到只创建偶数,这正是我们想要的!

0   : [47, 3, 35, 1, 16, 56, 39, 16, 3, 1]
50  : [2, 35, 34, 34, 38, 2, 34, 43, 3, 43]
100 : [42, 43, 106, 38, 35, 42, 35, 42, 43, 106]
200 : [108, 106, 106, 42, 106, 42, 106, 106, 42, 96]

在步骤 0,我们的样本中有 7/10 是奇数,而在步骤 200,我们的样本中有 10/10 是偶数!这是一个成功的生成器,它只用了大约 50 行真正的 Python 代码!

接下来呢?

正如您可能已经猜到的,还有其他一些技巧来训练生成非平凡输出的 GAN。如果您想让该模型在图像等真实数据上工作,可以立即尝试以下方法:

  1. 生成器可能需要更深一点,并将噪声放大到真实数据的大小。您可以使用转置卷积或上采样层来实现这一点。
  2. 将发生器的噪声输入更改为高斯型
  3. 增加鉴别器的深度,使其预测能力更强。
  4. 训练更长的时间,并监测损失。

作为一个好的下一步,尝试并实现 DCGAN 架构。这个代码会帮你完成 90%的任务。一旦你这样做了,并制作了一些像介绍中那样有趣的图像,试着通过调整超参数来改进它们。在训练真正的甘人时,可以在这里找到一份不错的清单。

如何使用 IBM Watson NLC 服务构建文本分类器

原文:https://towardsdatascience.com/build-a-text-classification-model-using-watson-autoai-3650c461642?source=collection_archive---------22-----------------------

使用 Watson Studio 训练文本分类器,无需编码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由罗曼·维涅斯拍摄

文本分类

文本分类是属于数据科学和机器学习的另一项任务,我们为每个文档/句子/推文分配一个或多个类别或类别(用相关类别标记自然语言文本)。例如,将这句话“**莱昂内尔·梅西在世界足球奖中获得年度最佳球员”归类为“体育”**陈述。

构建模型

我们将构建一个分类器,将 StackOverflow 问题分类到前 20 个标签之一。使用的数据可在 BigQuery 上获得,或者您可以点击此处下载。该数据包含带有单个标签的 StackOverflow 帖子。每个标签有 2000 个帖子,所以总共有 40,000 个帖子。

首先,您需要创建一个项目:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择项目后,应该会出现一个类似的视图。点击*“添加到项目”*按钮开始我们的旅程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 AutoAI 可以建立许多不同的模型。要构建文本分类器,点击*“自然语言分类器”*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练分类器需要服务。如果您是第一次使用,请点击*【此处】*获取一个。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择一个计划。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果是第一次,选择默认设置,点击*“确认”*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

否则,您将被重定向到一个页面,在那里您可以选择您的服务之一

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是主页面,点击右上角的*【浏览】*上传您的文件。在左侧,将出现您所有标签和帖子的列表。允许你编辑文章,添加,删除,重命名等等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当你点击*“火车模型”时,魔法就开始了。*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

培训阶段结束后,您应该会收到通知。点击*【此处】*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您将被重定向到一个新页面,该页面包含三个选项卡:概述、测试、实施

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击“测试”来测试模型。写一句话,点击*“分类”。*您可以更改阈值以获得特定概率的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,点击*“Implementation”*,您将获得如何向模型发送推理请求的说明。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

感谢阅读。如果您有任何问题,请告诉我!

资源

为冠状病毒更新构建一个 Twitter 机器人

原文:https://towardsdatascience.com/build-a-twitter-bot-for-coronavirus-update-8cfec4314b0d?source=collection_archive---------29-----------------------

在本文中,我们将学习如何使用 Python 和 Tweepy 构建一个 twitter 机器人来发布冠状病毒的统计数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由于切尔·莫兰Unsplash 上拍摄

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

Twitter 提供了一个 API ,用户可以通过它与平台进行交互。Tweepy 是一个 python 库,它提供了一种方便访问 twitter API 的方法。它是底层 API 的高级包装器。

如果想直接上码,点这里

装置

我们将在这个项目中使用 Python 3。我们首先需要的是 tweepy。让我们使用 pip 安装它。

pip install tweepy

Linux 和 Mac 用户可能必须使用 pip3,而不是 Python 2 使用的 pip

Twitter API

为了访问 twitter API,我们需要有一个 twitter 帐户。如果还没有,就创建一个吧。为了使用 API,请确保您已经验证了您的电子邮件和电话号码。

然后转到开发者页面并点击左上角的应用或直接转到应用页面。然后点击“申请开发者账号”。根据您的需要选择适当的选项,然后单击“下一步”回答问题。Twitter 会询问一些基本信息,比如你将如何使用 API,你来自哪个国家,等等。一旦一切都完成了,你可能要等一两天才能得到验证。

验证完成后,转到应用页面并创建一个应用。为您的应用程序命名(确保它是唯一的),添加描述和网站 url。在底部,你必须详细描述你将如何使用该应用程序。然后按创建。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Twitter 应用程序

一旦你进入如图所示的应用程序页面。转到“密钥和令牌”。生成访问令牌和访问令牌密码。显示密钥时,将密钥复制到某个文本文件中。

现在创建一个文件 config.py 并添加所有 4 个键,如下所示。

配置. py

现在,在 config.py 所在的同一个文件夹中创建另一个文件 twitter_bot.py,并添加以下代码。

twitter_bot.py

现在使用命令运行该文件

python twitter_bot.py

代码非常简单。我们正在导入 tweepy 库和所有需要的键。然后我们通过传递我们的键来创建一个 api 对象。如果成功,将打印“认证成功”,否则将打印“认证 API 时出错”。我希望你得到正确的认证。去看看你的推特账户,你会看到一条推文。

收集冠状病毒统计数据

我发现了 https://www.worldometers.info/coronavirus/的这个网站,上面显示了受影响、死亡和康复的总人数。我们将从该页面抓取数据,创建一条推文,并从我们的帐户发布。

让我们安装请求和 lxml 库。

pip install requests lxml

requests 用于向 web 页面发送 HTTP 请求,lxml 用于使用 Xpath 解析返回的 HTML 内容。如果您不熟悉 Xpath,我将链接下面的一些资源来了解更多。顺便说一下,你也可以使用 BeautifulSoup 来解析 HTML 而不是 lxml。

所有这些依赖项都在 github repo 的 requirements.txt 文件中。您可以使用以下命令一次性安装所有程序

pip install -r requirements.txt

打开 https://www.worldometers.info/coronavirus/的,右键点击“冠状病毒病例”正下方的数字,点击检查

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

检查 HTML

数据位于 span 标记中,该标记位于具有 maincounter-number 类的 div 中。如果你检查死亡和恢复部分,你会看到结构是相同的。让我们打开 python 外壳,看看是否能得到数据。在您的 cmd/终端中,键入 python。

>>> import requests
>>> from lxml import html
>>> response = requests.get('[https://www.worldometers.info/coronavirus/'](https://www.worldometers.info/coronavirus/'))
>>> doc = html.fromstring(response.content)
>>> doc.xpath('//div[[@class](http://twitter.com/class)="maincounter-number"]/span/text()')
['805,377 ', '39,469', '172,436']

这里,我们向目标页面发送请求,并解析返回的 HTML。如果你看最后一行,xpath 是不言自明的。它说,找到所有带有类 maincounter-number 的 div,并提取该 div 中 span 元素的文本。这里我们有 3 个匹配的元素,因此打印了 3 个值。

现在我们可以在脚本中实现相同的逻辑。打开 twitter_bot.py,创建一个名为 create_tweet() 的函数,并在 import 语句的正下方添加抓取代码。

我们正在使用 Python 的 f 字符串创建一条推文。我添加了一些相关的标签,但是你可以根据自己的需要随意设置推特的格式。不要忘了给世界计程仪积分。

添加完所有内容后,我们的最终代码应该是这样的。

现在从终端/cmd 运行您的代码。

python twitter_bot.py

然后检查你的推特账户,你会看到一条这样的推文

通过 visualizenoworg 发布推文

如果你想在脚本中添加更多的功能,比如每隔 X 分钟从一个无限循环中发出 tweet。或者安排这个脚本每隔 Y 分钟从 cron 运行一次。你可以创建一个完全不同的机器人,从你的账户发布最新消息。可能性是无限的。还要确保检查速率限制

Twitter API 允许你与应用程序交互,收集数据,分析推文等等。要了解更多信息,你可以查看 twitter 的官方文档。

资源

  1. 官方文件:https://developer.twitter.com/en/docs
  2. 十二份文件:http://docs.tweepy.org/en/latest/
  3. Xpath 教程:https://docs . scrapy . org/en/XPath-tutorial/topics/XPath-tutorial . html
  4. 另一个推特机器人:https://realpython.com/twitter-bot-python-tweepy/
  5. 代码:https://github.com/sagunsh/corona_twitter_bot

在 5 分钟内制作一个声控鼠标

原文:https://towardsdatascience.com/build-a-voice-controlled-mouse-keyboard-in-5-minutes-952bc8f101fc?source=collection_archive---------19-----------------------

Python 中语音识别和 GUI 自动化的初学者指南

在这个故事中,我们将使用 Python 构建一个应用程序,它将接受来自用户的语音命令,并使用鼠标和键盘执行某些基于 GUI 的操作。你可以把它想象成你自己的语音数字助理。它可以播放媒体,打开应用程序,发送电子邮件,移动鼠标指针等等,所有这些都由你的语音命令触发。我们将通过使用以下两个 python 库来完成—&Speech _ Recognition。你只需要一台安装了 Python 的笔记本电脑和一个麦克风。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Marek LevákUnsplash 拍摄的照片

在详细介绍如何在本演示中使用上述工具之前,让我们看看它们是如何适应我们的应用程序设计的。

下图非常简单明了。用户将语音命令输入麦克风(内置或外置),然后使用语音识别模块将其转换为相应的文本。然后,转换后的文本被映射到使用 PyAutoGUI 模块执行的某些 GUI 动作(鼠标/键盘事件)。为了方便起见,我画了下图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

端到端流程的流程图

让我们更详细地看看这两个库!

1。演讲人认可:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由freestocks.org派克斯拍摄

语音识别特征在家庭自动化系统、语言学习、数字助理等领域具有各种应用。使用这个库,我们可以把我们的讲话转换成文本。它支持几种 API(在线和离线)。在我们的例子中,我们将使用在线 google API。您可能会注意到在语音到文本的转换过程中有时会有一些延迟,但是,在这个模块支持的其他 API 中,我发现 Google API 在我的情况下是最准确的。可以使用以下 pip 命令下载它。使用麦克风需要 pyaudio。

*pip install SpeechRecognition
pip install pyaudio*

在下面的代码片段中,我们正在初始化 recognizer 对象,监听来自麦克风的输入语音,并使用“recognize_google”函数将其转换为文本。我们只在用粗体字母标记的行中做了所有这些。对 recognizer . adjust _ for _ ambient _ noise()函数的调用是可选的。该功能监听输入声音,并根据房间内的噪音量改变 energy_threshold 值。它可以被认为是识别器灵敏度的度量。该值取决于环境噪声,较高的值通常意味着不太敏感。该参数的范围可以是 50–4000 之间的任何值。**

****import speech_recognition****recognizer = speech_recognition.Recognizer()****with speech_recognition.Microphone() as src:**
    try:
        **audio = recognizer.adjust_for_ambient_noise(src)**
        print("Threshold Value After calibration:" + str(recognizer.energy_threshold))
        print("Please speak:")
        **audio = recognizer.listen(src)**
        **speech_to_txt = recognizer.recognize_google(audio)**.lower()
        print(speech_to_txt)
    except Exception as ex:
        print("Sorry. Could not understand.")**

比方说,代替麦克风,您的输入是一个音频文件(file.wav),行号 3 可以替换如下:

**with speech_recognition.WavFile("file.wav") as src:**

2.PyAutoGUI:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由凯特琳·贝克Unsplash 上拍摄

Python 为 GUI 自动化提供了一个名为PyAutoGUI的库,可以模拟鼠标点击和按键,就像人类用户正在执行它们一样。例如,模拟鼠标移动,击键,截屏,最大化窗口,有很多事情可以做。完整列表可以参考 官方文档链接 。为了这个演示的目的,我使用了像鼠标移动、鼠标点击、键盘按压&在屏幕上查找图像这样的功能。

**pip install PyAutoGUI**

****鼠标控制:要在屏幕上移动鼠标光标,我们需要(x,y)坐标。将显示器想象成一个具有 x,y 坐标的二维平面(如此处所示),其中左上角是(0,0)。向右移动,x 的值增加,而向底部移动,y 的值增加。函数的作用是:返回屏幕的尺寸。

您可以检查您的屏幕尺寸,如下所示:

**>>> import pyautogui
>>> pyautogui.size()
Size(width=1920, height=1080)**

下面的命令将鼠标指针从当前位置移动到(100,100)位置,需要 0.25 秒。下一个命令模拟双击,两次单击之间的间隔为 0.25 秒。

**pyautogui.**moveRel**(100, 100, duration=0.25)
pyautogui.**click**(button='left', clicks=2, interval=0.25)**

****键盘控制:为了模拟按键,使用了以下函数。它按下多媒体“静音”按钮。所有支持的键的完整列表可以在这里找到。

**pyautogui.**typewrite**(['volumemute'])**

****定位功能:有时我们并不知道想要点击的点(比如一个按钮)的(x,y)坐标。但是如果我们将按钮的图片存储为图像文件,pyautogui.locateOnScreen()函数可以逐个像素地查找该图像并返回坐标。关于 locateOnScreen()特性需要注意的一点是,即使单个像素不匹配,它也无法检测图像并返回一个 None 对象。然后,我们可以简单地将鼠标移动到给定的位置并执行单击。例如:-我把 Chrome 应用程序固定在我的 windows 电脑的任务栏上。我已经采取了图标截图(Chrome.PNG)如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的 Windows 任务栏中 Chrome 图标的屏幕截图

现在,locateOnScreen()函数的用法如下

**icon_location = **pyautogui.locateOnScreen**(r'screenshots\Chrome.PNG')
print(icon_location)
>>> Box(left=446, top=1023, width=74, height=52)#Using the left & top values as x & y to click at that location
**pyautogui.click(x=446, y=1023, duration=0.25)****

我们只需要知道这些。现在,剩下的唯一事情就是将文本映射到 GUI 动作。这是我选择的贴图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的命令的屏幕截图

我附上了最终应用的演示视频和代码上传 这里 供参考。

功能演示

如果您碰巧阅读了我以前的一篇关于使用神经网络 进行手势识别的文章,我打算添加 PyAutoGUI 功能作为补充部分,以便根据预测的手势采取行动,这些动作基于这里 PyAutoGUI 部分讨论的相同原则。

结论

在这个演示中,我们看到了如何使用语音识别库将语音转换为文本,以及如何使用 PyAutoGUI 实现 GUI 自动化。通过结合这两种功能,我们建立了一个语音控制鼠标和键盘的基本版本。我希望您发现这些信息很有用,并以自己的方式使用它们。

** [## 面向初学者的 10 行人脸检测

使用 Python OpenCV 在图像和视频中检测人脸的介绍。

towardsdatascience.com](/face-detection-in-10-lines-for-beginners-1787aa1d9127) [## 绝对初学者的神经网络

用简单的英语介绍感知器

medium.com](https://medium.com/swlh/artificial-neural-networks-for-absolute-beginners-a75bc1522e1d)

参考文献:

[1] PyAutoGUI CheatSheet,【https://pyautogui.readthedocs.io/en/latest/quickstart.html

[2]语音识别 Python,【https://pypi.org/project/SpeechRecognition/ **

使用 PyTorch 和 Flask 构建预测苹果叶部病害的 Web 应用程序

原文:https://towardsdatascience.com/build-a-web-application-for-predicting-apple-leaf-diseases-using-pytorch-and-flask-413f9fa9276a?source=collection_archive---------34-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由约瑟夫芬Unsplash 上拍摄

使用预先训练的模型(VGG-16、雷斯网-18 和 AlexNet 架构)构建图像分类器 web 应用。

深度学习是处理非结构化数据的一个很好的模型,尤其是在图像上。这个领域的进展真的很快,其中一个进展就是一个叫迁移学习的东西。

迁移学习是一种训练已经在不同数据集上训练过的神经网络的方法,所以我们不必从头开始训练它,因为训练它们可能需要几天或几周的时间。

如果我们对我们的数据集使用迁移学习,只需要几个小时的训练,因为我们只训练最后一层。因此,我们可以使用它在其他数据集上训练已经预先训练好的模型及其给定的架构。

为了使模型有用,我们必须部署它们,例如通过构建一个 web 应用程序,使其对用户更加友好。幸运的是,我们可以使用 PyTorch 来构建深度学习模型,使用 Flask 来构建 web 应用程序。

在本文中,我将向您展示如何构建一个 web 应用程序来对苹果叶子进行图像分类,以分类它是否健康,如果不健康,叶子患了什么病。为此,我们可以使用 PyTorch 进行迁移学习,以及如何使用 Flask 构建一个简单的 web 应用程序。这是 web 应用程序的预览,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大纲

我们要做的第一件事是建立一个图像分类器。它由几个步骤组成,它们是:

  • 下载数据,
  • 准备数据,
  • 建立模型,
  • 测试模型,
  • 保存模型。

分析

检索数据

对于数据集,我们可以使用 PlantVillage 数据集来检索我们要使用的数据集。你可以从这个 GitHub 库这里下载数据集。

准备数据

下载完数据后,我们可以先准备数据集。首先,我们必须将数据集组织到单独的文件夹中。

如果我们看到我们已经下载的数据集,我们可以看到有这么多来自不同植物的图像。在这种情况下,我们只选择与苹果相关的植物。

所以,我们把包含苹果叶子图片的文件夹带过去。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我们将每个文件夹分成 3 个不同的文件夹,它们是 train、val 和 test。然后,我们将每组数据分成 80%用于训练数据(以 90:10 的比例将它们分成训练和验证数据)和 20%用于测试数据。每个文件夹的数量看起来像这样,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,该文件夹的结构将如下所示,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有了如上的文件夹结构后,我们就可以建立图像分类的模型了。在我们构建之前,我们必须导入数据集,我们还必须转换数据,以便它具有进入模型的相同表示。代码看起来会像这样,

正如我们在上面看到的,关于如何准备数据集有几个步骤。首先,我们必须转换数据集。这是必须的,因为模型无法处理没有所需大小的数据。因此,我们必须调整它的大小,并且用与模型的第一层相同的维度裁剪数据集。

然后,在我们转换图像之后,我们可以使用 ImageFolder 方法将其加载到我们的代码中。此外,我们将对数据集的转换应用于它。我们可以通过使用所有的训练数据集来训练模型,但这将花费很多时间。因此,我们必须创建批处理来减少计算时间。为了确保批次是随机的,我们必须将 shuffle 参数设置为 true。

最后,我们检索图像的数量和类名,还可以使用 torch.device 函数启用 GPU。完成所有步骤后,我们可以进入建模部分。

建立模型

因为我们是基于预先训练好的模型来构建模型的,所以我们要做的第一件事就是下载模型。在这种情况下,我只使用 VGG-16、ResNet-18 和 AlexNet 架构,然后我们比较哪个模型是最好的,并确保您将预训练参数设置为真。

因为我们使用它,所以我们必须设置参数,以便除了完全连接的最后一层之外,不计算梯度。然后,我们可以根据数据集上类的数量来改变最终层的输出神经元。然后,我们可以训练这个模型。

这是代码,

请确保您知道最终层的位置,因为每个模型都有不同的方法来访问它。使用 ResNet,我们可以访问 fc 索引来访问最终层,但在 VGG 和 AlexNet 上,我们通过索引分类器和索引号 6 来访问它。

通过在块代码上调用它,您可以看到每个模型的轮廓,这是代码和输出,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当我们训练模型时,它发生在几个时期。时期描述了训练模型的迭代次数。在每个时期,有几个步骤来训练模型。首先,模型前馈图像,并获得最佳输出。然后,它比较输出和真实标签,并计算损失。然后,它计算每个参数的梯度,然后根据模型的梯度更新每个权重。它不断重复,直到到达最后一个纪元,我们将从所有纪元中获得最佳模型。

这是每个型号的最佳结果,

**""" 
For VGG-16, 
Training complete in 27m 4s 
Best val Acc: 0.964706** **For ResNet-18, 
Training complete in 10m 7s 
Best val Acc: 0.968627** **For AlexNet, 
Training complete in 7m 40s 
Best val Acc: 0.976471 
"""**

要确定使用哪种模型,我们必须根据我们的需求来考虑。当然,我们需要一个非常精确的模型。但是如果我们想要部署到 web 应用程序,请确保您的模型具有较小的尺寸,以便我们可以在 GitHub 和 Heroku 上部署它。

基于这些结果,我们得出结论,AlexNet 是在 7 分 40 秒内对苹果上的疾病进行分类的最好和最快的模型。此外,我们可以看到,VGG-16 模型是最慢和最低的准确性得分。ResNet-18 位于中间位置。它不比 AlexNet 慢,而且它的精确度也比 VGG-16 高。但是,当我们部署这些型号时,ResNet-18 的尺寸最小。因此,我们将使用 ResNet-18 模型作为我们的分类器。

测试模型

如果要测试模型,可以在测试数据集上调用 dataloader 来测试模型是否能准确预测图像。代码看起来会像这样,

在那之后,我们得到了这样的输出,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**""" 
GroundTruth:  Cedar Apple Rust, Healthy, Black Rot, Healthy Predicted:  Cedar Apple Rust, Healthy, Black Rot, Healthy
"""**

保存模型

所以,如果我们对我们的新模型有信心,我们可以挽救它。为此,我们可以使用下面的代码,

**# Save The Model** 
PATH = ‘./fix_resnet18.pth’ 
torch.save(model_resnet.state_dict(), PATH)

它会将您的模型保存到。pth 格式。如果我们想在另一个会话中使用它,我们可以使用这个命令,

这就是如何使用 PyTorch 构建图像分类器!

构建 Web 应用程序

在我们创建模型之后,我们可以使用 Flask 构建 web 应用程序。总的来说,我们将做两件事。他们在服务器上工作,并创建页面来显示它。

构建服务器(app.py)

首先,我们要构建一个名为 app.py 的文件。它将处理网站,它包括显示页面,也将处理输入。在这种情况下,我们有一个图像输入。里面的代码看起来像这样,

让我解释它的每一行。第 1–8 行导入了我们需要的库,包括 Flask、PyTorch、string 等等。第 10 行声明了一个 Flask 对象。第 12–36 行使用 PyTorch 完成建模任务。第 38–43 行声明了一个显示预测结果的字典。第 46–58 行是我们 web 应用程序的主要流程。第 60–61 行使用下面的命令来确保我们的应用程序能够运行,

python app.py

你们中的一些人可能是第一次接触烧瓶。让我向你解释它是如何工作的。第 46 行是在网站上设置我们的路线。在这种情况下,在我们的网站上,如果我们想要显示主页面,我们将像 http://127.0.0.1:5000/ 一样转到那个根,在那里 URL 的最后一个字符描述了我们的路线。

里面还描述了 GET 和 POST 方法。它们描述了我们如何与网站互动。如果我们使用 GET 方法,我们只向服务器发出请求,不向那里发送任何文件。POST 方法将文件发送到服务器,并向服务器请求结果。

在第 47 行,它声明了一个名为 upload_file 的函数。它将对我们的数据起作用。如果我们首先打开 web,它将只使用 GET 方法来检索 web 页面。之后,我们给一个图像输入,然后上传它们。因为我们上传了数据,所以它将使用 POST 方法来处理我们的数据,从而预测叶子图像上存在的疾病。完成后,我们会收到一个新的页面,上面显示了叶子的疾病和描述。

构建页面

现在,我们创建描述主页和预测结果页面的网页。我们创建了三个文件,它们是 layout.html、index.html 和 result.html。等等,我们创建了两个页面,但是为什么还要创建另一个页面呢?

Flask 上有个概念叫模板。简而言之,我们不需要建立一个完整的网页。相反,我们构建附加页面作为所有页面的布局,所以我们不必为它编写完整的 HTML 代码。让我给你看看 layout.html 的档案,

正如我们所看到的,除了 body 标签中有一个{% block content %}命令之外,该网页没有任何内容。它被称为块,它将包含来自另一个文件的元素。让我给你看一下索引和结果页面,

从这两个文件中我们可以看到,我们没有对整个网页进行编码。相反,我们调用{% extends “layout.html” %}作为网站的模板。在它的下面,有块部分来填充它。这就是为什么我们不必从头开始构建,这使得我们的时间比以前更短。

在我们构建好代码并运行命令后,我们可以去 http://127.0.0.1:5000/ ,它会在网站上显示页面,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终想法

迁移学习是一个有用的概念,可以实现我们自己的分类器,而无需从头开始训练它们。在本文中,我已经向您展示了我们如何在 PyTorch 上使用迁移学习的概念来构建不同的架构。此外,我已经向您展示了如何使用 Flask 构建 web 应用程序。确保您的模型不会消耗大量的存储空间,但仍然具有很高的准确性,这样您就可以毫无问题地部署模型。

希望对你有用,感谢你看我的文章。想看代码可以看我的 GitHub repo 这里

使用 Python 在几分钟内构建一个 web 数据仪表板

原文:https://towardsdatascience.com/build-a-web-data-dashboard-in-just-minutes-with-python-d722076aee2b?source=collection_archive---------0-----------------------

通过 Plotly Dash 将您的数据可视化转换为基于 web 的仪表板,以指数方式提高功能和可访问性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只用几行 Python 代码就能构建一个 web 数据仪表板

我不知道你是怎么想的,但我偶尔会发现不得不编写代码有点令人生畏。当我在构建类似于 web 开发的东西,而不是做一些本地数据分析和可视化时,更是如此。我是一个有能力的 Python 程序员,但是我根本不会称自己为 web 开发人员,即使我已经涉猎了 Django 和 Flask。

尽管如此,将您的数据输出转换为 web 应用程序会为您的项目带来一些不小的改进。

在 web 应用程序中嵌入真正的、强大的交互性要容易得多。这也意味着您可以准确控制数据的呈现方式,因为 web 应用程序可以成为事实上的报告以及数据的访问点。最后,也是最重要的,您可以指数级扩展对输出的可访问性;让它们随时随地可用。用户手边总有一个网络浏览器。

因此,我咬紧牙关,最近开始在我的一些数据项目中这样做,速度和效率惊人地快。我只用了几个小时就把这篇文章的一个输出转换成了一个 web 应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的 NBA 分析网络应用(链接)

我认为这很酷,并想分享这是如何在短短几行代码中实现的。

和往常一样,我包括了你复制我的步骤所需要的一切(数据和代码),这篇文章并不是真的关于篮球。因此,如果您对它不熟悉,请不要担心,让我们开始吧。

在开始之前

数据

我把代码和数据放在我的 GitLab repo 这里 ( dash_simple_nba 目录)。所以请随意使用它/改进它。

包装

我假设您熟悉 python。即使你相对较新,这个教程也不应该太难。

你需要pandasplotlydash。用一个简单的pip install [PACKAGE_NAME]安装每一个(在你的虚拟环境中)。

前情提要。

在本教程中,我将简单地跳过创建我们观想的本地版本的大部分步骤。如果你对正在发生的事情感兴趣,看看这篇文章:

[## 创建有效的比例数据可视化

在各种数据集规模下,查看个体对整体的贡献以及随时间变化的最佳方式—(包括…

towardsdatascience.com](/create-effective-data-visualizations-of-proportions-94b69ad34410)

不过,我们将有一个回顾会议,因此您可以看到使用Plotly在本地绘制图表之间发生了什么,以及如何使用Plotly Dash将其移植到 web 应用程序。

加载数据

我对数据进行了预处理,并将其保存为 CSV 文件。这是当前 NBA 赛季(截至 2020 年 2 月 26 日)的球员数据集合,其中显示:

  • 他们在自己球队的投篮命中率是多少,以及
  • 他们做这件事的效率/效果如何。

对于这部分,请在我的回购中打开 local_plot.py

用以下内容加载数据:

all_teams_df = pd.read_csv(‘srcdata/shot_dist_compiled_data_2019_20.csv’)

all_teams_df.head()检查数据,你应该看到:

每个球员的数据都是针对比赛的每一分钟(不包括加时赛)进行汇编的,统计数据pl_accpl_pps是唯一的例外,因为它们是针对比赛的每一个季度(每 12 分钟)进行汇编的。

这个数据框架包含了所有的 NBA 球员,所以让我们通过过滤一个球队来把它分解成一个可管理的大小。例如,新奥尔良鹈鹕队的球员可以选择:

all_teams_df[all_teams_df.group == 'NOP']

然后,我们的数据可以可视化,如下图所示:

import plotly.express as px
fig = px.scatter(all_teams_df[all_teams_df.group == 'NOP'], x='min_mid', y='player', size='shots_freq', color='pl_pps')
fig.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新奥尔良鹈鹕队的可视化球员数据

冒着这样做的风险:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如何画一匹马— Van Oktop ( Tweet )

我确实在我的图表中添加了一些小细节,以产生相同图表的这个版本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相同的图表,添加了一些“小细节”(&不同的团队)。

这是我用来做这件事的代码。

现在,虽然有很多格式化代码,但我认为向您展示我是如何做的是有用的,因为我们将在代码的 Dash 版本中重用这些函数。

现在,让我们进入主题——如何从这些情节中创建一个 web 应用程序。

进入万维网

你可以在这里阅读更多关于 Plotly Dash 的内容,但现在你只需要知道它是一个开源软件包,开发它是为了消除将你的可视化放到网络上的困难。

它与Flask一起工作,你可以愉快地重用你在plotly.py中用来开发情节的大部分代码。

这是我整理的简单版本:

试试吧!它应该会在您的浏览器上打开这个图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的第一款 Dash 应用!

有什么大不了的?首先,它是一个活的网络应用,不到 25 行代码。注意左上方的下拉菜单?试着改变上面的值,看着图形神奇地改变。

去吧,我等着。

好吗?完成了。

让我们简单地浏览一下代码。

总体而言,我现在要做的是:

  • 初始化 Dash 应用程序;
  • 获取一个可用团队名称的列表,并将其提供给一个带有默认值或“TOR”的下拉菜单(带有 DOM id group-select);
  • 实例化一个图形对象作为 Dash 中的shot-dist-graph标识符;和
  • 创建一个回调函数,如果任何值发生变化,它将调用update_graph函数并将返回的对象传递给Output

如果你看一下代码,那么许多对 web 开发人员来说可能微不足道但对我来说很烦人的东西都被抽象掉了。

dcc。Graph 将 plotly.py 中的图形对象包装到我的 web 应用程序中,并且可以使用 html 方便地调用和设置像 div 这样的 HTML 组件。Div 对象。

对我个人来说,最令人满意的是输入对象和来自这些输入的回调是以声明方式设置的,我可以避免处理 HTML 表单或 JavaScript 之类的东西。

由此产生的应用程序仍然运行良好。使用下拉菜单选择另一个值时,图表会更新。

我们只用了不到 25 行代码就完成了所有这些工作。

为什么是 Dash?

在这一点上,你可能会问——为什么是 Dash?我们可以用 JS 框架前端、Flask 或无数其他组合中的任何一个来完成所有这些。

对于像我这样喜欢 Python 的舒适性而不是原生处理 HTML 和 CSS 的人来说,使用 Dash 抽象掉了许多不会给最终产品增加很多价值的东西。

举个例子,这个应用程序的一个版本包含了更多的格式和给用户的注释:

(在 git 回购中是simple_dash_w_format.py

大多数更改都是修饰性的,但是我要注意,在这里,我只是在 Markdown 中编写了主体文本,并简单地从 Plotly 中继承了我的格式化函数,以用于 Dash 中的图形格式化。

这为我节省了从数据分析和可视化到部署到客户视图之间的大量时间。

总而言之,从我最初的图表开始,我认为把它部署到 Heroku 大概用了不到一个小时。这真是太神奇了。

我将深入 Dash 的更多高级特性,并实际上用它做一些很酷的功能性的事情,但我对这个结果在易用性和速度方面非常满意。

你自己试试吧——我想你会印象深刻的。下一次,我计划写一些你可以用 Dash 做的非常酷的事情,以及构建真正交互式的仪表板。

编辑:我正在为的所有事物数据和可视化开始一个子堆栈——这将是我直接与你接触的一种方式。我希望你能加入我。

[## 在噪音中引入视觉:所有的数据和视觉化

数据无处不在,并且随着媒体对“大数据”的大量报道而呈指数级增长

visualnoise.substack.com](https://visualnoise.substack.com/p/coming-soon)

我也写了一点关于为什么我要开始一个子栈。

如果你喜欢这个,比如说👋/在 twitter 上关注,或关注更新。这是数据 viz 所基于的文章:

[## 创建有效的比例数据可视化

在各种数据集规模下,查看个体对整体的贡献以及随时间变化的最佳方式—(包括…

towardsdatascience.com](/create-effective-data-visualizations-of-proportions-94b69ad34410)

此外,这是我写的另一篇关于通过更好地可视化时间序列数据来改进基于数据的故事的文章:

[## 随着时间的推移有效地可视化数据,以讲述更好的故事

使用 Python 和 Plotly 构建清晰易读的时序数据可视化,以支持您的叙述。

towardsdatascience.com](/effectively-visualize-data-across-time-to-tell-better-stories-2a2c276e031e)

用 Python 构建一个 YouTube 下载器

原文:https://towardsdatascience.com/build-a-youtube-downloader-with-python-8ef2e6915d97?source=collection_archive---------1-----------------------

在 PyTube3 的帮助下,学习使用 Python 构建一个简单的 YouTube 下载器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kon Karampelas 在 Unsplash 上拍摄的照片

读者你好!今天,我们将使用 PyTube3 库在 Python3 中构建一个 YouTube 下载器。原来的 pytube 库不再工作,所以我们需要使用 pytube3 库,它只适用于 Python3,不适用于 Python2。

我们将看到我们可以用 Youtube 下载器做的各种事情,以及它为我们提供的各种功能。所以,我们一步一步来。

下载和导入库

首先,在做任何事情之前,您需要在您的系统中下载 pytube3 库。为此,我们将使用 python3。

在 CLI 中键入以下命令,在您的系统中下载并安装 pytube3。

pip install pytube3

该命令将在您的系统中下载并安装 pytube3。

现在我们可以开始构建我们的 YouTube 下载器了。我们需要将这个库导入到我们的程序中来使用它的功能。

因此,我们用下面的命令开始我们的程序:

from pytube import YouTube

你会注意到,虽然我们在系统中下载并安装了 pytube3,但是我们在代码中导入了 pytube。

为了消除混淆,pytube3 也是通过只编写 pytube 来导入的。我们不会通过将它写成 pytube3 来导入它。

接受用户的输入

我们的下一步是要求用户提供我们需要下载的 youtube 视频的链接。然后,用户将向我们提供他想要下载的视频的链接。

link = input("Enter the link: ")
yt = YouTube(link)

因此,我们接受了用户的输入,并将链接传递给我们的 YouTube 类。它将帮助我们揭示视频的所有信息,并让我们下载它。

揭示关于视频的各种信息

现在我们有了链接,并且我们已经将它传递给了 YouTube 类。现在,我们可以玩链接,并显示视频的各种信息,如标题,观看次数,收视率,描述,视频长度和其他各种事情。

#Title of video
print("Title: ",yt.title)
#Number of views of video
print("Number of views: ",yt.views)
#Length of the video
print("Length of video: ",yt.length,"seconds")
#Description of video
print("Description: ",yt.description)
#Rating
print("Ratings: ",yt.rating)

当我们运行这段代码时,我们将看到关于视频的各种细节,我们已经将视频的链接输入到程序中。此外,还有更多这样的操作可以执行,您可以在 pytube3 的官方文档中找到。

因此,出于输出的目的,我们不打印描述(它很大),所以我们打印其余的四样东西。

我们在这里使用了《黑暗》第三季官方预告片的链接。您可以使用自己选择的任何链接。

显示视频各种细节的输出

所以,正如你在上面看到的,我们已经打印了关于这个节目的各种细节。

查看可用的流

你一定已经看到 youtube 上有各种各样的质量可供观看。因此,在使用 pytube 下载的同时,我们还可以获得所有可用流的选项。

pytube 提供了一种非常简单的方法来查看用户提供的链接的所有可用流。因此,让我们运行代码来查看该特定视频的所有可用流。

#printing all the available streams
print(yt.streams)

在运行上面的代码时,我们获得了该视频的所有可用流。下面是生成的输出:

视频的可用流

现在,你可以看到视频和音频流。所以,你也可以只过滤掉音频或视频流。您还可以根据文件格式过滤掉流。我们还可以过滤出渐进流和破折号流(稍后会谈到它们)。

所以,让我们过滤掉只有音频的流。为此,我们需要编写如下代码:

print(yt.streams.filter(only_audio=True))

我们将得到的输出如下:

纯音频流

现在,让我们过滤掉只有视频的流。它将只显示包含视频但没有音频的流。所以,它也会过滤掉所有的渐进流。为此,我们将这样写:

print(yt.streams.filter(only_video=True))

我们将得到的输出如下:

仅视频流

现在,让我们来谈谈渐进的 v/s 破折号流。YouTube 使用 Dash 流进行更高质量的渲染。

渐进流被限制为 720p,并包含音频和视频编解码器文件,而 Dash 流具有更高的质量,但只有视频编解码器。

因此,如果我们想下载一个渐进流,我们将得到一个内置音频的现成视频。

但是,为了更高的质量,我们应该为视频使用 Dash 流,还应该下载一个音频流,然后使用任何混合工具合并它们。

因此,对于本文,我们将使用渐进式流下载来准备播放视频。你可以自由选择你的下载质量和选择流。

所以,我们先过滤掉渐进流。下面的代码将为我们做这件事:

print(yt.streams.filter(progressive=True))

它将列出可供我们下载的渐进流。它将有有限的选择,但它为我们做了工作。输出将如下所示:

可用的累进流

为了获得最高分辨率的渐进流,我们可以编写下面的代码:

ys = yt.streams.get_highest_resolution()

这将在 ys 变量中创建并存储最高分辨率的流。

我们也可以在 itag 的帮助下选择任何流。

ys = yt.streams.get_by_itag('22')

因此,现在我们已经将首选流存储在一个变量中。现在,让我们把它下载到我们的系统。

ys.download()

上面的代码将下载我们的首选流,并将其保存在当前的工作目录中。

我们还可以在系统中指定下载 youtube 视频的位置。我们可以通过在下载的大括号之间指定绝对路径来做到这一点。

下面的代码帮助您将它下载到您喜欢的位置。

ys.download('location')

仅此而已!恭喜你,你已经使用 Python 构建了你的第一个简单的 YouTube 下载器。仅用于测试和教育目的。不要滥用这些知识。

以下是使用最高质量的渐进流下载 youtube 视频的完整代码:

YouTube 下载器的完整代码

请访问我的 GitHub 库了解更多细节和更新。我鼓励你们尝试一些新的东西,然后请在评论中分享你们的想法和经验。我很想听听你学到了什么,还做了些什么。祝大家一切顺利!

看,我们在这里建立的是一个非常简单的版本。我们还可以尝试将相同的概念转换成一个应用程序或网站,以用户友好的方式执行相同的功能。您还可以通过使用不同网站各自的 API 来添加对不同网站的支持。有许多这样的功能丰富的视频下载软件,它们使用类似的概念,并给用户一个轻松下载视频的选项。

我最喜欢的一个是 YTSaver ,这是一个功能丰富的应用程序,可以一键从大量网站下载不同分辨率和格式的视频或播放列表。它还允许你将视频从一种格式转换成另一种格式,并且比其他下载者快得多。

注意:以上段落包含一个附属链接。

实际上,你也可以使用 Python 库,比如这个,将视频从一种格式转换成另一种格式。如果你有兴趣,也可以尝试这样做。非常感谢您的阅读!

读完这篇文章后,还有更多的故事值得一读

[## 使用 Django Rest 框架构建博客网站——概述(第 1 部分)

让我们使用 Django Rest 框架构建一个简单的博客网站,以了解 DRF 和 REST APIs 是如何工作的,以及我们如何添加…

towardsdatascience.com](/build-a-blog-website-using-django-rest-framework-overview-part-1-1f847d53753f) [## 用 MERN 堆栈构建一个电子商务网站——第 1 部分(设置项目)

让我们使用 MERN 堆栈(MongoDB,Express,React 和 Node)建立一个简单的电子商务网站,用户可以在其中添加项目…

shubhamstudent5.medium.com](https://shubhamstudent5.medium.com/build-an-e-commerce-website-with-mern-stack-part-1-setting-up-the-project-eecd710e2696) [## 用 Django 构建求职门户——概述(第 1 部分)

让我们使用 Django 建立一个工作搜索门户,它允许招聘人员发布工作并接受候选人,同时…

shubhamstudent5.medium.com](https://shubhamstudent5.medium.com/build-a-job-search-portal-with-django-overview-part-1-bec74d3b6f4e) [## 使用 Django 构建一个社交媒体网站——设置项目(第 1 部分)

在第一部分中,我们通过设置密码来集中设置我们的项目和安装所需的组件…

towardsdatascience.com](/build-a-social-media-website-using-django-setup-the-project-part-1-6e1932c9f221)

使用 TensorFlow 和 Streamlit 构建一个应用程序来生成逼真的人脸

原文:https://towardsdatascience.com/build-an-app-to-synthesize-photorealistic-faces-using-tensorflow-and-streamlit-dd2545828021?source=collection_archive---------16-----------------------

我们将向您展示如何使用 GANs、Tensorflow 和 st.cache 快速构建一个 Streamlit 应用程序来合成名人面孔。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

【GAN 合成脸】

机器学习模型是黑盒。是的,你可以在测试集上运行它们,并绘制出奇特的性能曲线,但是通常很难回答关于它们性能的基本问题。一个惊人的强大的洞察力来源是简单的玩你的模型!调整输入。观察输出。让你的同事和经理也和他们一起玩。这种互动的方法不仅是获得直觉的有力途径,也是让人们对你的工作感到兴奋的好方法。

制作交互式模型是启发 Streamlit 的用例之一,Streamlit 是一个 Python 框架,它使编写应用程序像编写 Python 脚本一样简单。这个概述将带你创建一个 Streamlit 应用程序,与最复杂、最黑箱化的模型之一一起玩:深度生成对抗网络 (GAN)。在这种情况下,我们将想象 Nvidia 的 PG-GAN [1]使用 TensorFlow 从稀薄的空气中合成照片级真实感人脸。然后,使用关的惊人的 TL-GAN 模型[2],我们将创建一个应用程序,让我们能够根据年龄、笑容、男性相似度和头发颜色等属性调整 GAN 合成的名人脸。在本教程结束时,你将拥有一个完全参数化的人类模型!(注意,我们没有创建属性。它们来自 CelebA 数据集【3】,其中一些可能会变得有点奇怪……)

Streamlit 入门

如果您尚未安装 Streamlit,可以通过运行以下命令来安装:

pip install streamlit
streamlit hello

如果你是一个经验丰富的简化者,你需要安装 0.57.1 或更高版本,所以一定要升级!

pip install --upgrade streamlit

设置您的环境

在我们开始之前,使用下面的命令来检查该项目的 GitHub repo 并亲自运行 Face GAN 演示。这个演示依赖于 Tensorflow 1,它不支持 Python 3.7 或 3.8,所以您需要 Python 3.6。在 Mac 和 Linux 上,我们建议使用 pyenv 安装 Python 3.6 和您当前的版本,然后使用 venv 或 virtualenv 建立一个新的虚拟环境。在 Windows 上, Anaconda Navigator 允许你用点击界面选择你的 Python 版本

设置完毕后,打开终端窗口并键入:

git clone [https://github.com/streamlit/demo-face-gan.git](https://github.com/streamlit/demo-face-gan.git)
cd demo-face-gan
pip install -r requirements.txt
streamlit run app.py

给它一分钟来完成下载训练好的 GAN,然后尝试玩滑块来探索 GAN 可以合成的不同面孔。很酷,对吧?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完整的应用程序代码是一个大约有 190 行代码的文件,其中只有 13 行是 Streamlit 调用。没错,上面整个 UI 就是从那 13 行画出来的!

让我们来看看这个应用程序是如何构建的:

现在你对它的结构有了一个概念,让我们深入上面的 5 个步骤,看看它们是如何工作的。

第一步。下载模型和数据文件

这一步下载我们需要的文件:一个预先训练的 PG-GAN 模型和一个预先适合它的 TL-GAN 模型(我们稍后会深入讨论这些!).

download_file实用功能比纯粹的下载器要聪明一点:

  • 它检查文件是否已经存在于本地目录中,所以它只在需要时才下载它。它还检查下载文件的大小是否符合我们的预期,因此它能够修复中断的下载。这是一个很好的模式!

  • 它使用st.progress()st.warning()在文件下载时向用户显示一个漂亮的 UI。然后它调用这些 UI 元素上的.empty()来隐藏它们。

第二步。将模型载入内存

下一步是将这些模型载入内存。以下是加载 PG-GAN 模型的代码:

注意load_pg_gan_model()开头的@st.cache装饰器。通常在 Python 中,你可以运行load_pg_gan_model()并反复重用那个变量。然而,Streamlit 的执行模型是独一无二的,因为每次用户与 UI 小部件交互时,你的脚本都会在中完整地再次执行。通过将@st.cache添加到昂贵的模型加载函数中,我们告诉 Streamlit 只在脚本第一次执行时运行这些函数——并在以后的每次执行中重用缓存输出。这是 Streamlit 最基本的特性之一,因为它允许您通过缓存函数调用的结果来高效地运行脚本。这样,大的合适的 GAN 模型将恰好被加载到存储器中一次;出于同样的原因,我们的 TensorFlow 会话也将恰好创建一次。(请参阅我们的发布文章以重温 Streamlit 的执行模型。)**

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

【图 1。缓存如何在 Streamlit 的执行模型中工作]

不过,有一个问题:TensorFlow 会话对象在我们使用它运行不同的计算时可能会发生内部变异。通常,我们不希望缓存的对象发生变异,因为那会导致意想不到的结果。因此,当 Streamlit 检测到这种突变时,它会向用户发出警告。然而,在这种情况下,我们碰巧知道,如果 TensorFlow 会话对象发生变异,这是可以的,因此我们通过设置allow_output_mutation=True来绕过警告

第三步。绘制侧栏用户界面

如果这是您第一次看到 Streamlit 用于绘制小部件的 API,下面是 30 秒速成课程:

  • 您可以通过调用像st.slider()st.checkbox()这样的 API 方法来添加小部件。
  • 这些方法的返回值是 UI 中显示的值。例如,当用户将滑块移动到位置 42 时,您的脚本将被重新执行,在执行过程中,st.slider()的返回值将是 42。
  • 你可以通过在侧边栏中添加st.sidebar来放置任何东西。比如st.sidebar.checkbox()

例如,要在侧边栏中添加一个滑块——一个允许用户调整brown_hair参数的滑块,您只需添加:

在我们的应用程序中,我们想展示一下让 UI 本身在 Streamlit 中可修改是多么容易!我们希望允许用户首先使用多选小部件来选择一组他们希望在生成的图像中控制的功能,这意味着我们的 UI 需要以编程方式绘制:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Streamlit,代码实际上非常简单:

第四步。合成图像

现在我们有了一组特征来告诉我们合成什么样的脸,我们需要做合成脸的繁重工作。我们的方法是将特征传递给 TL-GAN,在 PG-GAN 的潜在空间中生成一个向量,然后将该向量传递给 PG-GAN。如果那句话对你来说没有意义,让我们绕道来谈谈我们的两个神经网络是如何工作的。

绕道进入甘斯

为了理解上面的应用程序如何从滑块值生成人脸,你首先必须了解 PG-GAN 和 TL-GAN 的工作原理——但是不要担心,你可以跳过这一部分,仍然可以在更高的层次上理解该应用程序的工作原理!

PG-GAN 就像任何 GAN 一样,从根本上来说是一对神经网络,一个是生成性的,一个是鉴别性的,它们相互训练,永远锁定在致命的战斗中。生成网络负责合成它认为看起来像人脸的图像,而鉴别网络负责决定这些图像是否确实是人脸。这两个网络根据彼此的输出进行迭代训练,因此每个网络都尽最大努力学习愚弄另一个网络。最终结果是,最终的生成网络能够合成逼真的人脸,即使在训练开始时,它只能合成随机噪声。这真的很神奇!在这种情况下,我们使用的生成人脸的 GAN 是由 Karras 等人使用他们的GANs渐进生长算法(PG-GAN)在名人脸上训练的,该算法使用渐进的更高分辨率图像训练 GAN。[1]

PG-GAN 的输入是属于其所谓的潜在空间的高维向量。潜在空间基本上是网络可以生成的所有可能的脸的空间,所以该空间中的每个随机向量对应于一个唯一的脸(或者至少应该是这样!有时你会得到奇怪的结果…)你通常使用 GAN 的方式是给它一个随机向量,然后检查合成了什么面(图 2.a)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

[图 2.a]

然而,这听起来有点枯燥,我们宁愿对输出有更多的控制。我们想告诉 PG-GAN“生成一个有胡子的男人的图像”,或者“生成一个棕色头发的女人的图像”。这就是 TL-GAN 发挥作用的地方。

TL-GAN 是另一种神经网络,这种网络通过将随机向量输入 PG-GAN 进行训练,获取生成的面部,并通过分类器对其进行分类,例如“是否年轻”、“是否有胡子”、“是否有棕色头发”等。在训练阶段,TL-GAN 使用这些分类器标记来自 PG-GAN 的数千张人脸,并识别潜在空间中与我们关心的标签变化相对应的方向。因此,TL-GAN 学习如何将这些类别(即“年轻的”、“有胡子的”、“棕色头发的”)映射到适当的随机向量中,该向量应输入到 PG-GAN 中,以生成具有这些特征的人脸(图 2.b)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

[图 2.b]

回到我们的应用程序,此时我们已经下载了预训练的 GAN 模型并将其加载到内存中,我们还从 UI 中抓取了一个特征向量。因此,现在我们只需将这些特性输入 TL-GAN,然后输入 PG-GAN,就可以得到一幅图像:

优化性能

上面的generate_image()函数可能需要一些时间来执行,尤其是在 CPU 上运行时。为了提高我们的应用程序的性能,如果我们可以缓存该函数的输出就太好了,这样我们就不必在来回移动滑块时重新合成我们已经看到的人脸。

嗯,你可能已经在上面的片段中注意到了,这里的解决方案是再次使用@st.cache装饰器。

但是请注意我们传递给@st.cache的两个参数:show_spinner=Falsehash_funcs={tf.Session: id}。那些是干什么用的?

第一个很容易解释:默认情况下,@st.cache在 UI 中显示一个状态框,让您知道一个运行缓慢的函数正在执行。我们称之为“旋转器”。然而,在这种情况下,我们希望避免显示它,这样 UI 就不会意外地跳跃。所以我们将show_spinner设置为假。

下一个解决了一个更复杂的问题:TensorFlow 会话对象,作为参数传递给generate_image(),通常在这个缓存函数运行期间被 TensorFlow 的内部机制改变。这意味着generate_image()的输入参数总是不同的,我们实际上永远不会获得缓存命中。换句话说,@st.cache decorator 实际上什么都不会做!我们如何解决这个问题?

哈希函数拯救世界

hash_funcs 选项允许我们指定定制的哈希函数,告诉@st.cache在检查这是缓存命中还是缓存未命中时应该如何解释不同的对象。在这种情况下,我们将使用该选项通过调用 Python 的id()函数而不是检查其内容来告诉 Streamlit 散列 TensorFlow 会话:

这对我们很有用,因为在我们的例子中,会话对象实际上是底层代码所有执行中的一个单独对象,因为它来自@st.cache’d load_pg_gan_model()函数。

关于hash_funcs的更多信息,请查看我们关于高级缓存技术的文档。

第五步。绘制合成图像

现在我们已经有了输出图像,绘制它是小菜一碟!只需调用 Streamlit 的st.image函数:

*st.image(image_out, use_column_width=True)*

我们完事了。

包扎

现在你有了:在一个 190 行的 Streamlit 应用程序中使用 TensorFlow 进行交互式人脸合成,并且只有 13 个 Streamlit 函数调用!祝你在探索这两位 GANs 能画的人脸空间时玩得开心,非常感谢 Nvidia 和关让我们制作了他们超酷的演示。我们希望你能像我们一样享受构建应用程序和玩模型的乐趣。🎈

如需更多 Streamlit 应用示例,您可以查看我们在https://www.streamlit.io/gallery的图库。

感谢 Ash Blum、TC Ricks、Amanda Kelly、Thiago Teixeira、Jonathan Rhone 和 Tim Conkling 对本文的有益贡献。

参考文献:

[1] T. Karras,T. Aila,S. Laine,J. Lehtinen。为了提高质量、稳定性和多样性而逐步种植甘蔗。学习代表国际会议(ICLR 2018)

[2] S .关。使用新型 TL-GAN 模型控制图像合成和编辑。洞察数据科学博客(2018)

*[3]刘,罗,王,唐。*在野外深度学习人脸属性。计算机视觉国际会议(ICCV 2015)

使用这些工具,立即构建一个令人敬畏的数据科学(或任何)投资组合

原文:https://towardsdatascience.com/build-an-awesome-data-science-or-any-portfolio-in-no-time-with-these-tools-75ac95febf31?source=collection_archive---------15-----------------------

节省时间&建立一个漂亮的在线形象。大多数数据科学家对原始 HTML & CSS 有什么用?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安内特·lūsiņa 在 Unsplash 上拍摄的照片

互联网被认为是一种民主化的力量。在很多方面都是如此。从某种程度上来说,这无疑是教育的民主化,以至于在某些领域,你可以成为一名高水平的从业者,跟上前沿的发展,甚至不需要脱掉睡衣。

但是在互联网上获得地位的门槛一直相对较高。要在网上构建任何值得他们称赞的东西,你必须编码。

当然,HTML 和 CSS 并不是最难学的语言,但它是另一种需要学习的语言。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

耶,HTML/CSS(照片由 Pankaj PatelUnsplash 上拍摄)

如果你还不知道 web 编程,是否值得花时间去学习它,以至于你可以建立一个让你感到自豪的网站并向人们展示?

对于那些将 web 开发作为一项关键技能的人,或者那些好奇且有时间的人,去做吧。但是如果是一个你没什么用的技能呢?仅仅为了建一个网站,学习这些知识的痛苦值得吗?与部署和维护相关的所有麻烦怎么办?一定有更好的方法。

幸运的是,有许多工具可以提供帮助。实际上,据我所知,只有。所以。很多。工具。

这意味着有足够多不同的工具,无论你是谁,都可能有合适的工具。新的入门障碍实际上是费力地通过一堆工具包,并在每一个工具包中寻找,看看它是否是适合您的工具集。这听起来并不难,但也不像听起来那么简单。在一个软件激增的世界里,为你的确切用例研究一个 SaaS 服务或开源软件是很困难的,甚至不总是可能的。

所以在这篇文章中,我列出了一些我认为对我们大多数人来说是最好的选择的工具。希望你觉得有用。

注意:下面的一些链接是附属链接,这意味着在你没有额外费用的情况下,如果你买东西,我会给你一小笔佣金。

对于视觉思考者来说

这不是你想的那样

我将首先介绍这个工具,我认为对于大多数不熟悉 HTML/CSS(可能是 JS)的人来说,它确实是最好的工具,而且我也不在乎。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不幸的是,这不是我喜欢的(图片由网络工厂有限公司Unsplash 上拍摄)

不,是不是 WordPress。太… 2010 年了。

是的,它被广泛使用。但微软 Word 也是。是的,它是最受欢迎的,它的安装用户群、广泛(且廉价)可用的专业知识之间有着巨大的推动力。但是它有点过时了,它开始显示出它的年龄和事实,它是一个建立在一百万个插件上的城堡,被现在二十年的发展压得喘不过气来。

更重要的是,要真正定制它,你最终必须学习它的基本架构,在我看来,这实际上不如学习 HTML/CSS 有用,除非你想成为一名 WordPress 开发者。

并不是说这有什么错!但这不适合我。

相反,我建议…

Webflow

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用 Webflow 制作的网站示例(截图: Webflow 网站)

鉴于我对 WordPress 的不满,你可能已经看到了这一点。 Webflow 基本上是 DreamWeaver 在互联网早期想做的,也是假装的,但你知道,现在

它所能做的非常强大,而且它真的把整个 nocode 民族精神放在了心上。您想创建自定义滚动动画吗?互动?让元素基于用户的动作淡入/淡出或隐藏,并控制触发器、定时和视觉效果——所有这些都无需编码?没错。

包括电池吗?就像在,在研究了主要工具之后,我不需要搜索一堆不同的插件(例如 Webflow vs Wordpress vs Wix 等等。)?没错。

它是否创建了具有生产就绪/干净代码的站点?也是的。虽然我不能量化这一点,但通过像 Reddit 这样的公正论坛的搜索向我表明,Webflow 的代码与 Wix 这样的工具相距甚远。如果你愿意,Webflow 还允许你带着球回家(即导出代码),这样你就不会留下看起来像计算机科学一年级学生吐在键盘上的代码。

我还喜欢 Webflow 有一套全面的教程来帮助你快速上手。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Webflow 的教程站点很棒(截图: Webflow 大学)

如果你和你的投资组合一起做一些事情,比如建立一个电子商务门户,你也可以用 Webflow 来做。您不需要迁移到新的平台。

基于力量&相对较低的学习曲线的平衡,从我个人的经验来说,我怎么推荐 Webflow 都不为过。现在,有一些更容易学习的工具,我们会回到这个话题。但是在 Webflow 上获得一个漂亮的网站仍然很容易,我稍后将讨论的一些选项没有提供太多的灵活性。

对于我们这些非 web 编程专家来说,Webflow 绝对是一个不错的选择。

点击这里查看 Webflow

但是等等,我还没说完呢!仅举一个选项就够糟糕的了。根据您的需求,还有很多其他的好选择。

快速和免费-美国

首先,为这个糟糕的双关语道歉。但有时这是必须要做的。

不幸的是,Webflow 不是免费的。(你可以免费试用,但我相信你最终还是要付费的。)但是如果那对你很重要的话,确实有免费的解决方案,如果那是你所追求的,你必须做出令人惊讶的很少的妥协。

如果你属于这一类,静态网站建设者可能是你最好的选择,我个人推荐:

Netlify + 盖茨比(…或类似的——下文详述)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用盖茨比制作的网站示例(截图:盖茨比网站)

Gatsby 是少数领先的静态站点生成器之一,还有 Next.js、Hugo 和 Jekyll 等等。

静态站点生成器令人敬畏的原因是它们可以生成静态站点。

与动态网站不同,静态网站不需要任何后端处理,就像用户请求发送到服务器,服务器做一些事情,然后前端呈现服务器返回的输出。

唯一需要的是静态文件被托管在某个地方,用户访问它,然后主机只需要将文件交付给用户。

这减少了运行网站的大量计算需求,以至于相对容易找到免费托管这些网站的提供商。Netlify 和 GitHub 页面就是两个典型的例子。

静态网站的其他好处是速度和可伸缩性。由于其架构,它们的速度快如闪电,并且它们的低需求意味着服务器基本上可以处理任何事情。实际上,除了一群僵尸同时浏览你的网站寻找地球上最后一个大脑之外,任何事情都没问题。

你有没有注意到,虽然我推荐盖茨比和 Netlify,我还没有提到它?的确,盖茨比是我个人最喜欢的。但其他流行的软件包,如 Next.js、Hugo 或 Jekyll 都是优秀的工具,这也是事实(看看 Jamstack.org 的这个列表)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只是一些美味的 Jamstack 选项(截图:【Jamstack.org】T2)

很大程度上,我认为选择一个是非常个人的决定,取决于对任何底层编程语言的熟悉程度。我选择了盖茨比,因为它听起来很棒,我想我会潜移默化地学到一些 JS,但是 ymmv。

查看 盖茨比这里 ,还有 Netlify 这里

代码,但保持 Python

作为 TDS 的读者,我打算假设你是 Python 用户(抱歉,R 用户)。有很多方法可以让你不用离开我们舒适的蛇朋友就可以上网工作。

你们中的许多人将会在你们的作品集中展示数据科学的成果,以各种形式,比如可视化或者可能是笔记本。那么,为什么不使用(并学习)那些被设计用来展示这些的工具,并去掉中间人呢?

破折号流线型 + Heroku

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Dash 应用程序示例——看起来像是很棒的投资组合材料!(截图: Plotly 网站)

我写过一些关于 Dash 和 Streamlit 的文章,正如我在那些文章中提到的,它们让创建 web 应用程序变得如此简单。没有规定说你的作品集不能用这些网络应用来建立。

事实上,这些工具可能会很好地展示您的数据科学和可视化能力,而不会超出 Python 的范围,因为这正是它们应该做的。

Dash 或 Streamlit 等 web 应用程序的一个缺点是,它们需要更多的资源,因此需要更多的服务器容量。话虽如此,Heroku 或 PythonAnywhere 等服务的免费层对于投资组合网站来说已经足够了,除非你是某种摇滚明星,否则我无法想象一个投资组合网站获得如此多的流量,以至于它会淹没那些免费层应用程序的容量。

至于这两者中的哪一个,Streamlit 可能更容易掌握和使用,但 Dash 提供了更多的可定制性,例如可以使用引导主题和样式。此外,正如我以前说过的,Dash 可能更有可能用于生产,而不是 Streamlit,后者更像是一种快速原型开发工具。

因此,如果是我,我可能会学习和使用 Dash,并使用 Heroku 进行部署,这在我看来是最容易的,利用他们的免费层。

查看 破折号此处细流此处 ,以及 Heroku 此处

威风凛凛的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Jovian 项目示例(截图: Jovian.ai 网站)

我怀疑你们中的一些人可能听说过木星,虽然可能不是大多数。这是一家相对年轻的初创公司,旨在简化 Jupyter 笔记本的共享和协作。

它允许共享整个笔记本,如下所示,或者将笔记本的某些部分嵌入到另一个媒体,如博客。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与 Jovian 分享笔记本(截图: Jovian.ai 网站)

因此,如果你的作品存在于笔记本中,Jovian 可能是以其原始形式展示你的作品的最佳方式,或者将它们托管在某个地方并嵌入其中的一部分。

查看这里威风凛凛的

保持平缓的学习曲线

这些解决方案不会给你最大的可定制性或最好看的网站,但你可能会得到一些东西,并在任何时间运行。

观念 + Super.so

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用 sites 和 Super.so 创建的示例站点(截图: super.so 网站)

观念是一个相对较新的平台,他们声称这是一个“写作、计划和组织”的工具。

这是一个工具,我会把它描述为互连的 Evernote、nocode 数据库、日历、看板……基本上是你能想到的任何东西。

这个功能强大的笔记本工具与建立投资组合有什么关系?

嗯,有一个名为 super 的第三方应用程序,它将把你的概念项目变成一个功能齐全的网站,拥有网站需要的东西——比如分析和部署到一个域上。

展示页面显示,相当多的人已经使用这个设置来组合他们的投资组合。这可能是将投资组合在一起的最简单的方法之一,而概念的局限性也使得做出一个不好看的投资组合变得更加困难。

在这里查看概念,在这里查看 Super.so】

中等

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对我来说,这看起来像是投资组合页面的良好开端(截图:Medium.com/@_jphwang

你可能会怀疑,但请听我说完。什么是投资组合?这是为了展示你的能力,无论你想为它建立一个品牌。Medium 提供了一个可靠、易用、美观的平台,它是免费的,你可以在其中嵌入各种格式的文档。

它有明显的局限性,主要是一个博客平台,它不是你自己的领域,但考虑到这种方法的准入门槛很小,它们是很好的权衡。

对于一些人来说,这可能会给他们一个更好的机会,有人有机地找到你的投资组合,而不是有一个搜索引擎优化分数低的网站。

对于策展,我建议创建你自己的“出版物”并在那里托管你的作品集,比如为我们这些幸运地需要多个作品集的人托管不同的作品集(比如数据科学作品集和 web 开发作品集)。

那就到此为止了。我希望你至少能找到其中一个适合你的选择。如果你跳到最后,TL;博士的意见是 Webflow 是我推荐的工具,但是根据你的情况,其他人可能也适合。

我之前看了相当多的投资组合来整理这篇关于惊人投资组合的文章,所以我知道它们有各种形状和大小。

** [## 这些数据科学产品组合将让您惊叹不已并深受启发(2020 年中期版)

使用这些来改进您自己的数据科学产品组合,学习新技能或发现新的有趣项目。

towardsdatascience.com](/these-data-science-portfolios-will-awe-and-inspire-you-mid-2020-edition-728e1021f60)

所以如果我错过了你最喜欢的工具,请写信告诉我。

但是在你离开之前——如果你喜欢这个,在 twitte r 上打个招呼/关注,或者关注这里的更新。**

编辑:我正在为所有事物数据和可视化开始一个子堆栈——这将是我与你直接接触的一种方式。我希望你能加入我。

** [## 在噪音中引入视觉:所有的数据和视觉化

数据无处不在,并且随着媒体对“大数据”的大量报道而呈指数级增长

visualnoise.substack.com](https://visualnoise.substack.com/p/coming-soon)

我也写了一点为什么我开始一个子栈。**

ICYMI:我也写了这些文章,你可能会觉得有用:

** [## 使用 Python 在几分钟内构建一个 web 数据仪表板

通过将您的数据可视化转换为基于 web 的仪表板,以指数方式提高功能和可访问性…

towardsdatascience.com](/build-a-web-data-dashboard-in-just-minutes-with-python-d722076aee2b) [## Plotly Dash 与 Streamlit——哪个是构建数据仪表板 web 应用程序的最佳库?

用于共享数据科学/可视化项目的两个顶级 Python 数据仪表板库的比较——

towardsdatascience.com](/plotly-dash-vs-streamlit-which-is-the-best-library-for-building-data-dashboard-web-apps-97d7c98b938c)

在外面注意安全!**

用 Python 构建一个极限学习机

原文:https://towardsdatascience.com/build-an-extreme-learning-machine-in-python-91d1e8958599?source=collection_archive---------11-----------------------

无参数调整的神经网络构建指南。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乔希·里默尔在 Unsplash 上的照片

极端学习机(ELMs)是单隐层前馈神经网络(SLFNs ),与基于梯度的学习技术相比,能够更快地学习。这就像一个没有学习过程的经典的单隐层神经网络。这种神经网络不执行迭代调整,使得它比使用反向传播方法训练的网络更快,具有更好的泛化性能。

elm 基于通用近似定理,该定理指出:

在对激活函数的温和假设下,具有包含有限数量神经元的单个隐藏层的前馈网络可以逼近 R^n 的紧凑子集上的连续函数

这仅仅意味着,如果 ELMs 具有足够的隐藏神经元和训练数据来学习所有隐藏神经元,则 ELMs 可以以显著的准确度解决分类和回归任务。

为了理解 ELM 是如何工作的,让我向您展示一个插图和构建模型的步骤。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者的极限学习机插图

因此,鉴于以下情况:

  • 训练集

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 隐藏节点输出函数 H ( wbx )
  • 隐藏节点数 L

我们可以通过三个简单的步骤来实现 ELM:

  1. 随机分配隐藏节点 ( wb ) 的参数
  2. 计算隐藏层输出矩阵 H
  3. 计算输出权重 β

现在,让我们进入编程部分。我希望你知道如何用 python 编程,并且熟悉已经在机器学习中使用的包,例如 scikit-learn、numpy 和 pandas。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MNIST 手写数字数据集由 stathwangGitHub

我们将使用 MNIST 数据集训练网络来分类手写数字。

首先,我们需要导入必要的包来构建模型。

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import MinMaxScaler

接下来,我们需要加载数据集来训练网络和测试模型。

train = pd.read_csv('mnist_train.csv')
test = pd.read_csv('mnist_test.csv')

作为一种预处理技术,我们将使用 scikit-learn 包中的 MinMaxScaler 和 OneHotEncoder 在(0,1)的范围内归一化我们的特征,并将我们的目标转换为 one-hot 编码格式。

onehotencoder = OneHotEncoder(categories='auto')
scaler = MinMaxScaler()X_train = scaler.fit_transform(train.values[:,1:])
y_train = onehotencoder.fit_transform(train.values[:,:1]).toarray()X_test = scaler.fit_transform(test.values[:,1:])
y_test = onehotencoder.fit_transform(test.values[:,:1]).toarray()

为了初始化我们的网络,我们需要识别以下内容:
1 .输入层的大小,即输入特征的数量
2。隐藏神经元的数量
3。隐藏权重
4 的输入。隐藏层激活功能

输入图层的大小是指数据集输入要素的数量。

input_size = X_train.shape[1]

让我们将隐藏神经元的数量初始化为 1000。

hidden_size = 1000

接下来,我们需要从高斯分布中随机初始化我们的输入权重和偏差。

input_weights = np.random.normal(size=[input_size,hidden_size])
biases = np.random.normal(size=[hidden_size])

我们将使用一个整流线性单元(ReLU) 作为我们的隐藏层激活函数。

注意:您可以使用不同的激活功能。

def relu(x):
   return np.maximum(x, 0, x)

我们完成了网络初始化!

接下来要做的是创建一个函数来计算输出权重,这就是我们的 β 。目标是使用范数最小二乘解最小化目标(训练标签)和输出(预测标签)之间的最小二乘误差:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 H (匕首)是矩阵 HT 是我们的目标。

我们的 H 这里是我们网络的隐藏层。让我们创建一个函数来计算我们的 H 向量。

def hidden_nodes(X):
    G = np.dot(X, input_weights)
    G = G + biases
    H = relu(G)
    return H

现在,我们只用一行代码就可以用 python 计算出我们的 β 。让我们将输出矩阵分配给一个变量名 output_weights

output_weights = np.dot(pinv2(hidden_nodes(X_train)), y_train)

代码使用函数 pinv 计算的 Moore-Penrose 伪逆,我们得到【dagger】和 T 的点积。结果是计算出的 β (隐藏为输出权重)。**

最后,我们有了一个模型。我们没有应用任何技术来调整我们的权重,我们只是简单地计算它们。

为了确保我们的模型产生一个好的结果,我们必须首先测试它。让我们创建一个函数来处理测试。

**def predict(X):
    out = hidden_nodes(X)
    out = np.dot(out, output_weights)
    return out**

我们已经可以开始预测了。为此,让我们编写以下代码:

**prediction = predict(X_test)
correct = 0
total = X_test.shape[0for i in range(total):
    predicted = np.argmax(prediction[i])
    actual = np.argmax(y_test[i])
    correct += 1 if predicted == actual else 0
accuracy = correct/total
print('Accuracy for ', hidden_size, ' hidden nodes: ', accuracy)**

**模型的精度是 **0.9439,考虑到我们只有一个具有 1000 个隐藏节点的隐藏层,以及用于学习的非迭代调整,这是一个很好的结果,使得它比任何基于梯度的技术都快。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每增加一个隐藏节点的精度

参考上图,当将隐藏节点的数量扩展到 1000 ( 0.94390.977) )时,ELM 的精度显著提高。这意味着,只要我们设置了正确的网络隐藏节点数,ELM 就能更好地进行归纳。

这个实现的 jupyter 笔记本可以在下面我的 GitHub 教程库中找到。

** [## Glenn gara/教程

在 GitHub 上创建一个帐户,为 glenngara/tutorials 开发做出贡献。

github.com](https://github.com/glenngara/tutorials)

R 引用

[1]光,,秦,,萧启庆,极限学习机:理论与应用 (2006),神经计算

[2]光,极限学习机,南洋理工大学

[3]光,,秦,,萧启庆,极限学习机:前馈神经网络的一种新的学习方案 (2004),IEEE 国际神经网络联合会议**

构建一个 ML 产品——要避免的 4 个错误

原文:https://towardsdatascience.com/build-an-ml-product-4-mistakes-to-avoid-bce30d98bd24?source=collection_archive---------20-----------------------

人工智能笔记

这是我多年来学习的构建机器学习产品的综合课程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

彼得罗·郑Unsplash 上拍摄的照片

近年来,我在不同的角色和职责下与几个机器学习或 ML 初创公司合作,如工程师、团队领导、顾问和顾问。我发现了四个在工程师和高管中非常常见的错误。在这篇文章中,我描述了构建 ML 产品的 4 个常见错误,并给出了一些可穿戴技术公司的例子。

有一次,我在一家可穿戴技术公司领导机器智能团队。该公司制造了一种手势控制臂带,让用户使用手势控制他们的环境。我们开发了一个手势识别引擎,它将肌肉信号作为输入,并识别手势。

我们必须构建和评估大量的 ML 模型来构建行业级的 ML 产品。因此,我们建立了一个管道,适当地管理构建 ML 产品所需的所有开发步骤,包括数据收集、模型训练、模型评估或模型选择。

我们成功地将一款 ML 产品运送给了全球超过 10 万名用户。除非我们在 ML 产品的开发中实施了最佳实践,否则我们无法做到这一点。

[## 人工智能:非正统的教训:如何获得洞察力和建立创新的解决方案

人工智能:非正统的教训:如何获得洞察力和建立创新的解决方案

www .亚马逊. ca](https://www.amazon.ca/Artificial-Intelligence-Unorthodox-Innovative-Solutions/dp/B08D4Y5129/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=)

在这里,我分享了构建 ML 产品的 4 个潜在错误,以及一些解决它们的建议。我发现这些错误在我后来工作过的许多其他团队中很常见。

—单一端到端模型很棒,但可能不存在。

构建 ML 产品的一个常见错误是坚持构建一个单一的端到端模型来解决所有场景。一个 ML 产品几乎不能通过一个 ML 模型来运输。原因之一是用例比你通常预期的有更多的差异。

错误一——从早期开始,我坚持构建一个单一的端到端 ML 模型,并通过该模型处理所有用例。

在早期,我们的目标是为全世界 70 亿人建立一个手势识别模型。你可以猜猜。它不像我们计划的那样有效。因此,我们很快开始研究原始肌肉信号,以获得更好的见解。

我们发现,我们对每个手势的预期模式或特征在用户中并不一致。换句话说,我们发现个体之间的差异比我们早期认为的要多,单一的 ML 模型可能并不适用于所有人。例如,我们发现个人有不同的肌肉解剖,皮肤导电性,排汗率,前臂周长和手势风格。但是替代方案是什么呢?

例如,我们可以根据他们的前臂周长将他们分成相似的组,并为每个组建立一个特定的模型。这种方法可以显著提高模型性能。然而,它不能创造我们想要的用户体验。然后,我们采取了另一种方法。我们决定只为我们的用户创建两个选项:公司使用我们的训练数据集构建的“人口模型”和用户通过自己的数据构建的“个性化模型”。

—盲目收集的测试数据集可能会非常误导人。

您必须在每次发布之前彻底评估 ML 模型的性能。因此,在流程中尽快收集有效的测试数据集非常重要。另一方面,有效的测试数据集必须是用户数据的真实表示。然而,你还不够了解你的用户;尤其是在早期。所以,你不知道你的产品如何被使用,在哪里被使用,或者被谁使用。因此,您必须始终怀疑您的测试数据集是否能够真正代表用户数据。

错误二——我没有时间仔细设计数据收集协议。我只会把时间花在训练一个复杂的模型上。

我们的分析表明,诸如“前臂周长”或“皮肤状况”等参数会显著影响模型的性能。我们可以测量个体的前臂周长,但是很难测量他们的皮肤状况。因此,我们充分收集了前臂周长的正态分布数据,但我们不能对皮肤状况进行同样的收集。请注意,我们使用电导率仪为一小部分用户测量皮肤状况以进行分析,仅此而已。

无论如何,我们不知道我们的用户前臂周长或皮肤状况的分布。如果我们有大量的用户,我们可以假设它一定是正态分布。但是,我们当时没有那么多用户。所以,我们确信分布绝对是偏斜的。这意味着我们可以猜测一个新版本如何影响用户体验。由于我们不能 100%确定发布的质量,我们必须有一个应急计划。

—标准的性能指标并不总是足够的。

你可以简单地用准确度、精确度和召回率等标准指标来评估一个学术性的 2 类机器学习问题。然而,你不能那么容易地评估一个 ML 产品。例如,一个 ML 产品通常是一个具有特定问题配置的多类问题,每个配置都给评估框架带来一些复杂性。构建 ML 产品的一个常见错误是用标准的性能指标来评估 ML 产品。

错误三——我不需要特定于问题的指标。我可以使用标准指标来评估 ML 产品。

我们设计了一个 ML 模型来识别 5 种手势,即左、右、拳、展开和打响指。我们用 3 个标准参数,即准确度、精确度和召回率来评估每一类中 ML 模型的性能。因此,我们需要考虑 15 个(3×5)性能指标。这 15 个参数并不同等重要。例如,Fist 或 Snap 类中的误报对用例 a 中的用户体验有不同的后果。此外,用例也有它们自己的差异。简而言之,考虑到所有的复杂性,我们必须创建特定于问题的度量标准,以确保发布新的 ML 模型。

—更多的数据并不能保证更好的结果。

“如果我们收集更多的数据,我们的模型会变得更好。对不对?”我相信你听过这句话很多次了。但事实是,模型性能并不一定会因为输入更多数据而提高。这就是为什么为了将来的目的,您必须将模型和它们的性能报告一起存档在一个库中。例如,您可能希望检索它们以进行比较分析或在生产中部署它们。

为了构建 ML 产品,您必须频繁地构建 ML 模型,而模型性能并不一定在每次构建中都得到持续的提高。因此,您必须将模型与其重要的元数据(如性能指标和超参数)一起存储。这有助于您在需要时对结果进行更深入的分析。您还必须将训练和测试数据存储在模型旁边,以确保在需要时可以重复前面的实验。

您可以在云存储解决方案(如亚马逊 S3)、通用工件管理解决方案(如 JFrog )或持续集成解决方案(如 CircleCI )提供的隔间中构建这个模型库。最佳实践是使用工件管理解决方案,它创建了对存储的 ML 模型列表的更好的访问。请注意,您可能希望使用性能查询来搜索这个集合。如果模型存储在基于文件的存储中,比如亚马逊 S3,就不能这样做。

错误四——我不需要存档 ML 模型。如果我们收集更多的数据,我们的模型会变得更好。我为什么要花时间创建基础架构?

想象一下,你是一家公司机器智能主管。在过去的几个月里,你努力设计了一个包含一系列需求的 ML 模型。截止日期到了,出乎意料地,你被告知公司需要一个有不同要求的 ML 模型。你没有时间再次做所有的训练和测试。您必须做的是在模型库上运行一个查询,并提取一个与新需求性能最接近的模型。如果你没有准备好这个库,你能恰当地应对这种情况吗?

外卖食品

  • 如果单一的 ML 模型不起作用,有一个替代策略
  • 确保测试数据是用户数据的真实代表
  • 使用特定于问题的指标来评估端到端性能
  • 构建一个 ML 模型库,并用有用的元数据标记它们

感谢阅读!

如果你喜欢这个帖子,想支持我…

[## 通过我的推荐链接加入 Medium—Pedram Ataee 博士

作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…

pedram-ataee.medium.com](https://pedram-ataee.medium.com/membership)

用 3 行代码用 BERT 构建一个开放领域的问答系统

原文:https://towardsdatascience.com/build-an-open-domain-question-answering-system-with-bert-in-3-lines-of-code-da0131bc516b?source=collection_archive---------21-----------------------

拥抱脸变形金刚的端到端问答

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: Pexels

开放领域问答(QA) 系统接受自然语言问题作为输入,并从大型文本语料库(如维基百科)中的内容返回准确的答案。这与标准搜索引擎非常不同,标准搜索引擎只是返回与搜索查询中的关键字匹配的文档。

为实际应用构建这样的系统在历史上是相当具有挑战性和复杂的。本文试图使这样的系统更容易实现和开发。在本教程中,我们将仅用 3 行代码构建一个全功能、端到端的开放领域 QA 系统。为了实现这一点,我们将使用 ktrain ,这是一个 Python 库和 TensorFlow 包装器,使深度学习和 AI 更容易访问和应用。ktrain 是免费的,开源的,这里有

这里的基本思想是将涵盖许多不同主题的文档集视为一种知识库,我们可以向其提交问题并获得准确的答案。在本文中,我们将使用 20 个新闻组数据集作为知识库。作为包含大量观点、辩论和争论的新闻组帖子的集合,语料库远非理想的知识库。通常最好使用基于事实的文档,如维基百科文章,甚至新闻文章。然而, 20 个新闻组数据集对于这个例子来说已经足够了,因为它提供了一个有趣且易于尝试的案例研究。它还强调了这样一个事实,即问答系统可以从任何文档集合中获得洞察力。

让我们首先使用 scikit-learn 将数据集加载到一个名为docs的数组中,并导入一些 ktrain 模块。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤 1:创建搜索索引

有了数据集,我们首先需要创建一个搜索索引。搜索索引将允许我们快速方便地检索包含问题中出现的单词的文档。这样的文档很可能包含答案,并且可以被进一步分析以提取候选答案。我们将首先初始化搜索索引,然后将 Python 列表中的文档添加到索引中。由于新闻组的帖子很小,可以放在主内存中,我们将把commit_every设置为一个大的值,以加快索引过程。这意味着直到最后才会写出结果。如果您遇到问题,可以尝试降低该值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于太大而无法加载到 Python 列表中的文档集,您可以使用SimpleQA.index_from_folder,它将抓取一个文件夹并索引所有找到的纯文本文档。

步骤 2:创建一个 QA 实例

接下来,我们将创建一个 QA 实例,它主要是来自优秀的变形金刚库的预训练BertForQuestionAnswering模型的包装器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

就是这样!在大约 3 行代码中,我们构建了一个端到端的问答系统,可以随时接收问题。

提问!

我们将调用qa.ask方法向我们索引的文本语料库发出问题并检索答案。ask方法执行以下步骤:

  1. 使用搜索索引查找问题中包含单词的文档
  2. 从这些文档中提取段落用作上下文,并使用在小队数据集上预先训练的 BERT 模型解析出候选答案
  3. 根据可信度分数对候选答案进行排序和删减,并返回结果

我们还将使用qa.display方法在我们的 Jupyter 笔记本中很好地格式化和显示前 5 个结果。由于模型正在对段落和句子进行梳理以寻找答案,因此可能需要一些时间来返回结果。

还要注意的是, 20 新闻组数据集涵盖了 20 世纪 90 年代早期到中期的事件,因此不存在对近期事件的引用。然而,数据集涵盖了许多不同的领域类别。例如,有 sci.space 类别涵盖了有关太空的主题。先说一个空间问题!

太空问题:

卡西尼号探测器是什么时候发射的?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如你所见,第一个候选答案表明卡西尼太空探测器于 1997 年 10 月发射,看起来是正确的。其上下文中的特定答案在列上下文下以红色突出显示。请注意,正确答案不会总是最佳答案,但在这种情况下是这样的。

因为我们使用了index_from_list来索引文档,所以最后一列(由answers字典中的reference字段填充)显示了与包含答案的新闻组帖子相关的列表索引。此reference字段可用于细读包含有print(docs[59])答案的整个文档。如果使用index_from_folder来索引文档,那么reference字段将被替换为文档的相对文件路径。

20 个新闻组数据集也包含许多讨论和辩论基督教的帖子。让我们问一个关于这个主题的问题。

宗教问题:

耶稣基督是谁?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里,我们看到不同的观点对耶稣基督,因为辩论和讨论,在这个文件集。

最后, 20 新闻组数据集还包含几个关于计算主题的新闻组类别,如计算机图形和 PC 硬件和软件。让我们问一个技术支持问题。

技术支持问题:

什么原因导致电脑图像太暗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从候选答案来看,缺乏伽马校正的似乎至少是报告问题的原因之一。

关于部署质量保证系统的说明

要部署这个系统,唯一需要持久化的状态是我们在步骤 1 中初始化并填充的搜索索引。一旦搜索索引被初始化和填充,人们可以简单地从步骤 2 开始在生产环境中使用 QA 系统。

本文的源代码

本文的源代码有两种形式:

  1. GitHub repo 上提供的 Jupyter 笔记本
  2. 谷歌 Colab 笔记本此处有售

您可以在自己的文档集中随意试用一下 ktrain QA 模块。要了解更多信息,请访问我们的 GitHub 知识库:

【https://github.com/amaiya/ktrain

用 Rust 和零成本在周末建立一个短信提醒系统

原文:https://towardsdatascience.com/build-an-sms-alert-system-for-canada-covid-19-cases-over-the-weekend-with-rust-and-zero-cost-235bb59ec5d?source=collection_archive---------26-----------------------

周末建设和学习。

加拿大安大略省新冠肺炎新病例短信提醒

在我们开始这个周末的构建和学习之前,我想花点时间感谢我所有的读者,他们总是支持我,给我提供一些建议和指导。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

亲教会媒体在 Unsplash 上拍摄的照片

你是我继续这段旅程最重要的动力。如果你喜欢我的周末构建和学习系列,请在 Medium 上关注我。

[## 魏黄-中号

声明:我在媒体上写的文章仅与我的学习和观点相关。不会代表或…

medium.com。](https://medium.com/@jayhuang75)

用例

新冠肺炎改变了我们的许多日常生活;有了新常态,我们思考和做事都不一样了。

每天,我的妻子和儿子都试图从互联网上获得加拿大安大略省新冠肺炎净新增病例增长的最新情况,这已经成为他们的日常生活。

这一周,我儿子忙于他的学校作业。所以他错过了他的例行公事。当我妻子问他这个数字时,他突然意识到他忘记了这个重要的日常活动。当他冲到电脑前开始搜索号码时,他的一句话引起了我的注意。

如果能得到一些关于这些每日号码的推送通知,那就太棒了!

“对!你给了我一个新的想法,为我的下个周末,建立和学习系列。谢谢你,儿子。”

这个想法总是来自我们的日常生活。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

绝对视觉Unsplash 上拍摄

非功能性需求

在把手放在键盘上之前,让我们看看我们想要构建什么,这是重要的一步。

  1. 拉斯特·朗。
  2. 性价比高。
  3. 对于推送通知,让我们使用 SMS 作为初始用例,Twilio 提供了一些开箱即用的功能。最重要的是,还有免费订阅。
  4. 能够扩展到不同的用例,比如电子邮件通知,甚至进一步的聊天机器人实现——设计模式。(依赖倒置原则和开放/封闭原则)
  5. 及时调度程序— Cron 作业。
  6. 易于构建和部署——我最喜欢的 Heroku。
  7. 准确的数据来源——加拿大政府网站提供了一些公开可信的数据来源。

[## 加拿大新冠肺炎病例流行病学总结 Canada.ca

更新:将鼠标悬停在各省和地区上以查看总案例数、活动案例数、已恢复案例数、人数…

health-infobase.canada.ca](https://health-infobase.canada.ca/covid-19/epidemiological-summary-covid-19-cases.html)

架构和数据流

经过一些第一手的分析:

  1. 网站上提供的数据是 CSV 文件。
  2. 数据将在美国东部时间每天下午 7 点更新。有时会有一个小时的延迟。
  3. 该模式涵盖了我们需要的所有内容,如日期、每个省的新病例总数等。为简单起见,我们只关注整个新病例数和唯一死亡总数。
  4. 当我们完成处理后,我们需要清理 tmp 文件。减少不必要的空间和运营开销。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简单的数据流——作者截图

让我们开始编码部分。

手放在键盘上。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码结构—作者截图

代码结构

该应用程序中的关键业务逻辑有 3 个主要部分:

  1. 下载,基于 HTTP 请求以获取 csv 文件并返回文件路径以供将来处理。
  2. Process — MapReduce ,只针对安大略省的数字,似乎这就是我儿子想要的:),这很容易扩展到不同的用例,如保存到数据库,或生产者到近实时,流等。
  3. 警报组件,因为我们希望它可以基于打开/关闭原则进行扩展,打开扩展新的用例,但是,关闭对当前实现的修改。

此外,Procfile 是 Heroku 调度实现。

实际下载

用 MapReduce 进行防锈处理

警报组件

对于 alert 组件,我们将使用 Rust 特征,它模拟 Golang 接口实现。它的好处:我们可以选择一个特定的用例实现,比如 SMS、Email 或 chatbot,而一般的抽象工作流保持不变。(依赖倒置原则和开放/封闭原则)

摘要报告和生产者

关闭 SMS 实施发送到 Twilio API

下一次我们需要添加电子邮件用例时,我们只在 alert 文件夹中创建 email.rs ,而不在 alert 组件中创建 underline mod.rs。

决赛成绩

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作业执行日志—按作者划分的屏幕截图

部署和 Cron 作业设置

对于我个人的项目,我通常使用 Heroku 进行部署;一个重要的方面是定价模式、规模和使用量。

我们还可以构建容器来部署到大多数云容器提供商,如 AKS、AWS 和 GKE。我写过一些关于这个话题的文章。

[## 使用 Rust 处理 14 GB 文件—第 3 部分— Azure 堆栈

周末编码和写作

medium.com](https://medium.com/dev-genius/processing-14-gb-files-with-rust-part-3-azure-stacks-13dcf9dde014)

然而,最终总是要做出“制造还是购买”的决定。对于一个构建者来说,我真的很喜欢在 Heroku 上开始开发、部署和设置 DevOps 功能是多么容易。

Heroku,所有必要的插件都是现成的,比如 build pack,cron jobs 的设置大多简单明了。

[## Heroku 发展中心

了解如何在 Heroku 上构建、部署和管理您的应用。

devcenter.heroku.com](https://devcenter.heroku.com/)

Heroku 中的 CRON 任务非常容易设置。在 Procfile 中简单添加

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CRON 作业设置—按作者分类的屏幕截图

并根据需要进入 Heroku UI 配置您的调度程序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

设置用户界面-按作者截图

决赛成绩

最后,为了儿子,每天晚上八点半,短信到了。我还为 Heroku 和 Twilio 服务使用了免费层,因此总成本为 0 美元。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

短信-作者截图

结束语

  1. 建筑创意通常来源于现实生活。享受它,倾听它,感受它。
  2. 当你建造的时候,你需要考虑规模。考虑为您的用例获得最大的好处;这又回到了我们的日常工作中。降低信息技术基础设施成本不是好事;这是必须要有的。你如何建造它的基础。一个很好的例子是为什么我总是跟踪容器构建大小,这是您的运行时足迹的最重要指标,它将影响您的云运行时成本。等等。
  3. 正确编码,规模编码,低成本编码。

这就是这周的内容。顺便说一句,我儿子对我做的东西非常兴奋。现在我们将一起开始编写 python 代码。

再次感谢你花时间阅读我的周末建设和学习。下次见。

请看我下面的其他文章,了解更多你可能感兴趣的周末建设和学习。

[## 魏黄-中号

声明:我在媒体上写的文章仅与我的学习和观点相关。不会代表或…

medium.com。](https://medium.com/@jayhuang75)

使用 PyCaret 和 Streamlit 构建和部署机器学习 web 应用程序

原文:https://towardsdatascience.com/build-and-deploy-machine-learning-web-app-using-pycaret-and-streamlit-28883a569104?source=collection_archive---------12-----------------------

在 Heroku PaaS 上部署机器学习应用程序的初学者指南

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

概述

在我们关于在云中部署机器学习管道的上一篇文章中,我们演示了如何在 PyCaret 中开发机器学习管道,用 Docker 封装 Flask 应用程序,以及使用 AWS Fargate 部署无服务器。如果你以前没有听说过 PyCaret,你可以阅读这个公告来了解更多。

在本教程中,我们将使用 PyCaret 训练一个机器学习管道,并使用 Streamlit 开源框架创建一个 web 应用。这个 web 应用程序将是一个简单的界面,供业务用户使用训练有素的机器学习管道在新的数据集上生成预测。

本教程结束时,您将能够构建一个功能完整的 web 应用程序,使用经过训练的机器学习模型来生成在线预测(逐个)和批量预测(通过上传 csv 文件)。最终的应用程序如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://pycaret-streamlit.herokuapp.com

👉您将在本教程中学到什么

  • 什么是部署,我们为什么要部署机器学习模型?
  • 开发一个机器学习管道,用 PyCaret 训练模型。
  • 使用 Streamlit 开源框架构建一个简单的 web 应用。
  • 在“Heroku”上部署一个 web 应用程序,并查看运行中的模型。

本教程将涵盖整个工作流程,从训练机器学习模型和开发 Python 中的管道开始,使用 streamlit 开发简单的 web 应用程序,并在 Heroku 云平台上部署应用程序。

过去,我们讨论过使用 docker 的容器化以及在 Azure、GCP 和 AWS 等云平台上的部署。如果你有兴趣了解更多,你可以阅读下面的故事:

💻本教程的工具箱

PyCaret

PyCaret 是 Python 中的一个开源、低代码机器学习库,用于训练和部署机器学习管道和模型到生产中。PyCaret 可以使用 pip 轻松安装。

pip install **pycaret**

细流

Streamlit 是一个开源的 Python 库,可以轻松地为机器学习和数据科学构建漂亮的定制 web 应用。使用 pip 可以轻松安装 Streamlit。

pip install **streamlit**

开源代码库

GitHub 是一个基于云的服务,用于托管、管理和控制代码。假设你在一个大型团队中工作,团队中有很多人(有时有数百人)在做改变。PyCaret 本身就是一个开源项目的例子,在这个项目中,数百名社区开发人员不断地贡献源代码。如果你以前没有用过 GitHub,你可以注册免费账号。

赫罗库

Heroku 是一个平台即服务(PaaS ),支持基于托管容器系统部署 web 应用,具有集成的数据服务和强大的生态系统。简而言之,这将允许您将应用程序从本地机器带到云中,这样任何人都可以使用 Web URL 访问它。在本教程中,我们选择了 Heroku 进行部署,因为当您注册新帐户时,它会提供免费资源。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

机器学习工作流程(从培训到 PaaS 部署)

✔️Let’s 开始吧……

为什么要部署机器学习模型?

机器学习模型的部署是将模型投入生产的过程,以便 web 应用程序、企业软件和 API 可以使用经过训练的模型,并使用新的数据点生成预测。

通常构建机器学习模型,以便它们可以用于预测结果(二进制值,即用于分类的 1 或 0,用于回归的连续值,用于聚类的标签等)。预测新数据点有两种主要方法:

👉在线预测

在线预测场景适用于您希望为每个数据点逐个生成预测的情况。例如,您可以使用预测来立即决定某个特定交易是否可能是欺诈性的。

👉批量预测

当您想要一次为一组观测值生成预测时,批量预测非常有用。例如,如果您想决定将哪些客户作为产品广告活动的目标,您将获得所有客户的预测分数,对这些分数进行排序以确定哪些客户最有可能购买,然后将最有可能购买的前 5%客户作为目标。

在本教程中,我们将建立一个应用程序,可以做到这两个;通过上传包含新数据点的 csv 文件进行在线预测和批量预测。

设置业务环境

一家保险公司希望通过使用住院时的人口统计和基本患者健康风险指标来更好地预测患者费用,从而改善其现金流预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

( )数据来源 )

目标

使用训练有素的机器学习模型和管道,构建支持在线(逐个)以及批量预测的 web 应用程序。

任务

  • 使用 PyCaret 训练、验证和开发机器学习管道。
  • 构建一个前端 web 应用程序,具有两个功能:(一)在线预测和(二)批量预测。
  • 在 Heroku 上部署 web 应用程序。一旦部署,它将成为公开可用的,并可以通过网址访问。

👉任务 1 —模型训练和验证

培训和模型验证是在集成开发环境(IDE)或笔记本电脑中进行的,可以在本地机器上进行,也可以在云上进行。如果您以前没有使用过 PyCaret,单击此处了解更多关于 PyCaret 的信息,或者在我们的网站上查看入门教程

在本教程中,我们进行了两个实验。第一个实验是使用 PyCaret 中的默认预处理设置进行的。第二个实验有一些额外的预处理任务,如缩放和归一化、自动特征工程和宁滨连续数据到区间。参见第二个实验的设置代码:

**# Experiment No. 2**from **pycaret.regression** import *****r2 = **setup**(data, target = 'charges', session_id = 123,
           normalize = True,
           polynomial_features = True, trigonometry_features = True,
           feature_interaction=True, 
           bin_numeric_features= ['age', 'bmi'])

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两个实验的信息网格比较

神奇的事情只发生在几行代码中。请注意,在实验 2 中,转换后的数据集有 62 个用于训练的特征,这些特征仅来自原始数据集中的 6 个特征。所有的新特性都是 PyCaret 中的转换和自动特性工程的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

转换后数据集中的列

PyCaret 中模型定型的示例代码:

# Model Training and Validation 
lr = **create_model**('lr')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

线性回归模型的 10 倍交叉验证

注意转换和自动特征工程的影响。R2 不费吹灰之力就增加了 10%。我们可以比较两个实验的线性回归模型的残差图,并观察转换和特征工程对模型的异方差的影响。

# plot residuals of trained model **plot_model**(lr, plot = 'residuals')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

线性回归模型的残差图

机器学习是一个迭代的过程。迭代的次数和其中使用的技术取决于任务的关键程度,以及预测错误时的影响。在医院的 ICU 中实时预测患者结果的机器学习模型的严重性和影响远远超过为预测客户流失而建立的模型。

在本教程中,我们只执行了两次迭代,第二次实验中的线性回归模型将用于部署。然而,在这个阶段,模型仍然只是笔记本/ IDE 中的一个对象。要将其保存为可以传输到其他应用程序并由其他应用程序使用的文件,请执行以下代码:

# save transformation pipeline and model 
**save_model**(lr, model_name = 'deployment_28042020')

当您在 PyCaret 中保存一个模型时,基于在 setup() 函数中定义的配置的整个转换管道被创建。所有的相互依赖都是自动编排的。查看存储在“deployment_28042020”变量中的管道和模型:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 PyCaret 创建的管道

我们已经完成了培训和模型选择。最终的机器学习管道和线性回归模型现在保存为 pickle 文件(deployment_28042020.pkl ),该文件将在 web 应用程序中用于生成对新数据点的预测。

👉任务 2 —构建 Web 应用程序

现在我们的机器学习管道和模型已经准备好了,我们将开始构建一个前端 web 应用程序,它可以在新的数据点上生成预测。该应用程序将通过 csv 文件上传支持“在线”以及“批量”预测。让我们将应用程序代码分成三个主要部分:

标题/布局

该部分导入库,加载训练模型,并创建一个基本布局,顶部有一个徽标,一个 jpg 图像,边栏上有一个下拉菜单,用于在“在线”和“批量”预测之间切换。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

app.py —代码片段第 1 部分

在线预测

本节介绍应用程序的第一个功能,即在线(逐个)预测。我们使用 streamlit 小部件,如数字输入、文本输入、下拉菜单和复选框来收集用于训练模型的数据点,如年龄、性别、身体质量指数、儿童、吸烟者、地区。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

app.py —代码片段第 2 部分

批量预测

这部分处理第二个功能,即批量预测。我们已经使用 streamlit 的 file_uploader 小部件上传了一个 csv 文件,然后从 PyCaret 调用原生的 predict_model() 函数来生成使用 streamlit 的 write()函数显示的预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

app.py —代码片段第 3 部分

如果您还记得上面的任务 1,我们最终确定了一个线性回归模型,该模型使用 6 个原始特征提取了 62 个特征。然而,我们的 web 应用程序的前端有一个输入表单,只收集六个特征,即年龄、性别、bmi、儿童、吸烟者、地区。

我们如何将新数据点的 6 个特征转换成用于训练模型的 62 个特征?我们不需要担心这一部分,因为 PyCaret 通过编排转换管道自动处理这一部分。当您在使用 PyCaret 定型的模型上调用 predict 函数时,在从定型模型生成预测之前,会自动(按顺序)应用所有转换。

在 Heroku 上发布应用程序之前的最后一步是在本地测试 web 应用程序。打开 Anaconda 提示符,导航到您的项目文件夹并执行以下代码:

**streamlit** run app.py

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简化应用测试—在线预测

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简化应用测试—批量预测

👉任务 3 —在 Heroku 上部署 Web 应用程序

既然模型已经训练好了,机器学习管道已经准备好了,应用程序也已经在我们的本地机器上测试过了,我们就可以开始在 Heroku 上部署了。有几种方法可以将你的应用程序源代码上传到 Heroku 上。最简单的方法是将 GitHub 库链接到您的 Heroku 帐户。

如果你愿意跟随,你可以从 GitHub 中派生出这个。如果你不知道怎么叉一个回购,请看这个官方 GitHub 教程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www.github.com/pycaret/pycaret-deployment-streamlit

到目前为止,您已经熟悉了存储库中的所有文件,除了三个文件:“requirements.txt”、“setup.sh”和“Procfile”。让我们看看这些是什么:

requirements.txt

requirements.txt 文件是一个文本文件,包含执行应用程序所需的 python 包的名称。如果这些软件包没有安装在应用程序运行的环境中,它将会失败。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

requirements.txt

setup.sh

setup.sh 是为 bash 编写的脚本。它包含用 Bash 语言编写的指令,类似 requirements.txt,它用于为我们的 streamlit 应用程序在云上运行创建必要的环境。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

setup.sh

Procfile

Procfile 只是一行代码,它向 web 服务器提供启动指令,指示当应用程序被触发时应该执行哪个文件。在本例中,“Procfile”用于执行 setup.sh ,这将为 streamlit 应用程序创建必要的环境,第二部分“streamlit run app.py”用于执行应用程序(这类似于您在本地计算机上执行 streamlit 应用程序的方式)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Procfile

一旦所有文件都上传到 GitHub 存储库,我们现在就可以开始在 Heroku 上部署了。请遵循以下步骤:

第一步——在 heroku.com 上注册,点击“创建新应用”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Heroku 仪表板

步骤 2 —输入应用名称和地区

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Heroku —创建新应用程序

步骤 3 —连接到您的 GitHub 库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Heroku —连接到 GitHub

步骤 4 —部署分支

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Heroku —部署分支

第 5 步—等待 10 分钟,然后爆炸

App 发布到网址:https://pycaret-streamlit.herokuapp.com/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://pycaret-streamlit.herokuapp.com/

PyCaret 2.0.0 来了!

我们收到了来自社区的大力支持和反馈。我们正在积极改进 PyCaret,并准备我们的下一个版本。 PyCaret 2.0.0 会更大更好。如果您想分享您的反馈并帮助我们进一步改进,您可以在网站上填写此表格,或者在我们的 GitHubLinkedIn 页面上发表评论。

关注我们的 LinkedIn ,订阅我们的 YouTube 频道,了解更多关于 PyCaret 的信息。

想了解某个特定模块?

从第一个版本 1.0.0 开始,PyCaret 有以下模块可供使用。点击下面的链接,查看 Python 中的文档和工作示例。

分类
回归
聚类
异常检测 自然语言处理
关联规则挖掘

另请参见:

笔记本中的 PyCaret 入门教程:

聚类
异常检测
自然语言处理
关联规则挖掘
回归
分类

你愿意投稿吗?

PyCaret 是一个开源项目。欢迎每个人都来投稿。如果您愿意投稿,请随时关注未决问题。dev-1.0.1 分支上的单元测试接受拉请求。

如果你喜欢 PyCaret,请给我们 GitHub 回购的⭐️。

中:https://medium.com/@moez_62905/

领英:https://www.linkedin.com/in/profile-moez/

推特:【https://twitter.com/moezpycaretorg1 T43

通过堆叠库来构建和部署简单的 ML 工具

原文:https://towardsdatascience.com/build-and-deploy-simple-ml-tools-by-stacking-coolest-librairies-f7cb94bad53d?source=collection_archive---------34-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由 Max Duzij 拍照

在线课程非常适合学习数据科学机器学习的概念。但最终,人们总是想知道数据分析师或数据科学家的角色是否仅仅是通过编写代码来回答问题🤷‍♂️.

让我们想象下面的讨论:

本:嘿,我们营销团队想知道下个月投资产品 A 广告的最佳时间是什么时候。有可能预测未来的谷歌搜索趋势吗?

嗯,我想我可以在谷歌趋势上看看趋势是如何随着时间演变的。我们应该能够应用一些预测方法来了解下个月的搜索情况。

本:那太好了!

你 : 好的,我要从一些关键词中导出谷歌趋势数据。然后我会编写一个小模型,然后把预测图发给你。

(第二天):谢谢你的报告,我们改变了一点想法,你能为 B 产品做同样的事情吗?

你好,当然可以。

Ben (2 小时后):最后,我们想看看整个季度的预测,看看再等一会儿是否更明智。

: Mmmh 是…

(2 小时后):还有,有没有可能在接下来的 6 个月里比较 C 和 D?

:😓

你知道我的意思…

允许其他人使用、交互和修改模型,而无需进入代码,这使得事情对每个人来说都更有趣。

在本教程中,我们将看到用非常简单的工具构建这个趋势预测应用的不同步骤。最后,它会看起来像这个:

让我们看看它会是什么样子🙄

教程中包含了所有的代码和 GitHub repo。

在更复杂的问题上,当然会更困难,但思维是相同的:通过数据将信息直接带到需要的地方

步骤#0:环境设置

在一头扎进去之前要做的第一件事就是准备好你的工作环境

虚拟环境

在这里(像在任何项目中一样),我们将使用几个。为了完全控制你使用的工具,建议你在虚拟环境中工作。

我们将使用 Anaconda ,这是一个 Python 发行版,提供了一个名为 conda 的包管理工具。它将允许我们轻松地更新和安装我们开发所需的库。

[## Anaconda |世界上最受欢迎的数据科学平台

数据科学的现代世界是极其动态的。每天都有新的挑战出现,不可思议的挑战也是如此…

www.anaconda.com](https://www.anaconda.com/)

下载最新版本的 Anaconda ,然后运行程序“Anaconda Prompt”。我们也可以使用 GUI,但我们不会在这部分花太多时间。

在 Anaconda 命令提示符下,配置一个新环境,激活它,并安装基本包。

conda create -n trends-predictor python
conda activate trends-predictor
conda install pandas numpy matplotlib

我们将继续安装其他软件包。

要轻松编辑您的代码,请选择您喜欢的 IDE,并根据您的虚拟环境的需要进行配置。为了简单起见,我将使用与 anaconda 一起安装的 Spyder。要启动它,请在命令提示符下键入spyder

Git/GitHub

我们开始好看了!最后一件事,我们初始化我们的 git 存储库,并将其链接到 GitHub 。我把细节传到这里,网上有很多教程。

为什么用在这里?剧透:最后,我们会用 Heroku 来部署我们的应用,从 GitHub repo 来做非常简单。

git bash 中,键入:

echo "# trends-predictor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin <https://github.com/elliottrabac/trend-predictor.git>
git push -u origin master

好了,现在一切都准备好了,该编码了。我们将分几个步骤来完成这项工作

  1. 自动存取数据
  2. 对未来做出预测
  3. 让每个人都能使用你的工具

步骤 1:访问数据🧲

有很多方法可以访问数据,我们可以从哪里下载 csv 格式的文件,然后将它们导入到我们的程序中。问题是非常手动…

为了自动化这一切,我们可以使用报废工具。或者直接使用查询浏览页面的 HTML 内容,或者甚至使用 Selenium 再现用户的动作。

但是我们会让它变得更好/更简单。有一个包叫“ pytrends ”,就是用 python 拉 google trends 的。

💡提示:在编码之前,一定要检查工作是否已经完成。可能已经有一个库或 GitHub repo 来完成这项工作。

首先,我们需要安装那个包。你可以在这里找到 pytrends API 的完整文档。

[## pytrends

谷歌趋势的非官方 API 允许从谷歌趋势自动下载报告的简单界面。只有…

pypi.org](https://pypi.org/project/pytrends/)

使用pip安装软件包(在您的虚拟环境中):

pip install pytrends

拉谷歌趋势

让我们创建一个新的 python 脚本,并从导入必要的包开始:

import pandas as pd
import pytrends
from pytrends.request import TrendReq

使用pytrend非常简单,并且有很好的文档记录,所以我们将直奔主题。

你所要做的就是和谷歌(和TrendReq)建立连接,用你要找的关键词(以列表的形式)构建查询,然后应用想要的方法。这里我们希望搜索的演变显示在 Google Trends 的兴趣随时间变化部分,所以我们使用:interest_over_time()

我们将通过删除isPartial 列并重命名其他列来预测下一步(预测)。

这是一只熊猫。我们需要的数据框架。在函数中,它看起来像这样:

第二步:做预测🔮

现在是时候预测未来了!我们这里是以时间序列预测为例。

时间序列预测是使用模型根据以前观察到的值来预测未来值。—维基百科

为了预测下一个值,我们有一整套可能的工具和概念。我们可以使用统计方法,如 ARMA,AMIRA,甚至 SARIMAX 模型🤯今天,我们也发现针对这类问题的非常强大的深度学习模型,比如经典的 MLP、CNN、RNN,以及它们更高级的形式。

我们将保持它的简单和高效,我们将使用 脸书的先知 。像任何模型一样,它有它的优点和缺点;但是我们在这里不是为了讨论使用哪种算法(在线课程对此很有帮助)。

[## 快速启动

Prophet 遵循 sklearn 模型 API。我们创建一个 Prophet 类的实例,然后调用它的 fit 和 predict…

facebook.github.io](https://facebook.github.io/prophet/docs/quick_start.html)

我们从在工作环境中安装fbprophet开始:

conda install -c conda-forge fbprophet

做预测

我们将创建一个新函数make_pred(),它将数据集和预测周期的长度作为参数。

用一种非常简单的方式,我们创建一个新的Prophet()对象和fit数据集的模型。这个必须总是有两个名为dsy的列(就像我们之前做的一样)。

我们用make_futur_dataframe()扩展包含日期的列。然后我们用predict()预测未来值,它返回一个带有预测的数据帧。
当然,你可以在这里玩一些“超参数”。所有信息一如既往地保存在文档中。

绘制预测图

但是不要忘了我们的朋友本,我们的目标是给他一个好的、易懂的图表📈。

这里我们用先知的plot()方法。而且既然一点点细节无伤大雅,我们也用plot_components()给他提供一些额外的信息。

就是这样!现在,我们有了针对所需关键字的预测图。

如果您正在使用 Spyder IDE,您可以在变量浏览器和绘图选项卡中看到您的数据帧和图形。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Spyder IDE 中的图形

第三步:在网上发送🚀

现在我们到了最精彩的部分!

您可以自己进行预测,并以报告形式发送。但是在这里,我们将允许任何人选择关键词,预测选项,所有这些都在一个 UX 友好界面中!

创建 web 应用程序

我们使用一个增长强劲的库, Streamlit (你可以在最后用趋势预测应用程序来检查它😉)

[## Streamlit -创建数据应用程序的最快方式

Streamlit 是一个面向机器学习和数据科学团队的开源应用框架。在…中创建漂亮的数据应用程序

www.streamlit.io](https://www.streamlit.io/)

不需要 web 开发技能,不需要用 Flask 或 Django 构建接口,一切都在一个脚本中完成,只需几行代码。

从安装库开始。

pip install streamlit

并将其导入到脚本中。

import streamlit as st

不赘述,Streamlit 一行一行的,在界面显示 Streamlit 元素。

我们首先向页面添加一个标题:

st.write("""
# Trend Predictor App :crystal_ball:
### This app predicts the **Google Trend** you want!
""")

现在我们把一些元素放在边栏中,这将允许用户选择参数。

  • keyword将显示为文本字段并将取内容的值,这里的默认值是"太阳镜"。
  • pediod将在 7 到 365 天之间显示为滑块,默认值为 100。
  • details是显示为复选框的布尔变量。
st.sidebar.write("""
## Pick a keyword and a forecasting period :dizzy:
""")keyword = st.sidebar.text_input("Keyword", "Sunglasses")
periods = st.sidebar.slider('Prediction time in days:', 7, 365, 90)
details = st.sidebar.checkbox("Show details")

要显示我们使用的图形:

st.pyplot(fig1)
if details:  # if detail checkbox set to True
    st.write("### Details :mag_right:")
    st.pyplot(fig2)

这个库中有很多很棒的工具,这里的文档也很棒!✨:我们只是在我们的get_data()函数上面添加了一个装饰器:

@st.cache(suppress_st_warning=True)

@st.cache decorator 表示 Streamlit 将执行内部魔术,这样任何缓存的操作都将只运行一次,并被缓存以备将来使用。

我们将在页面中添加一些配置元素,包括:

st.beta_set_page_config(page_title="Trend Predictor",
                               page_icon=":crystal_ball",
                               layout='centered',
                               initial_sidebar_state='auto')

一点都不差!我们来看看当地是什么样子的?

为此,请在您的脚本所在的文件夹中打开一个终端,然后键入:

streamlit run trend-prediction.py

🤩🤩🤩

这是应用程序✨的完整代码

在网络上部署它

在你把链接发给本之前做最后一次努力💪。

您可以通过在 web 上部署应用程序来完成您的工作。而 Heroku 是做到这一点的完美工具!易于使用,免费,快速。

[## 云应用平台| Heroku

无论您是在构建简单的原型还是关键业务产品,Heroku 的全托管平台都能为您提供…

www.heroku.com](https://www.heroku.com/)

我不打算用所有的部署来延长这个教程,只需在谷歌上键入“Streamlit Heroku”。

🛑唯一要小心的是!当你要创建你的requirements.txt文件时,你需要添加一个额外的库。我们安装了预言者和康达,但是 Heroku 也需要pystan。考虑一下加进去就行了。

[## elliottrabac/趋势预测器

此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…

github.com](https://github.com/elliottrabac/trend-predictor)

结论

在本教程中,我们已经看到了组合不同的库来处理构建过程的每一步是可能的。当然,这个项目非常“理论化”:预测是基本的,不允许根据数据集调整参数。

但这里最重要的是全局心态。这至少允许快速测试事物,验证假设,并且将事物发送给你的团队!

快乐学习!🥂外星人

关于我 👨‍💻:

我是一名工科学生,最大的热情是学习新事物。从事机械工程 5 年后,我通过网上可以找到的令人难以置信的资源学习了数据科学。我试着通过写几个帖子来回馈和继续学习。

请随时给我反馈或联系我讨论任何话题! ✌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值