0 深度学习模型训练入门
- 如何通过tensorflow训练最简单的全连接网络,生成线性回归模型。
- 来自https://github.com/tensorflow/examples教程
1 导入依赖
from future 把下一个新版本的特性导入到当前版本 (如果某个版本中出现了某个新的功能特性,而且这个特性和当前版本中使用的不兼容,也就是它在该版本中不是语言标准,那么我如果想要使用的话就需要从future模块导入)
absolute_import 绝对引入
division 精确除法
print_function 指print需要加括号
unicode_literals 为了适应Python 3.x的新的字符串的表示方法,将所有字符串都视为unicode
-
导入 tensorflow
tf.logging.set_verbosity 为将要被记录的的东西(日志)设置开始入口
-
导入numpy
-
将数据表示成高性能的列表
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
tf.logging.set_verbosity(tf.logging.ERROR)
import numpy as np
2 设置训练数据
celsius_q = np.array([-40, -10, 0, 8, 15, 22, 38], dtype=float)
fahrenheit_a = np.array([-40, 14, 32, 46, 59, 72, 100], dtype=float)
for i,c in enumerate(celsius_q):
print("%s degrees Celsius = %s degress Fahrenheit" % (i, c))
3 生成模型
- build a layer
- 将layer导入模型
layer0 = tf.keras.layers.Dense(units=1,input_shape=[1])
model = tf.keras.Sequential([layer0])
另一种写法
model = tf.keras.Sequential([
tf.keras.layers.Dense(units=2, input_shape=[1])
])
4 编译模型
- 定义损失函数 loss function : 衡量预测值和正确值差距(即损失)的方法
- 定义优化函数 optimizer function :调整模型参数以减少损失的方法
model.compile(loss='mean_squared_error',
optimizer=tf.keras.optimizers.Adam(0.1))
其中optimizer的参数:
0.1为学习率,Adam的学习率范围为[0.001,0.1]
太小,学习的迭代次数会很多
太大,模型的精确率会降低
5 训练模型
- fit
history = model.fit(celsius_q, fahrenheit_a, epochs=500, verbose=0)
print("Finished training the model.")
第一个参数是输入
第二个参数是输出
epochs :运行这个循环的次数
verbose :控制fit产生的输出量
verbose:日志显示
verbose = 0 为不在标准输出流输出日志信息
verbose = 1 为输出进度条记录
verbose = 2 为每个epoch输出一行记录
注意: 默认为 1
6 展示训练数据
通过fit方法 我们得到了history类,可以用这个类画出 经过每次训练轮次之后模型的损失
-
matplot
提供可视化方案
import matplotlib.pyplot as plt
plt.xlabel('Epoch Number')
plt.ylabel("Loss Magnitude")
plt.plot(history.history['loss'])
image.png
7 用训练之后的模型进行预测
- predict
print(model.predict([100.0]))
image.png
image.png
8 回顾和查看参数(layer weights)
我们创建了一个全连接层,训练了3500个样本(7对样本、500轮次)
print("These are the layer variables: {}".format(layer0.get_weights()))
9 关于这个例子的增强版
用3层网络进行建模:
l0(1 * 4)
l1(4 * 4)
l2(4 * 1)
l0 = tf.keras.layers.Dense(units=4, input_shape=[1])
l1 = tf.keras.layers.Dense(units=4)
l2 = tf.keras.layers.Dense(units=1)
model = tf.keras.Sequential([l0, l1, l2])
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.1))
model.fit(celsius_q, fahrenheit_a, epochs=500, verbose=False)
print("Finished training the model")
print(model.predict([100.0]))
print("Model predicts that 100 degrees Celsius is: {} degrees Fahrenheit".format(model.predict([100.0])))
print("These are the l0 variables: {}".format(l0.get_weights()))
print("These are the l1 variables: {}".format(l1.get_weights()))
print("These are the l2 variables: {}".format(l2.get_weights()))
image.png
网友评论