学习
实践
活动
工具
TVP
写文章

TensorFlow和Keras:初学者的简单示例教程

人工智能和深度学习是计算机科学中最令人兴奋的话题。在本教程中,我将演示如何使用Python中的Keras和TensorFlow创建一个简单的前馈神经网络。

我假设您对神经网络及其工作方式有一定的了解。

在开始之前,让我们谈谈TensorFlow和Keras是什么。TensorFlow是一个机器学习开源库,用于大型数学计算。它非常受欢迎,因为它能够在CPU或GPU上运行; 这使得它成为一个高效的机器学习和深度学习算法的库。Keras是深度学习的高级库。它构建于TensorFlow之上,旨在使开发人员更容易快速轻松地应用深度学习和实验。在本教程中,我将向您展示如何执行此操作。Keras曾经是一个独立的库,但它已被Tensorflow采用!

先决条件

您必须安装Python 3.6或更高版本并安装TensorFlow和keras。

问题

假设我们想要了解John何时会根据天气打篮球。

在这个数据集中,我们记录了 outlook, humidity, wind以及是否Play。既然我们想要预测John是否会打篮球,我们的输入将是outlook, humidity, wind; 我们的输出将是Play。我们希望以数字方式表示我们的输入和输出,我们将按以下方式执行:

Outlook

Sunny = 1

Overcast = 0

Rain = -1

Humidity

Normal = 0

High = 1

Wind

Weak = 0

Strong = 1

Play

Yes = 1

No = 0

我们将把我们的表格转换成一个数组,它们将作为我们的机器学习训练数据集。

Inputs

[outlook, humidity, wind]

[1,1,0]

[1,1,1]

[0,1,0]

[-1,1,0]

[-1,0,0]

[-1,0,1]

[0,0,1]

[1,1,0]

[1,0,0]

[-1,0,0]

[1,0,1]

[0,1,1]

[0,0,0]

[-1,1,1]

Outputs

[play]

[0]

[0]

[1]

[1]

[1]

[0]

[1]

[0]

[1]

[1]

[1]

[1]

[1]

[0]

建立我们的神经网络

首先,我们需要导入一些Python模块。我们将导入tensorflow和keras。

import tensorflow as tffrom tensorflow import keras

1.首先,我们定义机器学习模型并创建输入层,Python代码如下:

model = keras.Sequential()input_layer = keras.layers.Dense(3, input_shape=[3], activation='tanh')model.add(input_layer)

由于我们正在创建一个前馈神经网络,我们将使用Keras序列模型。我们的输入层将在网络中有3个节点,输入形状为3,因为它将占用3个输入。我们将使用tanh激活函数,因为我们处理的数字范围从-1到1。

2.现在让我们创建输出层。

output_layer = keras.layers.Dense(1, activation='sigmoid')model.add(output_layer)

我们有1个输出节点,因为我们最终得到1个输出。我们也使用该sigmoid函数,因为我们的输出应该是0或1。

3.现在我们需要设置优化器。

gd = tf.train.GradientDescentOptimizer(0.01)

我们将使用梯度下降作为我们的学习率为0.01的优化器。我们不希望我们的学习率太小,否则需要很长时间才能达到最佳结果,我们也不希望学习率太大,否则可能会错过最佳结果。

4.现在我们编译机器学习模型。

model.compile(optimizer=gd,loss='mean_squared_error')

我们将传递gd变量作为我们的优化器,我们的损失函数将是mean_squared_error。

5.准备我们的训练数据。我们将数据格式化为tensorflow 变量。您也可以将它们格式化为numpy变量。

x = tf.Variable([[1,1,0],[1,1,1],[0,1,0],[-1,1,0],[-1,0,0],[-1,0,1],[0,0,1],[1,1,0],[1,0,0],[-1,0,0],[1,0,1],[0,1,1],[0,0,0],[-1,1,1]])y = tf.Variable([[0],[0],[1],[1],[1],[0],[1],[0],[1],[1],[1],[1],[1],[0]])

6.接下来我们拟合我们的数据。

model.fit(x, y ,epochs=1000, steps_per_epoch=10)

这里我们传递x作为测试输入,y作为测试输出。epoch是整个输入数据的迭代次数。epoch越大,你需要的内存就越多,训练的时间就越长。steps_per_epoch是在epoch完成之前每批次的迭代次数。

7.训练结束后,我们可以使用现有的训练输入来测试我们的数据,并将其与我们的训练输出进行比较。

results = model.predict(x, verbose=0, steps=1)print(results)

输入x变量,也就是输入数据。您可以将verbose设置为0、1或2,以查看您希望如何直观地查看进度。运行Python代码之后,应该有这样的东西

[[0.15947242]

[0.2009128 ]

[0.6640448 ]

[0.74036646]

[0.82375276]

[0.8218212 ]

[0.8796288 ]

[0.15947242]

[0.817388 ]

[0.82375276]

[0.8464085 ]

[0.7018454 ]

[0.8803827 ]

[0.75258946]]

我们可以看到它与我们预期的输出不完全相同,但它相当接近。如果你训练它多次,超过1000次,那么我们可能会得到更接近但我们永远无法接近确切的数字,因为sigmoid只有0和1 的函数。我对这些结果不满意所以我我要增加epoch到5,000。

经过5000次迭代后,这些是我得到的结果:

[[0.04279386]

[0.05731023]

[0.97331977]

[0.9714603 ]

[0.9792363 ]

[0.06504408]

[0.9524578 ]

[0.04279386]

[0.9649155 ]

[0.9792363 ]

[0.958375 ]

[0.9327749 ]

[0.9992924 ]

[0.06461356]]

如您所见,它更接近我们的预期值!

预测

现在让我们弄清楚John 是否会在sunny, normal humidity, weak wind时打篮球。 [1,0,0]

只需用我们的测试输入替换预测函数的输入。

test = tf.Variable([[1,0,0]])result = model.predict(test, verbose=0, steps=1)

我得到的结果就是[[0.9614258]]他会Play!

保存权重

如果您愿意,可以保存我们模型的权重,这样如果您想测试自己的数据,则每次运行程序时都不需要经过训练。训练结束后,调用此函数:

model.save_weights('model_weights.h5')

这将创建一个名为“model_weight.h5”的HDF5文件。要加载权重,只需调用此函数:

model.load_weights('model_weights.h5')

结论

本教程到此结束!您可以将此应用于其他类别的分类。

你可能会遇到像这样的错误

I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

解决方案是使用numpy数组输入数据而不是使用TensorFlow对象。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181008A1B24V00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券