发新帖

TensorFlow 学习 -- 编程人员指南: 低级别 API 简介 (3)

[复制链接]
224 0

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
本帖最后由 大白白 于 2018-7-6 15:55 编辑

转载自:https://tensorflow.google.cn/programmers_guide/low_level_intro?hl=zh-CN


训 练
您现在已经了解 TensorFlow 核心部分的基础知识了,我们来手动训练一个小型回归模型吧。


定义数据
我们首先来定义一些输入值 x,以及每个输入值的预期输出值 y_true:

x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)

定义模型
接下来,建立一个简单的线性模型,其输出值只有 1 个:

linear_model = tf.layers.Dense(units=1)

y_pred = linear_model(x)
您可以如下评估预测值:

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

print(sess.run(y_pred))
该模型尚未接受训练,因此四个“预测”值并不理想。以下是我们得到的结果,您预期的输出值应该是不一样的:

[[ 0.02631879]
[ 0.05263758]
[ 0.07895637]
[ 0.10527515]]


损 失
要优化模型,您首先需要定义损失。我们将使用均方误差,这是回归问题的标准损失。
虽然您可以使用较低级别的数学运算指令来手动执行此操作,但 tf.losses 模块提供了一系列常用的损失函数。您可以使用它来计算均方误差,具体操作如下所示:

loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)

print(sess.run(loss))
这会生成如下所示的一个损失值:

2.23962


训 练
TensorFlow 提供了优化器来执行标准的优化算法。这些优化器被用作 tf.train.Optimizer 的子类别。它们会逐渐改变每个变量,以便将损失最小化。最简单的优化算法是梯度下降法,可通过 tf.train.GradientDescentOptimizer 执行。它会根据损失相对于变量的导数大小来修改各个变量。例如:

optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
该代码构建了优化所需的所有图组件,并返回一个训练指令。该训练指令在运行时会更新图中的变量。您可以按以下方式运行该指令:

for i in range(100):
  _, loss_value = sess.run((train, loss))
  print(loss_value)
由于 train 是一个指令而不是张量,因此它在运行时不会返回一个值。为了查看训练期间损失的进展,我们会同时运行损失张量,生成如下所示的输出值:

1.35659
1.00412
0.759167
0.588829
0.470264
0.387626
0.329918
0.289511
0.261112
0.241046
...


完整程序

x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)

linear_model = tf.layers.Dense(units=1)

y_pred = linear_model(x)
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)

optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

init = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init)
for i in range(100):
  _, loss_value = sess.run((train, loss))
  print(loss_value)

print(sess.run(y_pred))


后续步骤
要详细了解如何使用 TensorFlow 构建模型,请参阅以下内容:
  • 自定义 Estimator,了解如何使用 TensorFlow 构建自定义模型。您对 TensorFlow Core 的了解将帮助您理解和调试自己的模型。
如果您想详细了解 TensorFlow 的内部工作原理,请参阅以下文档。这些文档深入探讨了这篇文章中提及的许多主题:


本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表