Skip to content

Latest commit

 

History

History
160 lines (99 loc) · 7.48 KB

gentlest-introduction-tensorflow-part-2.md

File metadata and controls

160 lines (99 loc) · 7.48 KB

《最温和的 Tensorflow 入门 – 第二部分》

原文:www.kdnuggets.com/2016/08/gentlest-introduction-tensorflow-part-2.html/2

训练变化。

随机、小批量、批量

在上述训练中,我们在每个时期喂入一个数据点。这被称为随机梯度下降。我们可以在每个时期喂入一批数据点,这被称为小批量梯度下降,甚至可以在每个时期喂入所有数据点,这被称为批量梯度下降。请参见下面的图形比较,并注意三张图之间的两个差异:

  • 每个时期喂入 TF.Graph 的数据点数量(每个图的右上角)。

  • 梯度下降优化器在调整 W、b 以降低成本时需要考虑的数据点数量(每个图的右下角)。

Image

随机梯度下降

Image

小批量梯度下降

Image

批量梯度下降

每个时期使用的数据点数量有两个影响。使用更多的数据点:

  • 计算资源(减法、平方和加法)用于计算成本和执行梯度下降的需求增加。

  • 模型学习和泛化的速度增加。

随机、小批量、批量梯度下降的优缺点可以在下面的图表中总结:

Image

随机、小批量和批量梯度下降的优缺点

要在随机/小批量/批量梯度下降之间切换,我们只需要在将数据点输入训练步骤 [D] 之前准备不同的批量大小,即使用下面的代码片段用于 [C]:

# * all_xs: All the feature values
# * all_ys: All the outcome values
# datapoint_size: Number of points/entries in all_xs/all_ys
# batch_size: Configure this to:
#             1: stochastic mode
#             integer < datapoint_size: mini-batch mode
#             datapoint_size: batch mode
# i: Current epoch number

if datapoint_size == batch_size:
  # Batch mode so select all points starting from index 0
  batch_start_idx = 0
elif datapoint_size < batch_size:
  # Not possible
  raise ValueError(“datapoint_size: %d, must be greater than         
                    batch_size: %d% (datapoint_size, batch_size))
else:
  # stochastic/mini-batch mode: Select datapoints in batches
  #                             from all possible datapoints
  batch_start_idx = (i * batch_size) % (datapoint_sizebatch_size)
  batch_end_idx = batch_start_idx + batch_size
  batch_xs = all_xs[batch_start_idx:batch_end_idx]
  batch_ys = all_ys[batch_start_idx:batch_end_idx]

# Get batched datapoints into xs, ys, which is fed into
# 'train_step'
xs = np.array(batch_xs)
ys = np.array(batch_ys)

学习率变化

学习率是指我们希望梯度下降调整 W、b 时增减的幅度。使用较小的学习率,我们会缓慢而稳妥地接近最小成本,但使用较大的学习率,我们可以更快地达到最小成本,但存在“超调”的风险,从而无法找到最小值。

为了克服这个问题,许多机器学习从业者在初始阶段使用较大的学习率(假设初始成本离最小值很远),然后在每个时期后逐渐降低学习率。

TF 提供了两种方法,如此 StackOverflow 讨论 中精彩解释,但这里是总结。

使用梯度下降优化器变体。

TF 提供了多种梯度下降优化器,支持学习率变化,例如 tf.train.AdagradientOptimizertf.train.AdamOptimizer

使用tf.placeholder来设置学习率

正如你之前学到的,如果我们声明一个tf.placeholder,在这种情况下用于学习率,并在tf.train.GradientDescentOptimizer中使用它,我们可以在每个训练 epoch 中向其提供不同的值,就像我们在每个 epoch 中向 x、y_(它们也是tf.placeholders)提供不同的数据点一样。

我们需要 2 个小修改:

# Modify [B] to make 'learn_rate' a 'tf.placeholder'
# and supply it to the 'learning_rate' parameter name of
# tf.train.GradientDescentOptimizer
learn_rate = tf.placeholder(tf.float32, shape=[])
train_step = tf.train.GradientDescentOptimizer(
    learning_rate=learn_rate).minimize(cost)

# Modify [D] to include feed a 'learn_rate' value,
# which is the 'initial_learn_rate' divided by
# 'i' (current epoch number)
# NOTE: Oversimplified. For example only.
feed = { x: xs, y_: ys, learn_rate: initial_learn_rate/i }
sess.run(train_step, feed_dict=feed)

总结

我们展示了什么是机器学习的“训练”,以及如何仅通过模型和成本定义,循环进行训练步骤来使用 Tensorflow,这些步骤将数据点输入到梯度下降优化器中。我们还讨论了训练中的常见变体,即每个 epoch 中模型用于学习的数据点大小的变化,以及梯度下降优化器的学习率的变化。

接下来

  • 设置 Tensor Board 以可视化 TF 执行,检测模型、成本函数或梯度下降中的问题

  • 使用多个特征进行线性回归

资源

  • 代码可以在 Github 上找到

  • 关于此主题的幻灯片可在 SlideShare 上查看

  • 视频可在 YouTube 上观看

简介: Soon Hin Khor,博士,致力于通过技术使世界更加关怀和负责任。ruby-tensorflow 的贡献者。东京 Tensorflow meetup 的共同组织者。

原文. 经许可转载。

相关内容:

  • TensorFlow 的优点、缺点和不足

  • Tensorflow 中的多任务学习:第一部分

  • 理解深度学习的 7 个步骤


我们的前三大课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。

2. 谷歌数据分析专业证书 - 提升你的数据分析技能

3. 谷歌 IT 支持专业证书 - 支持你所在的组织的 IT 需求


更多相关主题