认识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])
预测。
通过这样简单的一小段代码就实现了一个深度学习的程序。
![独立开发者手记](https://images.cnblogs.com/cnblogs_com/dreampursuer/2381372/o_240229024324_qr_code.png)
出处:http://www.cnblogs.com/dreampursuer/
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。