Tensorflow机器学习入门“Hello, World”

2024-08-23阅读数:103

在Google CodeLabs上看到一个Tensorflow机器学习入门的文章,该文章用一个很简单的机器学习Tensorflow神经网络训练的例子带大家开始入门Tensorflow机器学习。现在AI盛行,大家都对人工智能技术趋之若鹜,但很多人都苦于没有找到合适的教程入门。

网上的很多教程要么就太专业、太复杂,不适合入门,要么就是直接给出一堆代码也没详细的讲解及解释,大家看得云里雾里的。

难得看到这样一个简单直观而且代码能够直接运行成功的机器学习示例,所以就换个方式分享出来。

其实这篇文章的代码也不是一次运行成功的,我在神经网络模型结果猜测那里做了一些小修改。

这个机器学习例子的目的是找到以下X跟Y两行数据之间的规律,或者说是关系,以两个浮点型数组的方式传入训练模型,然后进行500轮机器学习模型训练。

这些数字之间的关系是 Y=3X+1,记住这个公式,然后在检验神经网络训练结果时就可以验算出正确结果,以便与机器学习的结果进行对比。

X -1 0 1 2 3 4
Y: -2 1 4 7 10 13

以下是整个机器学习入门示例的完整代码,我特意加了注释:

import tensorflow as tf
import numpy as np
from tensorflow import keras

# 创建最简单的神经网络,该神经网络有一个层,该层有一个神经元,输入形状只有一个值
model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

# 模型使用 optimizer 函数进行一个猜测。它会根据损失函数的结果,最大限度地减少损失
# loss 函数将猜测答案与已知正确答案进行对比,并衡量结果的好坏
model.compile(optimizer='sgd', loss='mean_squared_error')

# 提供训练数据
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

# 训练神经网络的过程是在 model.fit 中,神经网络从中了解 xs 和 ys 之间的关系
model.fit(xs, ys, epochs=500)

# 根据训练结果进行猜测
test = np.array([10.0])
print(model.predict(test))

以上代码的运行结果见截图,代码会进行500个周期的训练,训练次数由model.fit函数中的epochs参数指定。最后的model.predict是测试训练的模型,当X给出10.0时,该模型认为对应的Y的值应该是30.999828。你也可以把10.0改成其它的值进行检验。

神经网络训练

在神经网络训练过程中时,可以看得到loss的数值会越来越小,直到个位数。通常该数值越小就表明该机器学习模型预测的准确度越高。我测试的时候第一轮训练的loss是61.5223,第500轮也就是最后一轮的值是如图的3.1412e-09,但并不代表最后一轮是最佳结果,因为在中间的神经网络训练周期中有出现1.1之后的数值。

最后大家如果想要导出训练后的机器学习模型的话,可以使用以下代码:

model.export(export_dir='./')