用TF2代码实现建立一个神经元的网络 (了解TF2的代码)
前言
刚刚步入深度学习领域,掌握了简单的基础知识,我们便可以开始建立我们的第一个神经网络,仅利用一个神经元来进行对一组数据的进行线性的回归预测。本文将详细介绍如何用代码实现此功能,以此使得初学者对Tensorflow 2.0有一个初步的认识。主要解决问题:已知两个数组,分别为[1.0,2.0,3.0,4.0,5.0]和[1.0,3.0,5.0,7.0,9.0]。找出两个数组所对应的关系模型,并根据此模型进行对输入数据的预测。
一、导入第三方库
Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化 。
在Tensorflow 2.0中,keras被打造成了Tensorflow的一个高级API,使得我们操作起来更加简单、实用。
直接从tensorflow中导入该API即可,同时我们也需要使用numpy库,代码如下:
import numpy as np
from tensorflow import keras
二、建立简单神经元
1.Sequential 顺序模型
keras的主要模型之一就是Squential 顺序模型,它是一系列网络层顺序构成的栈。
model=keras.Sequential([keras.layers.Dense(units=1,input_shape=[1])])
这里仅建立了一层Dense层也就是全连接层,设定只有一个节点,并且定义好数据输入形状。
2.编译过程
编译过程要找到适合模型的损失函数与优化方法,由于其种类众多,就不一一列出,在以后的学习中,我们将仔细探讨不同条件不同环境下它们的使用方法,这里仅简略说明。
model.compile(optimizer='sgd',loss='mse')
使用随机梯度下降法(stochastic gradient descent,可写成缩写sgd)进行对模型进行优化;
使用均方误差(mean_squared_error,可写成缩写mse)作为损失函数。
3.训练过程
给予model我们一开始想要训练的数据,通过model.fit()函数不断训练模型,以优化其功能。我们在其中设定了其epochs=200,也就是迭代次数为200次,随着训练次数的增加,优化方法使损失函数不断变小,也说明了模型的拟合程度程度在不断变好。
xs=np.array([1.0,2.0,3.0,4.0,5.0],dtype=float)
ys=np.array([1.0,3.0,5.0,7.0,9.0],dtype=float)
model.fit(xs,ys,epochs=200)
下面是训练过程当中,前五次和最后五次的过程中的loss值变化
Epoch 1/200
1/1 [==============================] - 0s 3ms/step - loss: 63.1919
Epoch 2/200
1/1 [==============================] - 0s 998us/step - loss: 37.0199
Epoch 3/200
1/1 [==============================] - 0s 997us/step - loss: 21.7668
Epoch 4/200
1/1 [==============================] - 0s 998us/step - loss: 12.8768
Epoch 5/200
......
Epoch 196/200
1/1 [==============================] - 0s 996us/step - loss: 0.1267
Epoch 197/200
1/1 [==============================] - 0s 0s/step - loss: 0.1258
Epoch 198/200
1/1 [==============================] - 0s 997us/step - loss: 0.1249
Epoch 199/200
1/1 [==============================] - 0s 998us/step - loss: 0.1241
Epoch 200/200
1/1 [==============================] - 0s 997us/step - loss: 0.1233
loss值不断变小,说明模型逐渐变优。
当然,如果我们增加epochs的数量,增加数据量,或者找到更好的优化方法,我们的模型拟合程度可能会更好,在这里我们不再讨论。
4.预测
根据已给数组,我们可以大致估计出其表达式大致为y=2x-1。
如果我们输入一个数字,比如6,我们的理想结果是得到2*6-1=11。所以,只要输入6时,得到的数字与11相近,我们得到的模型便在一定程度上满足了我们的需求。
输入以下代码:
model.predict([6])
得到结果:
[[10.525723]]
该结果接近11,模型构建成功。
三、小结
本文只从一个简单的线性回归预测问题入手,主要目的是帮助对Tensorflow 2.0的代码有一初步了解。
Tensorflow是我们进行深度学习所借助的工具,真正想要操作并实现其功能,发挥其最大威力,还是需要对深度学习的知识熟悉并掌握。