认识tensorflow - 【老鱼学tensorflow2】

深度学习是模仿了生物的神经元的概念,你可以想象用一大堆的神经元通过各种刺激来对外部世界进行感知,从而建立起对外部世界的模型。

比如给你一个数据对:

x y
-1 -3
0 -1
1 1
2 3
3 5
4 7

我们可以使用深度学习通过从数据中学习来了解其中的规律,类似人类的学习,从我们的感知和实践中认识世界。
我们从直观的方式来看一下这些数据具有什么规律。

import numpy as np
import matplotlib.pyplot as plt
xs = np.array([-1.0, 0, 1, 2, 3, 4], dtype=float)
ys = np.array([-3, -1, 1, 3, 5, 7], dtype=float)

plt.plot(xs, ys)
plt.show()

显示的图形为:

从肉眼上看直观的感觉是线性关系,我们用深度学习来训练一下模型(假设我们不知道这个数据的规律的情况下)

import tensorflow as tf
import numpy as np
import tensorflow.keras as keras

xs = np.array([-1.0, 0, 1, 2, 3, 4], dtype=float)
ys = np.array([-3, -1, 1, 3, 5, 7], dtype=float)

model = keras.models.Sequential([
    keras.layers.Dense(units=1, input_shape=[1])
])
model.compile(optimizer='sgd', loss='mean_squared_error')
model.fit(xs, ys, epochs=500)
print(model.predict([10.0]))

关于深度学习的代码不多,我们一个一个来稍微简单介绍一下。

model = keras.models.Sequential([
   ...
])

keras.models.Sequential() :建立了一个顺序堆叠的模型,就像乐高积木一样,这是一个一层一层顺序堆叠起来的模型,其它估计还有分支一样的模型。
在这个顺序堆叠的模型中,其中首先加入了一个层(你可以理解为一块乐高积木)为:keras.layers.Dense ,这是一个全连接层,也就是其神经元前面和后面全连接,就像我们大脑中的一个皮层,你可以想象成前面有很多插口线,后面也有很多输出线。而这里我们只定义了一个输入只有一个插口(输入参数为一维),输出也只有一个输出线(输出为一个数值)。
为何输入只有一维、输出也只有一维呢?
那是因为我们的数据中输入只有一维的x,输出也只有一维的y。

在定义好了模型后,可以对这个模型进行编译了,编译也很简单,只要调用model.compile()函数就可以,不过这里需要指定两个参数,这是本程序中相对比较难理解的部分。
首先指定了一个损失函数loss,损失函数用来确地我们是否学习到了,也就是我们要有一个评判我们是否学到了东西的函数,在深度学习中用损失函数来定义,比如这里用mean_squared_error来定义,也就是均方差,让神经网络的输出值尽量地同期望的输出值接近。
另一个参数是优化器optimizer。这里使用sgd优化算法,优化器本身就是一个函数,其目的是通过优化算法让损失值尽量地减少。
keras中有多种优化器,这里使用梯度下降算法来进行优化。

最后通过model.fit(xs, ys, epochs=500)来进行训练,训练的迭代次数用500次。
当模型训练完成后,我们就可以用此模型来进行model.predict([10.0])预测。

通过这样简单的一小段代码就实现了一个深度学习的程序。

posted @ 2020-07-16 16:32  dreampursuer  阅读(205)  评论(0编辑  收藏  举报