欢迎来到机器学习基础
系列。在本课程中,您将学习使用 TensorFlow 构建机器学习模型的基础知识。您唯一需要了解的是一点 Python。因此,如果您以前尝试过学习 ML,但被所有微积分和其他数学吓到了,那么,这门课程适合您。在本集中,我们将首先讨论机器学习到底是什么,以及它的工作原理。
首先,让我们从非常高
的层次来思考一下编程以及它是什么样子的。也许你必须创建一些财务软件,你需要编写代码来获取数据并利用这些数据做一些新的事情。有一种流行的分析方法叫做市盈率,也就是市盈率。所以它的代码看起来有点像这样。但请从我在这里标记的三个方面来思考。有数据,有你将根据这些数据编写的规则。这就是我们程序员带来价值的地方,因为这些规则会提供答案。另一种编写规则的方式就像游戏一样,游戏会对游戏世界中发生的事情做出反应。
所以也许可以尝试类
纳米比亚移动数据 纳米比亚的移动数据服务主要通过 4G 网 尼泊尔手机移动数据 络提供,运营商提供灵活且价格合理的数据套餐。尽管农村地区仍然难以获得连接,但城市地区却受益于稳定的覆盖。纳米比亚正试图通过发展电信基础设施和增强移动数据访问来缩小城乡之间的数字鸿沟。
似“Breakout”的游戏,一旦球碰到砖块,球就 基于帐户的营销:发挥作用的最佳实践 会反弹回来,砖块就会消失。所以,再说一遍,你有数据,也就是球的位置、砖块的位置等等。你有规则,也就是你编写的代码行。你有答案——游戏情况如何根据这些动作进行更新。
所以我喜欢用这些术语来总结传统的编程。输入规则和数据,然后得到答案。这基本上就是我们赖以谋生的手段。
传统编程图
正在进行的机器学习革命,从程序员的角度来看,只是这个图表的重新定位
机器学习图
那么,作为程序员,我们不用试图找出能给我们提供答案的规则,如果我们可以将大量答案与数据一起输入,然后让机器找出这些规则,那会怎样?
这就是机器学习的真正意义所在。获取大量数据,了解这些数据的答案——这个过程称为标记——然后建立相互匹配的规则。
现在这个说法可能有
点模糊,让我们来看一个场景。想象一下智能手表之类的 bmb目录 活动识别设备。如果你正在创建这样的设备,并且上面有传感器可以提供数据,例如人的移动速度,你会编写什么规则来给出答案?嗯,答案当然是这个人正在进行的活动。
例如,您可能会说,如果速度低于某个值,答案就是该人在走路。然后,您可以将其扩展为,如果速度高于该值,则该人在跑步。现在您已经检测到了两种活动——走路和跑步。这有点幼稚,但希望它能起到作用,仅用于说明。
但是如果你想更进一步呢?例如,另一项健身活动是骑自行车。你可以扩展你的算法来理解骑自行车。如果值小于 4,则他们在步行。否则,如果值小于 12,则他们在跑步。否则他们在骑自行车。它仍然有效,但是如果你想检测打高尔夫球会发生什么?哦,确实如此。
不仅仅是打高尔
夫球——尽管这个算法很幼稚,但很容易看出这是一个很难用规则实现的场景。如果你上坡或下坡,你的速度会有所不同,你的步行速度可能是我的跑步速度,等等。有时,人们不能简单地找出规则来确定这种复杂的行为。
因此,如果我们回到机器学习图表,并将机器学习视为输入数据并从中推断出规则的答案,那么我们就可以改变我们的活动识别场景。
那么,如果有很多
人佩戴你的传感器,并且说他们在走路,你捕获了这些数据,情况会怎样?跑步、骑自行车,甚至打高尔夫球都是类似的情况。如果你查看这些数据,并找到一种方法来找出如何将模式与标签匹配,情况会怎样?你会得到一个场景,说这是走路的样子,这是跑步的样子,等等。这确实是机器学习的核心——拥有大量数据,为这些数据贴上标签,然后对计算机进行编程,找出与标签相符的数据的显著部分。
这只是假设场景,但同样的概念可以应用于计算机视觉和自然语言处理等领域。您将在本课程中学习这些技术。
让我们从一个非常
简单的场景开始,这就是我认为的机器学习的入门世界。看看这些数字。它们之间有一个模式。x和 y之间存在一种关系,这种关系适用于每个x、y配对。所以当x为负 1 时,y为负 3。当x = 1时,y = 1,等等。你能看出这个模式是什么吗?
这里的关系是每个 y 都是相应x – 1 的2 倍。是的,我知道我们说过我们不会做很多数学运算,但我希望你能接受这个例外。
如果你知道答案,那么你是怎么得到的呢?对我来说,我看到当x增加 1时y增加了 2 ,所以我猜y等于2x加上或减去某个数。然后我猜测它可能是 -1,因为当x = 0时,答案是 -1。我回顾了所有其他数字,发现这种关系是成立的。这几乎与神经网络的运作方式完全相同。
让我们在代码中探索一下。这里有一个 TensorFlow 应用示例,它将帮我们找出这种关系。
模型
我知道这里面有很多新概念,所以我要一一解释。
这可能是最神秘的一个了,所以让我们直观地解释一下。你知道你经常看到像这样的神经网络图片吗?这里红框中的每一列都称为层,每个蓝色斑点都是神经元。每个神经元都与其他每个神经元相连,由于它们之间的连接紧密,这被称为密集层。你可以使用代码定义这些类型的神经网络。所以让我们回顾一下我们的代码,看看我们定义了什么。
该行的第一部分表示它是一个keras.Sequential
。Keras是TensorFlow中的一个框架,用于简化训练的定义和使用 ML 模型。我将在本课程中广泛使用它。名称 Sequenced 基本上告诉我们我们将定义一系列层。在之前的图中,我们有三层。那么,您认为我们在此处的代码中定义的网络中有多少层?只有一层,因为 Sequenced 中只有一行代码。您注意到它是什么类型的层了吗?它是密集的,是最简单的层类型,其中包含基本神经元。稍后您将了解有关复杂神经元类型的更多知识,但密集中的神经元类型非常基础。
我们的密集模型是什么样的?这在密集模型参数中是可见的。我们说这一层只有一个单元或一个神经元。我们只有一层。input_shape 参数告诉我们训练层的数据形状,它只是一个值。所以我们的神经网络将看起来像这样。这是你能得到的最简单的神经网络——一层,一个神经元。神经元能做的就是学习将数据与标签匹配。让我们通过返回我们的代码来看一下这个神经网络将如何做到这一点。
模型.编译(优化器 = 'sgd',损失 = 'mean_squared_error')
网络学习的核心在于这两个参数——优化函数和损失函数。机器学习中的所有数学都来自这里。让我来解释一下它们的作用。
这个想法是,神经网络不知道数据和标签之间的关系,所以它必须进行猜测。然后它查看数据并评估猜测。损失函数是一种衡量猜测好坏的方法。优化器会使用这一结果进行另一次猜测。然后再次使用损失函数测量该猜测,其逻辑是优化器可以改进猜测。这些数据被传回优化器以获得另一个猜测,依此类推。这是训练神经网络的过程。在我们的代码中,我们将执行该循环 – 进行猜测,使用损失函数测量其有效性,优化以获得另一个猜测,并重复 500 次。测量损失并优化新猜测需要一些复杂的数学运算,但我们现在不会详细讨论这一点。
这里的损失函数称为mean_squared_error
,优化器为sgd
,代表随机梯度下降。我们将使用它们来编译模型。
接下来,我们将定义我们的数据。
NP 代表NumPy——一个使数据处理变得更容易的 Python 库,您在使用机器学习时会经常看到它。我们将数据称为 x,将标签称为 y。
接下来就是我们进行学习的地方。
模型.fit(xs,ys,epochs= 500)
我们告诉模型将 x 与 y 拟合,并进行我们之前提到的循环 500 次——或者 500 个时期。最后,神经元在开始时做出的粗略猜测有望被细化为一个好的模型,该模型可以找出 x 和 y 之间的关系。
一旦模型完成训练,您就可以使用它来预测值。
打印(模型.预测([ 10 . 0 ]))
所以根据我们所了解的x和y以及它们之间的关系是y = 2x – 1,你认为预测 10.0 的答案是什么?
您可能认为它会是 19,而且您的想法非常接近正确。但由于一些原因,它不会正好是 19——最明显的是,这个模型只在六个数据点上进行训练,而对于这六个数据点,关系是线性的。即y = 2x – 1。但不能保证其他点也是如此。数据可能会向其他方向倾斜,而神经元不知道是否是这种情况,因为它只在这些有限的数据上进行训练。
话虽如此,它是一条直线的概率非常高,因此神经元将其纳入学习之中,当被要求预测时,它会给出一个非常接近 19 的数字,因为当 x 为 10 时 y 的值为 19 的概率非常高。
这是需要记住的重要一课。神经网络处理的是概率。它们会给出答案正确的可能性,而你经常需要处理这种可能性。
因此,如果我们回顾一下传统的编程,您可能会编写这样的函数并且它会起作用。
获取
您传入参数 2 和 -1,现在函数将返回2x - 1
,如果您想使用其他值,也可以这样做。
神经元的工作方式类似,它有参数而不是硬编码值,但会随着时间的推移从数据中学习这些参数。因此,它是一种学习如何运作的通用函数。这就是“机器学习”一词的由来。我们的神经元正在学习能够产生所需结果的参数,并着眼于将来将这些结果与其他数据结合使用。
下一步:第 2 部分 – 计算机视觉的第一步