计算机与AI

计算机与AI 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

数据科学科班出身,专注分享计算机和人工智能相关知识。
微信公众号/bi站/知乎:计算机与AI

个人动态

计算机与AI 发布了文章 · 10月28日

调包侠的炼丹福利:使用 Keras Tuner 自动进行超参数调整

使用Keras Tuner进行超参数调整可以将您的分类神经网络网络的准确性提高10%。

这篇文章将解释如何使用Keras Tuner和Tensorflow 2.0执行自动超参数调整,以提高计算机视觉问题的准确性。

假如您的模型正在运行并产生第一组结果。但是,它们与您期望的最高结果相去甚远。您缺少一个关键步骤:超参数调整!

在本文中,我们将逐步完成整个超参数调整流程。完整的代码可以在Github上找到

什么是超参数调整以及为什么要注意

机器学习模型具有两种类型的参数:

  • 可训练参数,由算法在训练过程中学习。例如,神经网络的权重是可训练的参数。
  • 超参数,需要在启动学习过程之前进行设置。学习率或密集层中的单元数是超参数。

即使对于小型模型,超参数也可能很多。调整它们可能是真正的难题,但值得挑战:良好的超参数组合可以极大地改善模型的性能。在这里,我们将看到在一个简单的CNN模型上,它可以帮助您在测试集上获得10%的精度!

幸运的是,开放源代码库可为您自动执行此步骤!

Tensorflow 2.0和Keras Tuner

Tensorflow是一个广泛使用的开源机器学习库。Tensorflow 2.0于2019年9月发布,具有重大改进,尤其是在用户友好方面。有了这个新的版本,Keras,更高级别的Python的深度学习的API,成为Tensorflow的主要API。

不久之后,Keras团队发布了Keras Tuner,该库可轻松使用Tensorflow 2.0执行超参数调整。这篇文章将展示如何将其与应用程序一起用于对象分类。它还将包括库中可用的不同超参数调整方法的比较。

Keras Tuner现在退出测试版!v1在PyPI上不可用。https://t.co/riqnIr4auA

适用于Keras及更高版本的功能全面,可扩展,易于使用的超参数调整。pic.twitter.com/zUDISXPdBw

-弗朗索瓦CHOLLET(@fchollet)2019 10月31日,

使用Keras Tuner进行超参数调整

在深入研究代码之前,请先了解一些有关Keras Tuner的理论。它是如何工作的?

首先,定义一个调谐器。它的作用是确定应测试哪些超参数组合。库搜索功能执行迭代循环,该循环评估一定数量的超参数组合。通过在保持的验证集中计算训练模型的准确性来执行评估。

最后,就验证精度而言,最好的超参数组合可以在暂留的测试集上进行测试。

入门

让我们开始吧!通过本教程,您将拥有一条端到端管道,以调整简单卷积网络的超参数,以在CIFAR10数据集上进行对象分类。

安装步骤

首先,从终端安装Keras Tuner:

现在,您可以打开自己喜欢的IDE /文本编辑器,并在本教程的其余部分中启动Python脚本!

数据集

本教程使用CIFAR10数据集。CIFAR10是计算机视觉中常见的基准数据集。它包含10个类别,相对较小,有60000张图像。这个大小允许相对较短的训练时间,我们将利用它来执行多个超参数调整迭代。

加载和预处理数据:

调谐器期望浮点数作为输入,而除以255是数据归一化步骤。

模型建立

在这里,我们将尝试使用简单的卷积模型将每个图像分类为10个可用类之一。

每个输入图像将经过两个卷积块(2个卷积层,后跟一个池化层)和一个Dropout层以进行正则化。最后,每个输出均被展平,并经过密集层,该密集层将图像分类为10类之一。

在Keras中,此模型可以定义如下: 

搜索空间定义

要执行超参数调整,我们需要定义搜索空间,即哪些超参数需要优化以及在什么范围内。在这里,对于这个相对较小的模型,已经有6个超参数可以调整:

  • 三个Dropout层的Dropout率
  • 卷积层的卷积核数
  • 全连接层神经元个数
  • 激活函数

在Keras Tuner中,超参数具有类型(可能是Float,Int,Boolean和Choice)和唯一名称。然后,需要设置一组帮助指导搜索的选项:

  • Float和Int类型的最小值,最大值和默认值
  • 选择类型的一组可能值
  • (可选)线性,对数或反向对数内的采样方法。设置此参数可增加您可能对调优参数的了解。我们将在下一节中看到如何使用它来调整学习率
  • 可选地,一个步长值,即两个超参数值之间的最小步长

例如,要设置超参数“过滤器数量”,您可以使用:

全连接层层具有两个超参数,神经元数量和激活函数:

模型编译

然后,让我们继续进行模型编译,其中还存在其他超参数。在编译步骤中,将定义优化器以及损失函数和度量。在这里,我们将分类熵用作损失函数,将准确性用作度量标准。对于优化器,可以使用不同的选项。我们将使用流行的亚当

在这里,代表学习算法进展速度的学习速率通常是重要的超参数。通常,学习速度以对数刻度选择。通过设置采样方法,可以将这些先验知识合并到搜索中:

Keras Tuner超模型

为了将整个超参数搜索空间放在一起并执行超参数调整,Keras Tuners使用了“ HyperModel”实例。超模型是库引入的可重用的类对象,定义如下:

该库已经为计算机视觉提供了两个现成的超模型HyperResNet和HyperXception。

选择调谐器

Keras Tuner提供了主要的超参数调整方法:随机搜索,超频带和贝叶斯优化。

在本教程中,我们将重点介绍随机搜索和超带宽。我们不会涉及理论,但是如果您想了解有关随机搜索和贝叶斯优化的更多信息,我写了一篇有关它的文章:用于超参数调整的贝叶斯优化。至于Hyperband,其主要思想是根据搜索时间优化随机搜索。

对于每个调谐器,可以为实验可重复性定义种子参数:SEED = 1

随机搜寻

执行超参数调整的最直观方法是随机采样超参数组合并进行测试。这正是RandomSearch调谐器的功能!

目标是优化功能。调谐器根据其值推断是最大化问题还是最小化问题。

然后,max_trials变量代表调谐器将测试的超参数组合的数量,而execution_per_trial变量则是出于健壮性目的而应构建并适合于每个试验的模型数量。下一节将说明如何设置它们

超频

调谐器的超参数?

您可能想知道在整个过程中看到必须为不同的调谐器设置几个参数的有用性:

但是,这里的问题与超参数的确定略有不同。实际上,此处的这些设置将主要取决于您的计算时间和资源。您可以执行的试验次数越多越好!关于时期的数量,最好是知道模型需要收敛多少个时期。您还可以使用提前停止来防止过度拟合。

超参数调整

一旦建立了模型和调谐器,就可以轻松获得任务的摘要:

调整可以开始了!

搜索功能将训练数据和验证拆分作为输入,以执行超参数组合评估。epochs参数用于随机搜索和贝叶斯优化,以定义每种超参数组合的训练历元数。

最后,搜索结果可以归纳如下:

结果

您可以在Github上找到此结果。在RTX 2080 GPU上运行后获得以下结果:

Keras Tuner结果。最差的基准:使用随机搜索的一组超参数之一实现最差的验证准确性的模型。默认基线:通过将所有超参数设置为其默认值获得。

这些结果与CIFAR10数据集上的最新模型所达到的99.3%的准确性相差甚远,但对于如此简单的网络结构而言,还算不错。您已经看到基线和调整后的模型之间有了显着的改进,在“随机搜索”和第一个基线之间的准确性提高了10%以上。

总体而言,Keras Tuner库是一个不错的易于学习的选项,可以为Keras和Tensorflow 2.O模型执行超参数调整。您必须要做的主要步骤是调整模型以适合超模型格式。实际上,该库中目前没有几个标准的超模型。

补充文档和教程可在Keras Tuner的网站及其Github存储库中找到


如果你喜欢本文的话,欢迎点赞转发!谢谢。

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

​往期精彩链接:

为什么Python中有各种各样的“_”下划线?分别有什么用?

使用Keras Tuner进行超参数调整可以将您的分类神经网络网络的准确性提高10%。

这篇文章将解释如何使用Keras Tuner和Tensorflow 2.0执行自动超参数调整,以提高计算机视觉问题的准确性。

假如您的模型正在运行并产生第一组结果。但是,它们与您期望的最高结果相去甚远。您缺少一个关键步骤:超参数调整!

在本文中,我们将逐步完成整个超参数调整流程。完整的代码可以在Github上找到

什么是超参数调整以及为什么要注意

机器学习模型具有两种类型的参数:

  • 可训练参数,由算法在训练过程中学习。例如,神经网络的权重是可训练的参数。
  • 超参数,需要在启动学习过程之前进行设置。学习率或密集层中的单元数是超参数。

即使对于小型模型,超参数也可能很多。调整它们可能是真正的难题,但值得挑战:良好的超参数组合可以极大地改善模型的性能。在这里,我们将看到在一个简单的CNN模型上,它可以帮助您在测试集上获得10%的精度!

幸运的是,开放源代码库可为您自动执行此步骤!

Tensorflow 2.0和Keras Tuner

Tensorflow是一个广泛使用的开源机器学习库。Tensorflow 2.0于2019年9月发布,具有重大改进,尤其是在用户友好方面。有了这个新的版本,Keras,更高级别的Python的深度学习的API,成为Tensorflow的主要API。

不久之后,Keras团队发布了Keras Tuner,该库可轻松使用Tensorflow 2.0执行超参数调整。这篇文章将展示如何将其与应用程序一起用于对象分类。它还将包括库中可用的不同超参数调整方法的比较。

Keras Tuner现在退出测试版!v1在PyPI上不可用。https://t.co/riqnIr4auA

适用于Keras及更高版本的功能全面,可扩展,易于使用的超参数调整。pic.twitter.com/zUDISXPdBw

-弗朗索瓦CHOLLET(@fchollet)2019 10月31日,

使用Keras Tuner进行超参数调整

在深入研究代码之前,请先了解一些有关Keras Tuner的理论。它是如何工作的?

首先,定义一个调谐器。它的作用是确定应测试哪些超参数组合。库搜索功能执行迭代循环,该循环评估一定数量的超参数组合。通过在保持的验证集中计算训练模型的准确性来执行评估。

最后,就验证精度而言,最好的超参数组合可以在暂留的测试集上进行测试。

入门

让我们开始吧!通过本教程,您将拥有一条端到端管道,以调整简单卷积网络的超参数,以在CIFAR10数据集上进行对象分类。

安装步骤

首先,从终端安装Keras Tuner:

现在,您可以打开自己喜欢的IDE /文本编辑器,并在本教程的其余部分中启动Python脚本!

数据集

本教程使用CIFAR10数据集。CIFAR10是计算机视觉中常见的基准数据集。它包含10个类别,相对较小,有60000张图像。这个大小允许相对较短的训练时间,我们将利用它来执行多个超参数调整迭代。

加载和预处理数据:

调谐器期望浮点数作为输入,而除以255是数据归一化步骤。

模型建立

在这里,我们将尝试使用简单的卷积模型将每个图像分类为10个可用类之一。

每个输入图像将经过两个卷积块(2个卷积层,后跟一个池化层)和一个Dropout层以进行正则化。最后,每个输出均被展平,并经过密集层,该密集层将图像分类为10类之一。

在Keras中,此模型可以定义如下: 

搜索空间定义

要执行超参数调整,我们需要定义搜索空间,即哪些超参数需要优化以及在什么范围内。在这里,对于这个相对较小的模型,已经有6个超参数可以调整:

  • 三个Dropout层的Dropout率
  • 卷积层的卷积核数
  • 全连接层神经元个数
  • 激活函数

在Keras Tuner中,超参数具有类型(可能是Float,Int,Boolean和Choice)和唯一名称。然后,需要设置一组帮助指导搜索的选项:

  • Float和Int类型的最小值,最大值和默认值
  • 选择类型的一组可能值
  • (可选)线性,对数或反向对数内的采样方法。设置此参数可增加您可能对调优参数的了解。我们将在下一节中看到如何使用它来调整学习率
  • 可选地,一个步长值,即两个超参数值之间的最小步长

例如,要设置超参数“过滤器数量”,您可以使用:

全连接层层具有两个超参数,神经元数量和激活函数:

模型编译

然后,让我们继续进行模型编译,其中还存在其他超参数。在编译步骤中,将定义优化器以及损失函数和度量。在这里,我们将分类熵用作损失函数,将准确性用作度量标准。对于优化器,可以使用不同的选项。我们将使用流行的亚当

在这里,代表学习算法进展速度的学习速率通常是重要的超参数。通常,学习速度以对数刻度选择。通过设置采样方法,可以将这些先验知识合并到搜索中:

Keras Tuner超模型

为了将整个超参数搜索空间放在一起并执行超参数调整,Keras Tuners使用了“ HyperModel”实例。超模型是库引入的可重用的类对象,定义如下:

该库已经为计算机视觉提供了两个现成的超模型HyperResNet和HyperXception。

选择调谐器

Keras Tuner提供了主要的超参数调整方法:随机搜索,超频带和贝叶斯优化。

在本教程中,我们将重点介绍随机搜索和超带宽。我们不会涉及理论,但是如果您想了解有关随机搜索和贝叶斯优化的更多信息,我写了一篇有关它的文章:用于超参数调整的贝叶斯优化。至于Hyperband,其主要思想是根据搜索时间优化随机搜索。

对于每个调谐器,可以为实验可重复性定义种子参数:SEED = 1

随机搜寻

执行超参数调整的最直观方法是随机采样超参数组合并进行测试。这正是RandomSearch调谐器的功能!

目标是优化功能。调谐器根据其值推断是最大化问题还是最小化问题。

然后,max_trials变量代表调谐器将测试的超参数组合的数量,而execution_per_trial变量则是出于健壮性目的而应构建并适合于每个试验的模型数量。下一节将说明如何设置它们

超频

调谐器的超参数?

您可能想知道在整个过程中看到必须为不同的调谐器设置几个参数的有用性:

但是,这里的问题与超参数的确定略有不同。实际上,此处的这些设置将主要取决于您的计算时间和资源。您可以执行的试验次数越多越好!关于时期的数量,最好是知道模型需要收敛多少个时期。您还可以使用提前停止来防止过度拟合。

超参数调整

一旦建立了模型和调谐器,就可以轻松获得任务的摘要:

调整可以开始了!

搜索功能将训练数据和验证拆分作为输入,以执行超参数组合评估。epochs参数用于随机搜索和贝叶斯优化,以定义每种超参数组合的训练历元数。

最后,搜索结果可以归纳如下:

结果

您可以在Github上找到此结果。在RTX 2080 GPU上运行后获得以下结果:

Keras Tuner结果。最差的基准:使用随机搜索的一组超参数之一实现最差的验证准确性的模型。默认基线:通过将所有超参数设置为其默认值获得。

这些结果与CIFAR10数据集上的最新模型所达到的99.3%的准确性相差甚远,但对于如此简单的网络结构而言,还算不错。您已经看到基线和调整后的模型之间有了显着的改进,在“随机搜索”和第一个基线之间的准确性提高了10%以上。

总体而言,Keras Tuner库是一个不错的易于学习的选项,可以为Keras和Tensorflow 2.O模型执行超参数调整。您必须要做的主要步骤是调整模型以适合超模型格式。实际上,该库中目前没有几个标准的超模型。

补充文档和教程可在Keras Tuner的网站及其Github存储库中找到


如果你喜欢本文的话,欢迎点赞转发!谢谢。

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

​往期精彩链接:

为什么Python中有各种各样的“_”下划线?分别有什么用?image.png

查看原文

赞 0 收藏 0 评论 0

计算机与AI 发布了文章 · 10月27日

可视化数据科学中的概率分布以帮你更好地理解各种分布

在某些分布假设下,某些机器学习模型被设计为最佳工作。因此,了解我们正在使用哪个发行版可以帮助我们确定最适合使用哪些模型。

介绍

拥有良好的统计背景可能对数据科学家的日常生活大有裨益。每次我们开始探索新的数据集时,我们首先需要进行 探索性数据分析(EDA),以了解某些功能的主要特征是什么。如果我们能够了解数据分布中是否存在任何模式,则可以量身定制最适合我们的案例研究的机器学习模型。这样,我们将能够在更短的时间内获得更好的结果(减少优化步骤)。实际上,某些机器学习模型被设计为在某些分布假设下效果最佳。因此,了解我们正在使用哪些发行版可以帮助我们确定最适合使用哪些模型。

同类型的数据

我们正在与一个数据集工作,每次,我们的数据代表一个 样本 从 人口。然后,使用此样本,我们可以尝试了解其主要模式,以便我们可以使用它对整个人口进行预测(即使我们从未有机会检查整个人口)。

假设我们要根据一组特定功能来预测房屋的价格。我们也许可以在线找到一个包含旧金山所有房价的数据集(我们的样本),并且进行一些统计分析之后,我们也许可以对美国任何其他城市的房价做出相当准确的预测(我们的人口)。

数据集由两种主要类型的数据组成: 数字 (例如整数,浮点数)和 分类 (例如名称,笔记本电脑品牌)。

数值数据还可以分为其他两类: 离散 和 继续。离散数据只能采用某些值(例如学校中的学生人数),而连续数据可以采用任何实数或分数值(例如身高和体重的概念)。

从离散随机变量中,可以计算出 概率质量函数,而从连续随机变量中,可以得出 概率密度函数

概率质量函数给出了一个变量可以等于某个值的概率,相反,概率密度函数的值本身并不是概率,因为它们首先需要在给定范围内进行积分。

自然界中存在许多不同的概率分布(概率分布流程图),在本文中,我将向您介绍数据科学中最常用的概率分布。

首先,让我们导入所有必需的库:

伯努利分布

伯努利分布是最容易理解的分布之一,可用作导出更复杂分布的起点。

这种分布只有两个可能的结果和一个试验。

一个简单的例子可以是抛掷偏斜/无偏硬币。在此示例中,可以认为结果可能是正面的概率等于p, 而  对于反面则是 (1-p)(包含所有可能结果的互斥事件的概率总和为1)。

在下图中,我提供了一个偏向硬币情况下伯努利分布的例子。

均匀分布

均匀分布可以很容易地从伯努利分布中得出。在这种情况下,结果的数量可能不受限制,并且所有事件的发生概率均相同。

例如,想象一下一个骰子的掷骰。在这种情况下,存在多个可能的事件,每个事件都有相同的发生概率。

二项分布

二项分布可以被认为是遵循伯努利分布的事件结果的总和。因此,二项分布用于二元结果事件,成功和失败的可能性在所有后续试验中均相同。此分布采用两个参数作为输入:事件发生的次数和分配给两个类别之一的概率。

一个实际的二项式分布的简单示例可以是重复一定次数的有偏/无偏硬币的抛掷。

改变偏差量将改变分布的外观(如下图所示)。

二项分布的主要特征是:

  • 给定多个试验,每个试验彼此独立(一项试验的结果不会影响另一项试验)。
  • 每个试验只能导致两个可能的结果(例如,获胜或失败),其概率分别为 p 和 (1- p)

如果给出成功的概率(p)和试验次数(n),则可以使用以下公式计算这n次试验中的成功概率(x)(下图)。

正态(高斯)分布

正态分布是数据科学中最常用的分布之一。我们日常生活中发生的许多常见现象都遵循正态分布,例如:经济中的收入分布,学生的平均报告,人口的平均身高等。此外,小的随机变量的总和还导致:通常遵循正态分布(中心极限定理)。

“在概率论中, 中心极限定理 (CLT)确定,在某些情况下,当添加独立随机变量时,即使原始变量本身未呈正态分布,其适当归一化的和也趋于正态分布。”

—维基百科[](https://en.wikipedia.org/wiki...

可以帮助我们识别正态分布的一些特征是:

  • 曲线在中心对称。因此,均值,众数和中位数都等于相同的值,从而使所有值围绕均值对称分布。
  • 分布曲线下的面积等于1(所有概率之和必须等于1)。

可以使用以下公式得出正态分布(下图)。

使用正态分布时,分布平均值和标准偏差起着非常重要的作用。如果我们知道它们的值,则只需检查概率分布即可轻松找出预测精确值的概率(下图)。实际上,由于分布特性,68%的数据位于平均值的一个标准偏差范围内,95%的数据位于平均值的两个标准偏差范围内,99.7%的数据位于平均值的三个标准偏差范围内。

许多机器学习模型被设计为遵循正态分布的最佳使用数据。一些例子是:

  • 高斯朴素贝叶斯分类器
  • 线性判别分析
  • 二次判别分析
  • 基于最小二乘的回归模型

此外,在某些情况下,还可以通过应用对数和平方根之类的转换将非正常数据转换为正常形式。

泊松分布

泊松分布通常用于查找事件可能发生或不知道事件通常发生的频率。此外,泊松分布还可用于预测事件在给定时间段内可能发生多少次。

例如,保险公司经常使用泊松分布来进行风险分析(例如,在预定时间范围内预测车祸事故的数量),以决定汽车保险的价格。

当使用Poisson Distributions时,我们可以确信发生不同事件之间的平均时间,但是事件发生的确切时刻在时间上是随机间隔的。

泊松分布可以使用以下公式建模(下图),其中 λ 表示一个时期内可能发生的预期事件数。

描述泊松过程的主要特征是:

  1. 事件彼此独立(如果事件发生,则不会改变另一个事件发生的可能性)。
  2. 一个事件可以发生任何次数(在定义的时间段内)。
  3. 两个事件不能同时发生。
  4. 事件发生之间的平均速率是恒定的。

在下图中,显示了改变周期(λ)中可能发生的事件的预期数目如何改变泊松分布。

指数分布

最后,指数分布用于对不同事件发生之间的时间进行建模。

举例来说,假设我们在一家餐厅工作,并且希望预测到到不同顾客进入餐厅之间的时间间隔。针对此类问题使用指数分布,可能是一个理想的起点。

指数分布的另一个常见应用是生存分析(例如,设备/机器的预期寿命)。

指数分布由参数λ调节。λ值越大,指数曲线到十年的速度就越快(下图)。

指数分布使用以下公式建模(下图)。

​如果你喜欢本文的话,欢迎点赞转发!谢谢。

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

查看原文

赞 0 收藏 0 评论 0

计算机与AI 发布了文章 · 10月25日

手把手教你理解决策树:从概念到应用

全文2.5K字,建议阅读时间5分钟。

尽管决策树在机器学习中的使用已经存在了一段时间,但该技术仍然强大且受欢迎。本指南首先提供对该方法的介绍性知识,然后向您展示如何构建决策树,计算重要的分析参数以及绘制结果树。

决策树是我学到的流行且功能强大的机器学习算法之一。这是一种非参数监督学习方法,可用于分类和回归任务。目的是创建一个模型,该模型通过学习从数据特征推断出的简单决策规则来预测目标变量的值。对于分类模型,目标值本质上是离散的,而对于回归模型,目标值由连续值表示。与黑盒算法(例如神经网络)不同, 决策树 比较容易理解,因为它共享内部决策逻辑(您将在下一节中找到详细信息)。

尽管许多数据科学家认为这是一种旧方法,但由于过度拟合的问题,他们可能对其准确性有所怀疑,但最近的基于树的模型(例如,随机森林(装袋法),梯度增强(提升方法) )和XGBoost(增强方法)建立在决策树算法的顶部。因此,决策树 背后的概念和算法 非常值得理解!

决策树算法有4种流行类型: ID3CART(分类树和回归树)卡方方差减少。

在此文章中,我将仅关注分类树以及ID3和CART的说明。

想象一下,您每个星期日都打网球,并且每次都邀请您最好的朋友克莱尔(Clare)陪伴您。克莱尔有时会加入,但有时不会。对她而言,这取决于许多因素,例如天气,温度,湿度和风。我想使用下面的数据集来预测克莱尔是否会和我一起打网球。一种直观的方法是通过决策树。

在此 决策树 图中,我们具有:

  1. 根节点:决定整个总体或样本数据的第一个拆分应进一步分为两个或更多同构集合。在我们的例子中,是Outlook节点。
  2. 拆分:这是将一个节点分为两个或多个子节点的过程。
  3. 决策节点:该节点决定是否/何时将一个子节点拆分为其他子节点。在这里,我们有Outlook节点,Humidity节点和Windy节点。
  4. 叶子:预测结果(分类或连续值)的终端节点。有色节点(即“是”和“否”节点)是叶子。
问题:基于哪个属性(功能)进行拆分?最佳分割是什么?

答:使用具有最高的属性信息增益基尼增益

ID3(迭代二分法)

ID3决策树算法使用信息增益来确定分裂点。为了衡量我们获得了多少信息,我们可以使用 来计算样本的同质性。

问题:什么是“熵”?它的功能是什么?

答:这是对数据集中不确定性量的度量。 熵控制决策树如何决定拆分 _数据。它实际上影响_决策树_如何  绘制边界。_

熵方程:

定义:决策树中的熵代表同质性。

如果样本是完全均匀的,则熵为0(概率= 0或1),并且如果样本均匀地分布在各个类别中,则其熵为1(概率= 0.5)。

下一步是进行拆分,以最大程度地减少熵。我们使用 信息增益 来确定最佳拆分。

让我向您展示在打网球的情况下如何逐步计算信息增益。在这里,我仅向您展示如何计算Outlook的信息增益和熵。

步骤1:计算一个属性的熵—预测:克莱尔将打网球/克莱尔将不打网球

在此示例中,我将使用此列联表来计算目标变量的熵:已播放?(是/否)。有14个观测值(10个“是”和4个“否”)。'是'的概率(p)为0.71428(10/14),'否'的概率为0.28571(4/14)。然后,您可以使用上面的公式计算目标变量的熵。

步骤2:使用列联表计算每个特征的熵

为了说明这一点,我以Outlook为例,说明如何计算其熵。共有14个观测值。汇总各行,我们可以看到其中5个属于Sunny,4个属于阴雨,还有5个属于Rainy。因此,我们可以找到晴天,阴天和多雨的概率,然后使用上述公式逐一计算它们的熵。计算步骤如下所示。

计算特征2(Outlook)的熵的示例。

定义:信息增益 是节点分裂时熵值的减少或增加。

信息增益方程式:

X_在_Y_上获得的信息_

sklearn.tree。_DecisionTreeClassifier: _“熵”表示获取信息

为了可视化如何使用信息增益构建决策树 ,我仅应用了sklearn.tree。DecisionTreeClassifier 生成图。

步骤3:选择信息增益最大的属性  作为根节点

“湿度”的信息增益最高,为0.918。湿度是根节点。

步骤4_:_ 熵为0的分支是叶节点,而熵大于0的分支需要进一步拆分。

步骤5:以ID3算法递归地增长节点,直到对所有数据进行分类。

您可能听说过C4.5算法,对ID3的改进使用了“ 增益比” 作为信息增益的扩展。使用增益比的优点是通过使用Split Info标准化信息增益来处理偏差问题。在这里我不会详细介绍C4.5。有关更多信息,请在此处签出  (DataCamp)。

CART(分类和回归树)

CART的另一种决策树算法使用 Gini方法 创建分割点,包括_Gini索引(Gini杂质)和Gini增益。_

基尼系数的定义:通过随机选择标签将错误的标签分配给样品的概率,也用于测量树中特征的重要性。

在为每个属性计算Gini增益后,创建sklearn.tree。DecisionTreeClassifier 将选择具有最大Gini增益的属性  作为根节点。 以0基尼分支是叶节点,而具有基尼分支大于0需要进一步分裂。递归地增长节点,直到对所有数据进行分类为止(请参见下面的详细信息)。

如前所述,CART还可以使用不同的分割标准来处理回归问题:确定分割点的均方误差(MSE)。回归树的输出变量是数字变量,输入变量允许连续变量和分类变量混合使用。您可以通过DataCamp查看有关回归树的更多信息 。

大!您现在应该了解如何计算熵,信息增益,基尼系数和基尼增益!

问题:那么……我应该使用哪个?基尼系数还是熵?

答:通常,结果应该是相同的……我个人更喜欢基尼指数,因为它不涉及计算量更大的 日志 。但是为什么不都尝试。

让我以表格形式总结一下!

使用Scikit Learn构建决策树

Scikit Learn 是针对Python编程语言的免费软件机器学习库。

步骤1:导入数据

步骤2:将分类变量转换为虚拟变量/指标变量

“温度”,“ Outlook”和“风”的类别变量都转换为虚拟变量。

步骤3:将训练集和测试集分开

第4步:通过Sklean导入决策树分类器

步骤5:可视化决策树图

有关代码和数据集,请点击此处查看

为了提高模型性能(超参数优化),应调整超参数。有关更多详细信息,请在 此处查看

决策树的主要缺点是过拟合,尤其是当树特别深时。幸运的是,最近的基于树的模型(包括随机森林和XGBoost)建立在决策树算法的顶部,并且它们通常具有强大的建模技术,并且比单个决策树更具动态性,因此性能更好。因此,了解背后的概念和算法 决策树 完全 是构建学习数据科学和机器学习打下良好的基础超级有用。


总结:现在您应该知道

  • 如何构造决策树
  • 如何计算“熵”和“信息增益”
  • 如何计算“基尼系数”和“基尼系数”
  • 最佳分割是什么?
  • 如何在Python中绘制决策树图

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

查看原文

赞 0 收藏 0 评论 1

计算机与AI 发布了文章 · 10月23日

一份超级完整实用的 PyCharm 图解教程,8K 字赶紧收藏起来

转载自今日头条:Python之眼

PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率。那么具体如何使用呢?本文从 PyCharm 安装到插件、外部工具、专业版功能等进行了一一介绍,希望能够帮助到大家。

在本文中,我们并不会提供非常完善的指南,但是会介绍 PyCharm 最主要的一些能力,了解这些后,后面就需要我们在实践中再具体学习了。

本文将介绍:

  • PyCharm 安装
  • 在 PyCharm 中写代码
  • 在 PyCharm 中运行代码
  • 在 PyCharm 中进行代码 debug 和测试
  • 在 PyCharm 中编辑已有项目
  • 在 PyCharm 中搜索和导航
  • 在 PyCharm 中使用版本控制
  • 在 PyCharm 中使用插件和外部工具
  • 使用 PyCharm Professional 功能,如 Django 支持和科学模式

本文假设读者熟悉 Python 开发,且计算机中已安装某个版本的 Python。该教程将使用 Python 3.6 版本,屏幕截图和 demo 均来自 macOS 系统。由于 PyCharm 可在所有主流平台上运行,读者在其他系统中会看到略微不同的 UI 元素,可能需要调整某些命令。

PyCharm 安装

本文将使用 PyCharm Community Edition 2019.1 版本,该版本免费且可在所有主流平台上使用。只有最后一部分「PyCharm Professional 功能」使用的是 PyCharm Professional Edition 2019.1 版本。

推荐使用 JetBrains Toolbox App 安装 PyCharm。使用该 App,你可以安装不同的 JetBrains 产品或者同一产品的不同版本,并在必要的情况下更新、回滚和轻松删除任意工具。你还可以在恰当的 IDE 及版本中快速打开任意项目。

Toolbox App 安装指南,参见 JetBrains 官方文档:www.jetbrains.com/help/pychar…

该 App 会根据你的操作系统提供合适的安装说明。如果它无法无法准确识别系统,你可以在右上角的下拉列表中找到合适的系统。

安装成功后,启动该 app 并接受用户协议。在 Tools 选项下,你可以看到一个可用产品列表。从中找到 PyCharm Community,并点击 Install。

好啦,现在你的机器上已经安装 PyCharm 了。如果不想使用 Toolbox app,你可以单独安装 PyCharm。

启动 PyCharm,你将看到导入设置弹窗。PyCharm 会自动检测出这是首次安装,并为你选择「Do not import settings」选项。点击 OK,之后 PyCharm 会让你选择键盘映射(keymap scheme)。保留默认设置,点击右下角的「Next: UI Themes」:

PyCharm 将询问选择深色模式 Darcula 还是浅色模式。你可以选择自己喜欢的模式,并点击「Next: Launcher Script」:

本教程将使用深色模式 Darcula。

在下一个页面上,直接保留默认设置,并点击「Next: Featured plugins」,这时 PyCharm 将展示可用插件列表。点击「Start using PyCharm」,现在你可以写代码了!

在 PyCharm 中写代码

在 PyCharm 中,你可以在「项目」中执行任意操作。因此,首先你需要创建一个项目。

安装和打开 PyCharm 后,你会看到欢迎页面。点击「Create New Project」,出现「New Project」弹窗:

指定项目位置,打开 Project Interpreter 列表,选择创建新的项目解释器或者使用已有的解释器。选择「New environment using」,打开其右方的下拉列表,选择 Virtualenv、Pipenv 或 Conda。这些工具可以为不同项目单独创建 Python 环境,从而分别保存不同项目所需的依赖项。

你可以选择其中任意一个,本教程使用的是 Virtualenv。选择后,指定环境位置,从 Python 解释器列表中选择要安装在系统中的 base interpreter。通常,保持默认设置即可。下面有两个可选框:在新环境中继承全局包环境、令当前环境可以用其它所有项目,两个都不要选。

点击右下角的「Create」,创建新项目:

屏幕上出现「Tip of the Day」弹窗,在每次启动时 PyCharm 通过该弹窗提供 trick。关掉该弹窗。

现在我们可以开始新的 Python 程序了。如果你使用的是 Mac 系统,使用 Cmd+N 键;如果你使用的是 Windows 或 Linux 系统,使用 Alt+Ins 键。然后选择 Python File。你也可以在菜单中选择 File → New。将新文件命名为 guess_game.py 并点击 OK。你将看到如下 PyCharm 窗口:

至于测试代码,我们来快速写一个简单的猜谜游戏,即程序选择一个数字让用户来猜,在每一次猜测时,程序将告诉用户他猜的数字比神秘数字大还是小,用户猜中数字时游戏结束。以下是该游戏的代码:

直接键入上述代码,而不是复制粘贴。你会看到如下画面:

如上图所示,PyCharm 提供 Intelligent Coding Assistance 功能,可以执行代码补全、代码检查、错误高亮显示和快速修复建议。比如键入 main 并点击 tab 键,PyCharm 会自动补全整个 main 从句。

此外,如果你在条件句前忘记键入 if,在该句子最后增添.if 并点击 Tab 键,PyCharm 将修复该 if 条件句。该用法同样适用于 True.while。这即是 PyCharm 的 Postfix Completion 功能,它可以帮助用户减少退格键使用次数。

在 PyCharm 中运行代码

现在你已经编码完成该游戏,可以运行了。

该游戏程序有三种运行方式:

1.在 Mac 系统中使用快捷键 Ctrl+Shift+R,在 Windows 或 Linux 系统中,使用快捷键 Ctrl+Shift+F10。

2.右键单击背景,从菜单中选择「Run 『guess_game』」。

3.由于该程序具备__main__ 从句,你可以点击__main__ 从句左侧的绿色小箭头,选择「Run 『guess_game』」。

使用以上任一方式运行该程序,窗口底部会出现终端面板(Terminal pane),显示你的代码输出结果:

你可以玩一下这个游戏,看看自己能否猜中数字。(专业建议:从 50 开始猜。)

在 PyCharm 中进行代码 debug

找到神秘数字了吗?如果找到了,你可能会看到一些奇怪的东西:程序没有打印出祝贺信息和显示退出按钮,而是重新开始了。这就是 bug 所在。要想发现程序重新开始的原因,你需要 debug。

首先,点击第 8 行代码左侧的空白区域,设置断点:

断点即程序运行到这一行时会自动停止,你可以探索断点处之后的代码有什么错误。接下来,从以下三种方式中选择一种开始 debug:

1.在 Mac 系统中使用 Ctrl+Shift+D 键,在 Windows 或 Linux 系统中使用 Shift+Alt+F9 键。

2.右键单击背景,选择「Debug 『guess_game』」。

3.点击__main__从句左侧的绿色小箭头,选择「Debug 『guess_game』」。

之后,你将看到底部出现 Debug 窗口:

按照下列步骤执行程序 debug:

1.注意当前行被蓝色高亮显示。

2.Debug 窗口显示 random_int 及其值。记录该数字。(上图中该数字为 85。)

3.点击 F8 执行当前代码行,并执行到下一行代码。如有必要,你也可以使用 F7 跳转到当前行内的函数。随着你继续执行语句,变量的变化将自动呈现在 Debugger 窗口。

4.注意 Debugger 标签右侧有一个 Console 标签。Console 标签和 Debugger 标签相互独立。你可以在 Console 中与程序进行交互,在 Debugger 中执行 debug 动作。

5.转向 Console 标签,进入猜测过程。

6.键入左侧 Debugger 标签中显示的数字,点击 Enter 键。

7.转回 Debugger 标签。

8.再次点击 F8,计算 if 语句。注意现在你在第 14 行。为什么不是第 11 行呢?因为第 10 行的 if 语句被计算为 False。那么为什么当你键入数字后它算出来为 False 了呢?

9.仔细看第 10 行,注意我们在对比 user_guess 和一个错误的项。我们应该对比用户猜测的数字和 random_int,但此处我们对比的是 randint(从 random 包导入的函数)。

10.将 randint 更改为 random_int,按照同样的步骤重新开始 debug。你会发现,这一次到达的是第 11 行,第 10 行算出来为 True:

恭喜你,bug 被修复了!

在 PyCharm 中进行代码测试

不经单元测试的应用都不可靠。PyCharm 可以帮助你快速舒适地写单元测试并运行。默认情况下,unittest 被用作测试运行器,而 PyCharm 还支持其他测试框架,如 pytest、nose、doctest、tox 和 trial。例如,你可以按照以下步骤为项目选择 pytest 测试运行器:

1.打开 Settings/Preferences → Tools → Python Integrated Tools 设置对话框。

2.在默认测试运行器字段中选择 pytest。

3.点击 OK 保存该设置。

本教程的示例将使用默认测试运行器 unittest。

在同一个项目中,创建文件 calculator.py,并将以下 Calculator 类放入该文件:

PyCharm 使得为已有代码创建测试变得轻而易举。打开 calculator.py 文件,执行以下步骤中的任意一个:

在 Mac 系统中使用 Shift+Cmd+T 键,在 Windows 或 Linux 系统中使用 Ctrl+Shift+T。

右键单击该类的背景,选择「Go To and Test」。

在主菜单中吗,选择 Navigate → Test。

选择「Create New Test…」,得到以下窗口:

Target directory、Test file name 和 Test class name 这三项均保留默认设置。选中上图中两种需要测试的方法并点击 OK。好了!PyCharm 自动创建文件 test_calculator.py,并在其中创建了以下 stub test:

使用以下方法中的任意一个运行测试:

在 Mac 系统中使用 Ctrl+R 键,在 Windows 或 Linux 系统中使用 Shift+F10 键。

右键单击背景,选择「Run 『Unittests for test_calculator.py』」。

点击测试类名称左侧的绿色小箭头,选择「Run 『Unittests for test_calculator.py』」。

你将看到底部出现测试窗口,所有测试均失败:

注意,左侧是测试结果的层次结构,右侧是终端的输出。现在,将代码更改成以下代码,实现 test_add:

重新运行测试,你会看到一个测试通过了,另一个则失败。按照如下操作探索不同选项,来展示已通过测试和被忽略测试,按照字母顺序对测试进行排序,以及按照时长对测试进行排序:

注意,上图中的 sleep(0.1) 方法的作用是使其中一个测试变慢,以便按时长对测试进行排序。

在 PyCharm 中编辑已有项目

单文件项目非常适合作为示例,但你通常需要处理较大的项目。这部分将介绍如何使用 PyCharm 处理较大项目。

为了探索 PyCharm 以项目为中心的特征,你将使用 Alcazar web 框架(该框架用于学习目的)。在本地复制该 repo

当你在本地已有项目时,使用以下方法中的任意一个在 PyCharm 中打开项目:

在主菜单中点击 File → Open。

在欢迎页面点击 Open。

之后,在计算机中找到包含该项目的文件夹,并打开。

如果该项目包含虚拟环境,PyCharm 将自动使用该虚拟环境,并将它作为项目解释器。

如果你需要配置不同的虚拟环境 virtualenv,在 Mac 上打开 Preferences,或在 Windows 或 Linux 系统中使用 Ctrl+Alt+S 打开 Settings,找到 Project: ProjectName。打开下拉列表,选择 Project Interpreter:

从下拉列表中选择 virtualenv。如果没有要选择的项,则点击下拉列表右方的设置按钮选择 Add…。其余步骤和创建新项目的步骤相同。

在 PyCharm 中搜索和导航

在大项目中,我们很难记住每个事物的位置,因此快速导航和搜索非常重要。PyCharm 可以提供这些功能。接下来,我们使用上一节中打开的项目,实践以下快捷键:

在当前文件中搜索代码段:在 Mac 系统中使用 Cmd+F 键,在 Windows 或 Linux 系统中使用 Ctrl+F 键。

在整个项目中搜索代码段:在 Mac 系统中使用 Cmd+Shift+F 键,在 Windows 或 Linux 系统中使用 Ctrl+Shift+F 键。

搜索类:在 Mac 系统中使用 Cmd+O 键,在 Windows 或 Linux 系统中使用 Ctrl+N 键。

搜索文件:在 Mac 系统中使用 Cmd+Shift+O 键,在 Windows 或 Linux 系统中使用 Ctrl+Shift+N 键。

如果你不知道要搜索的是文件、类还是代码段,则搜索全部:按两次 Shift 键。

导航可使用以下快捷键:

前往变量的声明:在 Mac 系统中使用 Cmd 键,在 Windows 或 Linux 系统中使用 Ctrl 键,然后单击变量。

寻找类、方法或文件的用法:使用 Alt+F7 键。

查看近期更改:使用 Shift+Alt+C 键,或者在主菜单中点击 View → Recent Changes。

查看近期文件:在 Mac 系统中使用 Cmd+E 键,在 Windows 或 Linux 系统中使用 Ctrl+E 键,或者在主菜单中点击 View → Recent Files。

多次跳转后在导航历史中前进和后退:在 Mac 系统中使用 Cmd+[ / Cmd+] 键,在 Windows 或 Linux 系统中使用 Ctrl+Alt+Left / Ctrl+Alt+Right 键。

PyCharm 中的版本控制

版本控制系统(如 Git 和 Mercurial)是现代软件开发世界中最重要的工具之一。因此,IDE 必须支持版本控制。PyCharm 在这方面做得很好,它集成了大量流行的版本控制系统,如 Git(和 Github (github.com/))、Mercurial、Perforce 和 Subversion。

注:以下示例中使用的版本控制系统为 Git。

配置版本控制系统(VCS)

要想实现 VCS 集成,你需要在顶部菜单点击 VCS → VCS Operations Popup…,或者在 Mac 系统中使用 Ctrl+V 键,在 Windows 或 Linux 系统中使用 Alt+` 键。选择 Enable Version Control Integration…,你将看到以下窗口:

从下拉列表中选择 Git,点击 OK,这样你就为项目设置好了 VCS。(注意,如果你打开的已有项目已经具备版本控制系统,PyCharm 将会发现并自动使用该版本控制系统。)

这时如果你前往 VCS Operations Popup…,你会发现一个不同的弹窗,它具备选项 git add、git stash、git branch、git commit、git push 等等:

如果你找不到所需要的选项,你可以在顶部菜单中点击 VCS,选择 Git,在这里你可以创建和查看 pull request。

提交和冲突处理

这是 PyCharm 中 VCS 集成的两大特征,我个人经常使用并且非常喜欢。假如你完成了工作,打算提交,前往 VCS → VCS Operations Popup… → Commit…,或者在 Mac 系统中使用 Cmd+K 键,在 Windows 或 Linux 系统中使用 Ctrl+K 键。你将看到如下窗口:

在该窗口中,你可以:

  • 选择要提交的文件
  • 写下提交信息
  • 在提交前执行各项检查
  • 查看更改

点击右下角 Commit 按钮旁边的箭头,选择 Commit and Push…,从而一次性完成提交和 push。

是不是感觉很神奇很迅速?特别是如果你以前经常通过命令行手动执行这些任务时。

团队合作中会出现合并冲突(merge conflict)。当一个人对你正在处理的文件提交更改时,你们二人更改了同一行导致更改重叠,这时 VCS 无法决定选择你的更改还是队友的更改。那么你可以使用以下箭头和符号来解决这个问题:

看起来很奇怪,我们很难分辨应该删除哪些更改、保留哪些更改。不要怕,PyCharm 来了!它可以用更好、更简洁的方法解决冲突。在顶部菜单中前往 VCS,选择 Git,然后选择 Resolve conflicts…。选择存在冲突的文件,点击 Merge,出现以下窗口:

在左侧列中,你可以查看自己做的更改。在右侧列中,可以查看队友做的更改。而中间列则显示结果。存在冲突的代码行被高亮显示,你可以在它们旁边看到 X 和 >>/<<。点击箭头表示接受更改,点击 X 则表示拒绝更改。解决所有冲突后,点击 Apply 按钮:

在上图中,对于第一个冲突行,作者选择拒绝自己的更改,接受队友的更改。而在第二个冲突行中,作者接受了自己的更改,拒绝了队友的更改。

使用 PyCharm 中的 VCS 集成还可以执行很多操作。

在 PyCharm 中使用插件和外部工具

在 PyCharm 中你可以找到开发所需的几乎所有功能。如果没找到,那么很可能存在一个插件,向 PyCharm 提供你需要的功能。例如,它们可以:

添加多语言和多框架支持

使用快捷键提示(shortcut hint)、文件监视器(file watcher)等提升你的生产效率

利用代码练习,帮助你学习新的编程语言

例如,IdeaVim 插件向 PyCharm 添加 Vim 模拟。如果你喜欢 Vim,这个插件可以实现不错的结合。

Material Theme UI 插件可将 PyCharm 的外观改变为 Material Design 的外观:

Vue.js 插件使 PyCharm 支持 Vue.js 项目。Markdown 插件使得在 IDE 内可以编辑 Markdown 文件,并实时预览渲染后的 HTML。

在 Mac 系统上点击 Preferences → Plugins,在 Windows 或 Linux 系统中点击 Settings → Plugins,你可以在 Marketplace 标签下找到和安装所有可用插件:

如果仍然没找到所需插件,你甚至可以自己开发一个。

如果你找不到合适的插件,又不想自己开发,因为 PyPI 上有可用的包,你可以将这个包作为外部工具添加到 PyCharm。以代码分析器 Flake8 为例。

首先,在所选 Terminal app 中键入 pip install flake8,从而在虚拟环境中安装 Flake8。或者也可以使用 PyCharm 集成的 Terminal:

在 Mac 系统上点击 Preferences → Tools,在 Windows 或 Linux 系统中点击 Settings → Tools,选择 External Tools。然后点击底部 (1) 处的 + 按钮。在弹出的窗口中,输入细节并在两个窗口中点击 OK,如下图所示:

上图中,Program (2) 指 Flake8,你可以在虚拟环境文件夹(bin)中找到它。Arguments (3) 表示你想用 Flake8 分析的文件。Working directory 表示项目目录。

你可以把这里所有项的绝对路径写死,但这就意味着你无法在其他项目中使用该外部工具,只能在一个项目中针对一个文件使用该工具。

因此你需要使用 Macros。它是

格式的变量,根据语境而变化。例如,当你编辑 first.py 时,

为 first.py,当你编辑 second.py 时,

为 second.py。你可以查看它们的列表,点击 Insert Macro… 按钮将其中一个插入。此处你使用了 macros,它们的值会根据你目前处理的项目而改变,Flake8 将继续准确执行其工作。

要想使用它,你需要创建文件 example.py,并在其中写入以下代码:

上述代码故意破坏了 Flake8 的一些规则。右键单击文件背景,选择 External Tools → Flake8。Flake8 分析结果将出现在窗口底部:

为了使效果更好,你可以为其添加快捷键。在 Mac 系统中选择 Preferences,在 Windows 或 Linux 系统中选择 Settings。然后,点击 Keymap → External Tools → External Tools。双击 Flake8,选择 Add Keyboard Shortcut,出现以下窗口:

上图中,快捷键是 Ctrl+Alt+A(本教程使用该快捷键)。你可以在文本框中添加喜欢的快捷键,然后在两个窗口中点击 OK。然后,你就可以用该快捷键,在 Flake8 的帮助下分析目前在处理的文件了。

PyCharm Professional 功能

PyCharm Professional 是 PyCharm 的付费版本,具备更多开箱即用的功能和集成。这部分将概览其主要功能,以及官方文档链接(其中详细介绍了每一项功能)。记住,以下功能在 PyCharm Community 版本中均不可用。

Django 支持

Django 是最流行和最受喜爱的 Python web 框架,PyCharm 对 Django 提供广泛的支持。要确保对 Django 的支持,需要执行以下步骤:

1.在 Mac 系统中打开 Preferences,在 Windows 或 Linux 系统中打开 Settings。

2.选择 Languages and Frameworks。

3.选择 Django。

4.检查复选框 Enable Django support。

5.应用更改。

现在确保了对 Django 的支持,你在 PyCharm 中的 Django 开发之旅将轻松很多。具体而言在创建项目时,你会得到一个专用的 Django 项目类型。这表示,当你选择该类型时,你将拥有所有必要文件和设置。这等同于使用 django-admin startproject mysite。

你也可以在 PyCharm 内直接运行 manage.py 命令。目前支持的 Django 模板,包括以下一些:

  • 语法和错误高亮显示
  • 代码补全
  • 导航
  • block 名称补全
  • 自定义标签和过滤器补全
  • 标签和过滤器的快速文档
  • 模板 debug 能力

除此之外,我们还可以在其他 Django 部分(如视图、URL 和模型)中执行代码补全、对 Django ORM 提供代码追踪支持(code insight support)、对 Django 模型提供模型依赖项关系图。

数据库支持

现代数据库开发是一个复杂的任务,需要多个支持系统和工作流。这也是 JetBrains 开发独立 IDE DataGrip 的原因。DataGrip 是独立于 PyCharm 的产品,二者的应用场景和授权都不相同。

但幸运的是,通过 Database tools and SQL 插件(该插件默认开启),PyCharm 可以支持 DataGrip 中的所有特性。在该插件的帮助下,你可以查询、创建和管理数据库,不管数据库在本地、服务器,还是在云端。该插件支持 MySQL、PostgreSQL、Microsoft SQL Server、SQLite、MariaDB、Oracle、Apache Cassandra 等。

线程并发可视化(Thread Concurrency Visualization)

Django Channels、asyncio 和近期框架(如 Starlette (www.starlette.io/))表明异步 Python 编程正逐渐成为趋势。异步编程具备很多好处,但很难写,也很难 debug。在此类案例中,Thread Concurrency Visualization 就是医生,帮助你全面管理多线程应用并进行优化。

Profiler

说到优化,profiling 是另一种代码优化方法。profiling 可以帮助你查看代码的哪一部分占用了最多的执行时间。profiler 运行的优先级如下:

  1. vmprof
  2. yappi
  3. cProfile

科学模式

Python 不仅是通用和 web 编程语言,由于 NumPy、SciPy、scikit-learn、Matplotlib、Jupyter 等库和工具的加持,Python 成为数据科学和机器学习领域的最优工具。有了这些强大工具,你还需要一个强大的 IDE 来支持这些库所具备的绘图、分析等所有功能。

远程开发

很多应用出现 bug 的一个常见原因是,开发环境和生产环境不同。尽管在大多数情况下,开发时完美复制生产环境并不现实,但力求实现完美复刻是值得追寻的目标。

在 PyCharm 的帮助下,你可以使用另一台计算机(如 Linux VM)上的解释器对应用进行 debug。这样,你就可以拥有与生产环境一样的解释器了,从而避免很多因开发环境和生产环境差异导致的 bug。

结论

PyCharm 是最好的 Python 开发 IDE 之一。它提供大量优势,帮助执行例行任务,从而节约大量时间。学完本教程,现在你知道如何利用 PyCharm 提高生产效率了吗?

原文链接

往期精彩链接:

Python中 init的通俗解释

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

查看原文

赞 1 收藏 1 评论 0

计算机与AI 发布了文章 · 10月20日

用 Python 加载数据的 5 种不同方式

数据是数据科学家的基础,因此了解许多加载数据进行分析的方法至关重要。在这里,我们将介绍五种Python数据输入技术,并提供代码示例供您参考。

作为初学者,您可能只知道一种使用_p andas.read_csv_ 函数读取数据的方式(通常以CSV_格式)_。它是最成熟,功能最强大的功能之一,但其他方法很有帮助,有时肯定会派上用场。

我要讨论的方法是:

  • Manual 函数
  • loadtxt 函数
  • genfromtxtf 函数
  • read_csv 函数
  • Pickle

我们将用于加载数据的数据集可以在此处找到 。它被称为100-Sales-Records。

Imports

我们将使用Numpy,Pandas和Pickle软件包,因此将其导入。

1. Manual Function

这是最困难的,因为您必须设计一个自定义函数,该函数可以为您加载数据。您必须处理Python的常规归档概念,并使用它来读取 .csv 文件。

让我们在100个销售记录文件上执行此操作。

嗯,这是什么????似乎有点复杂的代码!!!让我们逐步打破它,以便您了解正在发生的事情,并且可以应用类似的逻辑来读取 自己的 _.csv_文件。

在这里,我创建了一个 load_csv 函数,该函数将要读取的文件的路径作为参数。

我有一个名为_data_ 的列表, 它将具有我的CSV文件数据,而另一个列表 col 将具有我的列名。现在,在手动检查了csv之后,我知道列名在第一行中,因此在我的第一次迭代中,我必须将第一行的数据存储在 col中, 并将其余行存储在 _data中_。

为了检查第一次迭代,我使用了一个名为_checkcol_ 的布尔变量, 它为False,并且在第一次迭代中为false时,它将第一行的数据存储在 col中 ,然后将_checkcol_ 设置 为True,因此我们将处理 _数据_列表并将其余值存储在 _数据_列表中。

逻辑

这里的主要逻辑是,我使用_readlines()_ Python中的函数在文件中进行了迭代 。此函数返回一个列表,其中包含文件中的所有行。

当阅读标题时,它会将新行检测为 n 字符,即行终止字符,因此为了删除它,我使用了 str.replace 函数。

由于这是一个 的.csv 文件,所以我必须要根据不同的东西 逗号 ,所以我会各执一个字符串_,_ 用 string.split(“”) 。对于第一次迭代,我将存储第一行,其中包含列名的列表称为 _col_。然后,我会将所有数据附加到名为_data的_列表中 。

为了更漂亮地读取数据,我将其作为数据框格式返回,因为与numpy数组或python的列表相比,读取数据框更容易。

输出量

利弊

重要的好处是您具有文件结构的所有灵活性和控制权,并且可以以任何想要的格式和方式读取和存储它。

您也可以使用自己的逻辑读取不具有标准结构的文件。

它的重要缺点是,特别是对于标准类型的文件,编写起来很复杂,因为它们很容易读取。您必须对需要反复试验的逻辑进行硬编码。

仅当文件不是标准格式或想要灵活性并且以库无法提供的方式读取文件时,才应使用它。

2. Numpy.loadtxt函数

这是Python中著名的数字库Numpy中的内置函数。加载数据是一个非常简单的功能。这对于读取相同数据类型的数据非常有用。

当数据更复杂时,使用此功能很难读取,但是当文件简单时,此功能确实非常强大。

要获取单一类型的数据,可以下载 处 虚拟数据集。让我们跳到代码。

这里,我们简单地使用了在传入的_定界符中_ 作为 ','_的 _loadtxt 函数 因为这是一个CSV文件。

现在,如果我们打印 _df_,我们将看到可以使用的相当不错的numpy数组中的数据。

由于数据量很大,我们仅打印了前5行。

利弊

使用此功能的一个重要方面是您可以将文件中的数据快速加载到numpy数组中。

缺点是您不能有其他数据类型或数据中缺少行。

3. Numpy.genfromtxt()

我们将使用数据集,即第一个示例中使用的数据集“ 100 Sales Records.csv”,以证明其中可以包含多种数据类型。

让我们跳到代码。

为了更清楚地看到它,我们可以以数据框格式看到它,即

这是什么?哦,它已跳过所有具有字符串数据类型的列。怎么处理呢?

只需添加另一个 dtype 参数并将_dtype_ 设置 为None即可,这意味着它必须照顾每一列本身的数据类型。不将整个数据转换为单个dtype。

然后输出

比第一个要好得多,但是这里的“列”标题是“行”,要使其成为列标题,我们必须添加另一个参数,即 名称 ,并将其设置为 True, 这样它将第一行作为“列标题”。

df3 = np.genfromtxt('100 Sales Records.csv', delimiter=',', dtype=None, names=True, encoding='utf-8')

我们可以将其打印为

4. Pandas.read_csv()

Pandas是一个非常流行的数据操作库,它非常常用。_read_csv()_是非常重要且成熟的 功能 之一,它  可以非常轻松地读取任何 .csv 文件并帮助我们进行操作。让我们在100个销售记录的数据集上进行操作。

此功能易于使用,因此非常受欢迎。您可以将其与我们之前的代码进行比较,然后进行检查。

你猜怎么着?我们完了。这实际上是如此简单和易于使用。Pandas.read_csv肯定提供了许多其他参数来调整我们的数据集,例如在我们的 convertcsv.csv 文件中,我们没有列名,因此我们可以将其读取为

我们可以看到它已经读取了没有标题的 csv 文件。您可以在此处查看官方文档中的所有其他参数 。

5. Pickle

如果您的数据不是人类可以理解的良好格式,则可以使用pickle将其保存为二进制格式。然后,您可以使用pickle库轻松地重新加载它。

我们将获取100个销售记录的CSV文件,并首先将其保存为pickle格式,以便我们可以读取它。

这将创建一个新文件 test.pkl ,其中包含来自 Pandas 标题的 pdDf

现在使用pickle打开它,我们只需要使用 pickle.load 函数。

在这里,我们已成功从_pandas.DataFrame_ 格式的pickle文件中加载了数据 。

学习成果

您现在知道了5种不同的方式来在Python中加载数据文件,这可以在您处理日常项目时以不同的方式帮助您加载数据集。

往期精彩链接:

《统计学习基础:数据挖掘、推理和预测》-斯坦福大学人工智能学科专用教材

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

查看原文

赞 0 收藏 0 评论 0

计算机与AI 发布了文章 · 10月19日

你听过 CatBoost 吗?本文教你如何使用 CatBoost 进行快速梯度提升

在本文中,我们将仔细研究一个名为CatBoost的梯度增强库。


在梯度提升中,预测是由一群弱学习者做出的。与为每个样本创建决策树的随机森林不同,在梯度增强中,树是一个接一个地创建的。模型中的先前树不会更改。前一棵树的结果用于改进下一棵树。在本文中,我们将仔细研究一个名为CatBoost的梯度增强库。

CatBoost 是Yandex开发的深度方向梯度增强库 。它使用遗忘的决策树来生成平衡树。相同的功能用于对树的每个级别进行左右拆分。

(CatBoost官方链接:https://github.com/catboost

与经典树相比,遗忘树在CPU上实现效率更高,并且易于安装。

处理分类特征

在机器学习中处理分类的常见方法是单热编码和标签编码。CatBoost允许您使用分类功能,而无需对其进行预处理。

使用CatBoost时,我们不应该使用一键编码,因为这会影响训练速度以及预测质量。相反,我们只需要使用cat_features 参数指定分类特征即可 。

使用CatBoost的优点

以下是考虑使用CatBoost的一些原因:

  • CatBoost允许在多个GPU上训练数据。
  • 使用默认参数可以提供很好的结果,从而减少了参数调整所需的时间。
  • 由于减少了过度拟合,因此提高了精度。
  • 使用CatBoost的模型应用程序进行快速预测。
  • 经过训练的CatBoost模型可以导出到Core ML进行设备上推理(iOS)。
  • 可以在内部处理缺失值。
  • 可用于回归和分类问题。

训练参数

让我们看一下CatBoost中的常用参数:

  • loss_function 别名为 objective -用于训练的指标。这些是回归指标,例如用于回归的均方根误差和用于分类的对数损失。
  • eval_metric —用于检测过度拟合的度量。
  • iterations -待建的树的最大数量,默认为1000。别名是 num_boost_roundn_estimatorsnum_trees
  • learning_rate 别名 eta -学习速率,确定模型将学习多快或多慢。默认值通常为0.03。
  • random_seed 别名 random_state —用于训练的随机种子。
  • l2_leaf_reg 别名 reg_lambda —成本函数的L2正则化项的系数。默认值为3.0。
  • bootstrap_type —确定对象权重的采样方法,例如贝叶斯,贝努利,MVS和泊松。
  • depth —树的深度。
  • grow_policy —确定如何应用贪婪搜索算法。它可以是 SymmetricTreeDepthwiseLossguideSymmetricTree 是默认值。在中 SymmetricTree,逐级构建树,直到达到深度为止。在每个步骤中,以相同条件分割前一棵树的叶子。当 Depthwise 被选择,一棵树是内置一步步骤,直到指定的深度实现。在每个步骤中,将最后一棵树级别的所有非终端叶子分开。使用导致最佳损失改善的条件来分裂叶子。在中 Lossguide,逐叶构建树,直到达到指定的叶数。在每个步骤中,将损耗改善最佳的非终端叶子进行拆分
  • min_data_in_leaf 别名 min_child_samples —这是一片叶子中训练样本的最小数量。此参数仅与 LossguideDepthwise 增长策略一起使用。
  • max_leaves alias num_leaves —此参数仅与Lossguide 策略一起使用, 并确定树中的叶子数。
  • ignored_features —表示在培训过程中应忽略的功能。
  • nan_mode —处理缺失值的方法。选项包括 ForbiddenMin,和 Max。默认值为 Min。当 Forbidden 使用时,缺失值导致错误的存在。使用 Min,缺少的值将作为该功能的最小值。在中 Max,缺失值被视为特征的最大值。
  • leaf_estimation_method —用于计算叶子中值的方法。在分类中,使用10 Newton 次迭代。使用分位数或MAE损失的回归问题使用一次 Exact 迭代。多分类使用一次 Netwon 迭代。
  • leaf_estimation_backtracking —在梯度下降过程中使用的回溯类型。默认值为 AnyImprovementAnyImprovement 减小下降步长,直至损失函数值小于上次迭代的值。 Armijo 减小下降步长,直到满足 Armijo条件
  • boosting_type —加强计划。它可以plain 用于经典的梯度增强方案,也可以 用于或 ordered,它在较小的数据集上可以提供更好的质量。
  • score_function分数类型, 用于在树构建过程中选择下一个拆分。 Cosine 是默认选项。其他可用的选项是 L2NewtonL2NewtonCosine
  • early_stopping_rounds —当时 True,将过拟合检测器类型设置为, Iter 并在达到最佳度量时停止训练。
  • classes_count —多重分类问题的类别数。
  • task_type —使用的是CPU还是GPU。CPU是默认设置。
  • devices —用于训练的GPU设备的ID。
  • cat_features —具有分类列的数组。
  • text_features -用于在分类问题中声明文本列。

回归示例

CatBoost在其实施中使用scikit-learn标准。让我们看看如何将其用于回归。

与往常一样,第一步是导入回归器并将其实例化。

拟合模型时,CatBoost还可以通过设置来使用户可视化 plot=true

它还允许您执行交叉验证并使过程可视化:

同样,您也可以执行网格搜索并将其可视化:

结尾

在本文中,我们探讨了CatBoost的优点和局限性以及主要的训练参数。然后,我们使用scikit-learn完成了一个简单的回归实现。希望这可以为您提供有关库的足够信息,以便您可以进一步探索它。

往期精彩链接:

《统计学习基础:数据挖掘、推理和预测》-斯坦福大学人工智能学科专用教材

查看原文

赞 0 收藏 0 评论 0

计算机与AI 发布了文章 · 10月18日

用Python绘制地理图

当您的数据包含地理信息时,丰富的地图可视化可以为您理解数据和解释分析结果的最终用户提供重要价值。

Plotly

Plotly是一个著名的库,用于在Python中创建交互式绘图和仪表板。

安装Plotly

在命令提示符中运行这两个命令,以在我们的本地计算机上安装 plotlycufflinks 及其所有软件包。

_Choropleth_地图

Choropleth地图是流行的主题地图,用于通过各种阴影图案或预定地理区域(即国家/地区)上的符号表示统计数据。它们擅长利用数据轻松表示整个区域所需测量的可变性。

Choropleth地图是如何工作的?

Choropleth Maps显示与数据变量相关的彩色,阴影或图案化的划分的地理区域或区域。这提供了一种可视化地理区域内值的方法,该值可以显示所显示位置的变化或模式。

在Python中使用Choropleth

在这里,我们将使用 2014年全球不同国家/地区的电力消耗数据集。(https://github.com/ahmadbinsh...

好的,让我们开始吧。

导入库

在这里, init_notebook_mode(connected = True) 将Javascript连接到我们的笔记本。

创建/解释我们的DataFrame

在这里,我们有3列,并且所有列都有219个非空条目。

将我们的数据编译成字典

  • _type ='choropleth'_:定义地图的类型,即这种情况下的choropleth。
  • colorscale ='Viridis'_:显示一个颜色图(f_或更多颜色比例,请参阅 _此处__)。_
  • _location = df ['Country']_:添加所有国家_/地区_的列表。
  • _locationmode ='国家名称'_:因为我们在数据集中有国家名称,所以我们将位置模式设置为'国家名称'。
  • _z_:显示每个状态的功耗的整数值列表。
  • _text = df ['Country']_:将鼠标悬停在地图上的每个状态元素时显示一个文本。在这种情况下,它是国家本身的名称。
  • _colorbar = {'title':'Power KWH'}_:包含有关右侧栏信息的字典。在这里,颜色栏包含侧边栏的标题。

布局 _-_一个Geo对象,可用于控制 在其上绘制数据的基础地图的外观 。

这是一本嵌套的字典,其中包含有关地图/绘图外观的所有相关信息。

生成图/图

生成了“ 2014年世界电力消耗”的choropleth地图,从上面可以看到,当每个国家/地区悬停在地图上的每个元素上时,都会显示其名称和电力消耗(以kWh为单位)。数据在一个特定区域中越集中,地图上的颜色阴影越深。“中国”的耗电量最大,因此其颜色最深。

密度图

密度映射只是一种显示点或线可能集中在给定区域中的方式。

在Python中使用密度图

在这里,我们将使用世界范围 的地震及其震级数据集。

好的,让我们开始吧。

导入库

创建/解释我们的DataFrame

在这里,我们有4列,并且所有列都有23412个非空条目。

绘制数据

  • _lat ='Latitude'_:获取数据框的_“纬度”_列。
  • _lon ='Longitude'_:获取数据框的经度列。
  • _z_:显示地震震级的整数列表。
  • _radius = 10_:设置每个点的影响半径。
  • _center = dict(lat = 0,lon = 180)_:设置字典中地图的中心点。
  • _zoom = 0_:设置地图缩放级别。
  • _mapbox_style ='stamen-terrain'_:设置基本地图样式。在这里,“雄蕊地形”是基本地图样式。
  • _fig.show()_:显示地图。

地图

我们已经绘制了“地震及其烈度”的密度图,从上面我们可以看到,它覆盖了遭受地震破坏的所有领土,并且还显示了当我们将鼠标悬停 在上方时每个区域的地震烈度。

由于数据格式多种多样,有时使用plotly进行地理绘图可能会遇到一些挑战,因此请参考该 备忘单, 了解所有类型的plotly plot语法。

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

查看原文

赞 1 收藏 1 评论 0

计算机与AI 发布了文章 · 10月17日

一文带你轻松了解 Python 导入模块的各种命令

本文内容主要介绍了python中的lambda与sorted函数的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下!!!

lambda表达式

python中形如:

lambda parameters: expression

称为lambda表达式,用于创建匿名函数,该表达式会产生一个函数对象。

该对象的行为类似于用以下方式定义的函数:

def <lambda>(parameters):return expression

python中的lambda函数可以接受任意数量的参数,但只能有一个表达式。也就是说,lambda表达式适用于表示内部仅包含1行表达式的函数。那么lambda表达式的优势就很明显了:

使用lambda表达式可以省去单行函数的定义过程,使代码更加简洁;`适用于不需要多次复用的函数`

例:

y = lambda x: x*x`print(y(3))`> 9

fx = lambda x, y, z: x+y+z`print(fx(3, 4, 5))`> 12

sorted()

python3.x中sorted函数:

sorted(iterable, *, key=None, reverse=False)

sorted函数会根据iterable中的项返回一个新的已排序列表。

其中key与reverse是两个可选参数,它们都必须指定为关键字参数;

key:指定带有单个参数的函数,用于从iterable的每个元素中提取用于比较的键,默认为None,即直接比较元素;

reverse:为一个布尔值,用来指定排序规则,默认为False(升序)。

python2的sorted函数中还有一个参数cmp,python3的sorted中已经没有这个参数了。

与list.sort()方法不同的是,sorted()是有返回值的,而list.sort()的返回值为None;并且list.sort()只能对list进行

排序,而sorted()可以接收任何的iterable

转载来源:https://www.toutiao.com/i6868833840454959619/

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

查看原文

赞 0 收藏 0 评论 0

计算机与AI 发布了文章 · 10月16日

numexpr:你以为 numpy 已经够快了,其实它还可以更快

开篇

python语言被广泛用于数据分析和机器学习。但是,由于python的底层特性,python的运行速率低一直被广泛诟病。其中,numpy和pandas的广泛使用已经将数据处理和机器学习的速率提升了几个档次。

但是,随着数据的越来越多,很多人已经不再满足numpy和pandas的速度,从而退出了一批加速优化拓展包。这篇文章主要介绍一个轻量、但是功能强大的python扩展包 ”NumExpr",看看它是如何高效解析数学公式的。

NumExpr

NumExpr的使用及其简单,只需要将原来的numpy语句使用双引号框起来,并使用numexpr中的evaluate方法调用即可。

第一步:需要引入 numexpr 和 numpy 扩展包;

import numexpr as ne

import numpy as np

第二步:创建两个numpy的array - a 和 b;

a和b两个所包含的数据个数为100万个。

当我们需要执行简单的加减乘除的时候,numexpr的效率已经得到了很好地体现。如上图所示,通过执行 2 a + 3 b,如果直接操作,需要3.39 毫秒。但是,如果我们是用ne.evaluate加速,可以将时间缩短至1.55 毫秒。

numexpr在更加复杂的数学表达式运算中,表现到底如何呢?

当我们使用如上所示的数学表达式,正常执行需要28.3 ms。而通过numexpr的加速,只需要3.03 ms。

注意,numexpr是可以识别 sin 函数的,所以我们不需要在evaluate里面写np.sin,可以直接写 sin。

总结:处理数据量越大,数学计算越复杂,则numexpr的加速效果越明显。

numpy 和 numexpr 比较

我们可以看到,当np.array的元素个数超过10e8,加速效果更加显著。

numexpr也支持逻辑表达式和复数表达式的加速,有兴趣的读者朋友可以自行比较。

numexpr 多线程加速

numexpr还有一个重要的加速利器,多线程操作。通过 ne.set_num_threads(1) 可以设置线程的数量,更多的线程表示程序可以同时对数学表达式进行计算。

如上所示,如果我们设置单线程,程序运行需要13.4 ms。设置了双线程,速度则可以提升一倍。

numexpr对pandas的加速

numexpr的设计主要针对的是numpy。同样的,我们知道pandas也是基于numpy开发的。自然,numexpr同样可以被用来对pandas加速。

pandas中有一个eval方法就是运用了numexpr,对pandas代码进行优化加速。

当我们构建几个pandas的dataframe,然后对它们进行运算的时候,pd.eval 可以将程序从原先的47.4 ms 加速到17.6 ms。

总结

通过以上的实例,numexpr对于numpy和pandas的加速是很显著的,尤其当数据量比较大和计算比较复杂的情况下。同时,numexpr的使用非常简单。但是,我们需要注意的是,任何加速工具都会有局限性的,并不是所有的工作都可以使用numexpr进行加速。

看完别走还有惊喜!

我精心整理了计算机/Python/机器学习/深度学习相关的2TB视频课与书籍,价值1W元。关注微信公众号“计算机与AI”,点击下方菜单即可获取网盘链接。

查看原文

赞 0 收藏 0 评论 0

计算机与AI 发布了文章 · 10月8日

最完整的PyTorch数据科学家指南(1)

进行深度学习时您将需要的所有PyTorch功能。从实验/研究的角度来看。

PyTorch 已经成为现在创建神经网络的事实上的标准之一,我喜欢它的界面。但是,对于初学者来说,要获得它有些困难。

我记得几年前经过一些广泛的实验之后才选择PyTorch。实话实说,我花了很多时间才捡起来,但我很高兴我从Keras搬到 PyTorch。 凭借其高度可定制性和python语法, PyTorch可以与 他人一起工作,这是我的荣幸,我将其推荐给任何希望通过深度学习进行繁重工作的人。

因此,在本PyTorch指南中, 我将尝试减轻PyTorch对于初学者的痛苦,并介绍在使用Pytorch 创建任何神经网络时需要的一些最重要的类和模块。

但是,这并不是说它仅针对初学者,因为 我还将谈论PyTorch提供高可定制性,并谈论自定义的Layers,Datasets,Dataloaders和Loss函数。

张量

张量是PyTorch的基本构建块,简单地说,它们是NumPy数组,但在GPU上。在这一部分中,我将列出一些在使用Tensors时可以使用的最常用的操作。这绝不是张量可以执行的详尽操作列表,但是在进行更令人兴奋的部分之前了解张量是有帮助的。

1.创建张量

我们可以通过多种方式创建PyTorch张量。这包括从NumPy数组转换为张量。下面只是一个要点,下面是一些示例,但是您可以  像使用NumPy数组一样使用张量来做更多的事情。

2.张量运算

同样,您可以对这些张量执行很多操作。

注意: 什么是PyTorch变量?在以前的Pytorch版本中,Tensor和Variables曾经是不同的,并且提供了不同的功能,但是现在不赞成使用Variable API ,并且所有用于Tensors的变量 方法都可以使用。因此,如果您不了解它们,那很好,因为它们不是必需的,如果您了解它们,则可以将它们忘记。

nn.模块

但是话又说回来,如果Pytorch没有提供很多现成的层,而这些层在各种神经网络体系结构中非常频繁地使用,则Pytorch不会被广泛使用。一些例子是:nn.Linear,nn.Conv2d,nn.MaxPool2d,nn.ReLU,  nn.BatchNorm2d,nn.Dropout,nn.Embedding,  ,,  ,,,nn.GRU/nn.LSTMnn.Softmaxnn.LogSoftmaxnn.MultiheadAttentionnn.TransformerEncodernn.TransformerDecoder

在这里,我们定义了一个非常简单的网络,该网络接受大小为784的输入,并以顺序方式将其通过两个线性层。但是要注意的是,我们可以在定义前向通过时定义任何类型的计算,这使得PyTorch高度可定制以用于研究目的。例如,在疯狂的实验模式下,我们可能使用了以下网络,在该网络上我们任意附加了图层。在这里,我们在将输入再次添加回第二个线性层(跳过连接)之后,将输出从第二个线性层再次发送回第一个线性层。

我们还可以检查神经网络正向传递是否起作用。通常,我首先创建一些随机输入,然后将其通过我创建的网络进行传递。

关于层的一句话

Pytorch非常强大,您实际上可以使用自己创建任何新的实验层 nn.Module。例如,而不是使用预定义的线性层 nn.Linear。从Pytorch以上,我们可以已经创建了 定制线性层

您将看到如何在中包装权重张量。nn.Parameter.这样做是为了使张量被视为模型参数。

参数是 Tensor子类,当与Module-一起使用时具有非常特殊的属性 -当将它们分配为模块属性时,它们会自动添加到其参数列表中,并将出现在 parameters()迭代器中。

稍后您将看到,model.parameters()迭代器将成为优化器的输入。但是稍后会更多。现在,我们现在可以在任何PyTorch网络中使用此自定义层,就像其他任何层一样。

但是话又说回来,如果Pytorch没有提供很多现成的层,而这些层在各种神经网络体系结构中非常频繁地使用,则Pytorch不会被广泛使用。一些例子是:nn.Linear,nn.Conv2d,nn.MaxPool2d,nn.ReLU,  nn.BatchNorm2d,nn.Dropout,nn.Embedding,nn.GRU/nn.LSTM,nn.Softmax,nn.LogSoftmax,nn.MultiheadAttention,nn.TransformerEncoder,nn.TransformerDecoder

以上就是Torch的基础操作,下一篇文章会为同学们讲解卷积部分的操作。

查看原文

赞 0 收藏 0 评论 0

认证与成就

  • 获得 2 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 8月10日
个人主页被 134 人浏览