TensorFlow/[TensorFlow 学习笔记 ] 1 机器学习入门

TensorFlow/[TensorFlow 学习笔记 ] 1 机器学习入门

机器学习不仅仅是一个与传统编程不同的学科,更是代表了一种新的编程范式。

我们首先从高层次来看下,机器学习与传统的编程范式有何不同?

我们首先看下传统的编程范式,如下图所示:


我们需要输入规则和数据,程序输出答案。

而在机器学习中,编程范式如下图所示:


我们输入的数据和对应的答案,机器学习会从这些数据中学习,最终输出学习到的规则。

下面我们来看一个例子,看看机器学习(深度学习)是如何运作的。

在这个例子中,我会使用神经网络来学习两个数字之间的关系。

下面的代码展示了 xy 2 个数之间的关系,我们知道它们之间的关系是 \(y=2 \times x -1\)

1
2
3
4
float hw_function(float x){
float y = (2 * x) - 1;
return y;
}

如果给出一系列的 xy

1
2
x: [1, 2, 3, 4, 5,  6,  7,  8]
y: [1, 3, 5, 7, 9, 11, 13, 15]

把这些数据输入到神经网络,神经网络会学习到它们之间的关系。

这与传统的编程范式很不一样,下面我们来一步一步编写代码,实现这个模型。

导入库

我们首先导入必要的库。

1
2
3
import tensorflow as tf
import numpy as np
from tensorflow import keras

定义和编译模型

接着,我们定义一个最简单的神经网络。它只有一层,并且这一层只有一个神经元,输入数据的形状是 1。

1
model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

下一步,我们需要编译模型,这需要使用到优化器(optimizer)和损失函数(loss)。

我们来了解一下这两个概念。

我们知道 xy 之间的关系是 \(y=2 \times x -1\)

但是当神经网络开始学习时,它会做一个猜测,例如 \(y=10 \times x +10\)。而损失函数就是用来衡量模型的猜测答案,和真实的答案之间的差距,进而衡量模型的好坏。

然后,模型会使用优化器来最小化损失函数,更新参数,从而做出新的猜测,例如 \(y=5 \times x +5\)。虽然这个猜测与真实情况相差也很大,但更加接近了。

模型会把这个过程重复 EPOCHS 次。我们使用的损失函数是 MEAN SQUARED ERROR,优化器是 STOCHASTIC GRADIENT DESCENT。如果你还不懂这些,没关系,后面我会更加详细地介绍这些概念。

1
model.compile(optimizer='sgd', loss='mean_squared_error')

数据

下一步,我们需要一些数据。这里我们使用 6 个 x 和 6 个 y

1
2
xs = np.array([-1.0,  0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

训练神经网络

训练网络,需要调用 model.fit,这个方法会执行我们上面提到的步骤:做出猜测,使用损失函数衡量网络的好坏,使用优化器来最小化损失函数,更新参数,做出新的更好的猜测。这个步骤会重复 epochs 次,这个 epochs 是你可以定义的。

1
model.fit(xs, ys, epochs=500)

模型训练完后,你会得到一个训练好的模型,学习到了 xy 之间的关系。你可以使用 model.predict 方法来根据 x 预测对应的 y。比如 x=10,那么它对应的 y 是多少呢?你可以使用下面的方法来预测:

1
print(model.predict([10.0]))

正确的答案应该是 19,但是预测值不是 19,而是一个非常接近 19 的数字。为什么会这样呢?

因为,神经网络处理的是概率。所以,给神经网络输入数据,它计算出 xy 之间的关系很有可能是 \(y=2 \times x -1\)。但我们只输入了 6 个数据,神经网络无法确定得到确切的关系。因此,预测的结果非常接近 19,但不一定是 19。

总结

当你使用神经网络时,你会经常看到这种模式:

  • 神经网络做出猜测.
  • 使用损失函数衡量网络的好坏。
  • 使用优化器来最小化损失函数,更新参数,做出新的更好的猜测。

这个过程是在处理概率有关的内容,而不是确定性的内容。

并且,在做预测时,也是使用概率来得出结果(特别是在分类是)。

评论